考虑在何处存储文档 - 在文件服务器上还是在DB中?

Sha*_*ica 4 sql-server blob fileserver

我有一个关于上传到我的网站的文件的设计决定:我可以将它们存储在我的文件服务器上,或者我可以将它们存储在我的数据库中的blob(MSSQL 2005).如果它对设计决定有任何影响,这些文件是保密的,必须有一定程度的保护.

我想到的考虑因素是:

  1. 存储在文件服务器上会使HUUUUUUUGE文件数量全部转储到一个目录中,因此访问速度较慢,除非我能为目录树结构计算出合理的语义定义
  2. OTOH,我猜测文件服务器可以比DB更好地处理压缩......或者我错了?
  3. 我的直觉告诉我,DB的安全性比文件服务器强,但我不确定这是否一定是真的.
  4. 不知道我的数据库中有多TB的blob会影响性能.

我非常感谢这里的一些建议.谢谢!

mar*_*c_s 7

在SQL Server 2005中,您只能选择使用VARBINARY(MAX)将文件存储在数据库表中,或者将它们保留在外部.

将它们留在数据库之外的明显缺点是数据库无法真正控制它们发生的情况; 他们可以移动,重命名,删除.....

SQL Server 2008引入了类型FILESTERAM属性VARBINARY(MAX),它允许您将文件保留在数据库表之外,但仍然受数据库的事务控制 - 例如,您不能只是从磁盘中删除文件,这些文件是数据库的组成部分,因此得到复制和备份.很棒,如果你需要它,但它可以做一些巨大的备份!:-)

SQL Server 2008的发布提供了一些关于何时直接在数据库中存储内容以及何时使用FILESTREAM的"最佳实践".这些是:

  • 如果文件的大小通常小于256 KB,则数据库表是最佳选择
  • 如果文件大小通常超过1 MB,或者大小超过2 GB,那么FILESTREAM(或者在您的情况下:普通旧文件系统)是您的最佳选择
  • 这两个边距之间没有文件建议

此外,为了不对查询的性能产生负面影响,将大文件放在一个单独的表中通常是个好主意 - 不要让巨大的blob成为您查询的常规表的一部分 - 而是创建一个如果你真的需要兆字节的文档或图像,你只能查询的单独的表.

这可能会让你知道从哪里开始!