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

时间:2009-07-14 09:31:37

标签: 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个文件。 (增长也会随着时间的推移而增加)

读了多少?

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


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

Files Stored on DB vs FileSystem - Pros and Cons

7 个答案:

答案 0 :(得分:17)

doc doc的经验法则是:

size < 256 kb: store in db
265 kb < size < 1 MB: test for your load
size > 1 Mb: store on file system

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

答案 1 :(得分:12)

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

答案 2 :(得分:8)

我会同时拥有。

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

优点:

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

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

答案 3 :(得分:1)

我们在谈论什么样的文件?

在SQL服务器中存储文档可能很有用,因为您可以将文档与其他表关联起来并使用全文索引等技术,并执行模糊搜索等操作。

缺点是创建文档备份可能有点困难。使用NTFS压缩或其他技术也可以进行压缩。

答案 4 :(得分:1)

这些文档是否基于文档,您是否计划使用SQL Server的全文搜索来搜索这些文档?如果没有,我认为将这些文件存储在数据库上没有任何好处。当然,您始终可以将与文档相关的元数据(包括路径信息)存储到数据库中。

答案 5 :(得分:1)

在数据库中删除文档的一大好处是可以更轻松地控制对它们的安全访问,因为您可以通过应用程序中的访问控制来完成所有操作。将它们存储在文件服务器上需要在文件和文件夹级别处理访问权限,以防止任何直接访问。在数据库中使用它们可以进行单点备份,因此您可以更轻松地制作完整副本和/或在需要时移动它。

答案 6 :(得分:1)

您应该考虑购买一个或使用WSS / SharePoint,而不是编写自定义DMS(文档管理系统),因为这将处理所有平凡的细节(存储,索引,元数据),并让您构建自定义功能在顶部。