在SQL Server中存储文件还是将它们保存在文件服务器上?

kev*_*ers 8 c# sql-server sql-server-2005 workflow-foundation

目前,我们有数千个Microsoft Word文件,Excel文件,PDF,图像等存储在文件夹/子文件夹中.这些是由应用程序定期生成的,可以在该应用程序中随时访问.在我们期待升级时,我们现在正在考虑将所有这些文档存储在SQL Server 2005中.这样做的原因是能够压缩文档,添加其他字段以存储有关这些文档的更多信息,并在必要时应用索引.

我想我所追求的是使用SQL Server作为文档存储库而不是将它们保留在文件服务器上的优缺点,以及您在执行此操作时可能获得的任何经验.

我们将使用C#和Windows Workflow来完成此任务.

感谢您的意见.

编辑


文件有多大?

介于100k = 200k之间(平均70KB)

会有多少?

目前它大约有310万个文件(范围从Word/Excel和PDF),每天可以增加2,600个文件.(增长也会随着时间的推移而增加)

读了多少?

这个很难量化,因为我们的旧系统/应用程序很难解决这个问题.


在类似职位上指出的另一个有用的链接涵盖了两种方法的利弊.

DB与FileSystem上存储的文件 - 优点和缺点

Mla*_*dic 17

doc规则的经验法则是:

size < 256 kb: store in db
265 kb < size < 1 MB: test for your load
size > 1 Mb: store on file system
Run Code Online (Sandbox Code Playgroud)

编辑:这个经验法则也适用于SQL Server 2008中的FILESTREAM存储


Joh*_*ers 12

如果您一直升级到SQL Server 2008,那么您可以使用新的FILESTREAM功能,该功能允许文档在表中显示为列,但是作为文件驻留在共享上,可以直接访问它通过程序(如Word).


Mer*_*ste 8

我会两个都有.

我会用一个唯一的名称重命名文件,因此更容易管理,我会保留数据库中的所有元数据(文件名,内容类型,文件系统上的位置,大小,描述等),所以文件是通过数据库(间接)访问.

好处:

  • 文件很容易处理; 您可以在混合中携带多个驱动器
  • 数据库可以保留任意数量的元信息,包括可以搜索的文件描述.
  • 跟踪文件访问和其他统计信息
  • 使用各种范例重新排列文件:树(目录结构),标签,搜索或上下文

您也可以对驱动器进行压缩.您可以使用RAID进行备份和速度.