将文件存储在数据库中而不是文件系统中?

Cad*_*ade 83 database sql-server filesystems storage

通常,性能损失有多糟糕的是将文件存储在数据库(特别是mssql)而不是文件系统中?我无法想出在应用程序可移植性之外的一个原因,我想将我的文件存储为SQL Server中的varbinaries.

Mic*_*tum 76

看看这个答案:

在DB中存储图像 - 是还是不?

从本质上讲,空间和性能可能会非常大,具体取决于用户数量.此外,请记住,Web服务器很便宜,您可以轻松添加更多以平衡负载,而数据库通常是最昂贵且最难扩展的Web体系结构的一部分.

有一些相反的例子(例如,Microsoft Sharepoint),但通常,将文件存储在数据库中并不是一个好主意.

除非您可能编写桌面应用程序和/或大致知道您将拥有多少用户,但对于像公共网站那样随机且无法预料的内容,您可能需要为在数据库中存储文件付出高昂代价.


Jon*_*way 36

如果您可以迁移到SQL Server 2008,您可以利用FILESTREAM支持,它可以为您提供最好的 - 文件存储在文件系统中,但数据库集成比仅在varchar字段中存储文件路径要好得多.您的查询可以返回标准的.NET文件流,这使得集成更加简单.

FILESTREAM存储入门

  • 可扩展性和可用性似乎已经深思熟虑 - 请参阅此白皮书:http://msdn.microsoft.com/en-us/library/cc949109.aspx (3认同)
  • 有一点需要注意的是,在连接数据库时必须使用集成安全性(即Windows身份验证):http://blogs.msdn.com/b/psssql/archive/2008/04/10/how-it-works -file流,需要集成的安全窗口,authentication.aspx (2认同)

Lan*_*her 22

我会说,这取决于你的情况.例如,我在当地政府工作,我们有很多图像像面部照片等.我们没有大量的用户,但我们需要有良好的安全性和审计数据.数据库对我们来说是一个更好的解决方案,因为它使这更容易,我们不会遇到扩展问题.


Zom*_*eep 6

根据我自己的经验,将文件存储为文件总是更好。原因是文件系统针对文件存储进行了优化,而数据库则没有。当然,也有一些例外(例如,备受赞誉的下一代 MS 文件系统应该构建在 SQL Server 之上),但总的来说,这是我的规则。


Wil*_*ean 6

这是什么问题?

现代DBMS SQL2008有多种处理BLOB的方法,这些方法不仅仅是在表格中.当然,有利有弊,您可能需要更深入地考虑它.

这是一篇有趣的论文,由已故的(?)Jim Gray撰写

BLOB或不BLOB:数据库或文件系统中的大对象存储