Background:

我们有一个内部文档存储系统,它在很久以前就已经实现了.无论出于何种原因, Select 使用数据库作为文档的存储机制.

My question is this:

存储文档的最佳做法是什么?还有什么 Select ?利与弊是什么?Answers do not have to be technology or platform specific, it is more of a general best practice question.

My Thoughts:

数据库不适用于文档存储.文件系统或第三方文档管理系统可能更有用.数据库中的文档存储非常昂贵.行动缓慢.这些是逻辑假设吗?也许这是最好的,但在我看来,我们有更好的 Select .Oracle BFILE(指向NAS或SAN上文档的链接)会比BLOB/CLOB更好吗?

Details:

  • 文档有多种类型(pdf、word、xml)
  • 中间层代码是用.Net 2.0/c#编写的.
  • 文档以带压缩的BLOB形式存储在Oracle 10g数据库中(NAS存储)
  • 文件大小很大
  • 文件数量正在急剧增长,没有任何放缓的迹象
  • 在高峰时段,插入量通常为每小时数百次
  • 在高峰期,回收率通常为每小时数千
  • 提供NAS存储和SAN存储

UPDATE (from questions below):

  • 我的背景是开发
  • 存在与存储在数据库中文件旁边的文件相关的元数据

推荐答案

在数据库中存储文档的唯一限制是技术.

relation database是企业关键任务数据的持久存储.当然,它能在多大程度上实现这一功能因数据库和系统而异.但是ideally a relational databaseACID个属性是intended,使其成为所有enterprise data个属性的存储.文件系统、修订控制器系统和其他本地存储系统可能具有特定的优势,但它们不是为企业数据存储而设计的.

如果您存储的文档符合企业数据的条件-如果它们在整个企业中被持久使用-那么将它们保留在数据库中是合乎逻辑的.如果您在数据库存储方面遇到问题,或许DBA可以找到更好的解决方案.出于性能原因,您甚至可能需要将它们移出数据库,但是出于最佳实践的原因,我认为您不应该将它们移出数据库.

当然,如果这些文档不是企业数据,如果它们只用于一个应用程序,那么将它们移出数据库也是有意义的.

Database相关问答推荐

文件存储的推荐位置 - 在数据库或其他什么地方?

用于存储人与聊天消息的数据库设计

是否有一个简单的工具可以将 mysql 转换为 postgresql 语法?

一个强大的 MySQL 管理工具,具有与 SQL Server Management Studio 类似的功能

为什么面向对象的数据库还没有成功?

PostgreSQL - 按时间戳值分组?

如何使用 SELECT WHERE IN() 保持订单?

按纬度/经度进行半径搜索

在 Oracle 的 Check 语句中使用子查询

我可以在 mysql 中的 select 语句上启动触发器吗?

什么是 Scalar标量查询?

返回 DataSet/DataTable 的 PowerShell 函数中的奇怪行为

Django中的Atomic原子操作?

我应该不断地open()和close() SQL 数据库还是让它保持打开状态?

表别名如何影响性能?

在服务器上排序还是在客户端排序?

Hibernate如何连接多个数据库

CouchDB、MongoDB 和 Redis 中的哪个数据库适合从 Node.js 开始?

在 MYSQL 的子查询中使用 LIMIT 关键字的替代方法

Data Mapper 是不是比 Active Record 更现代的趋势