我有一个关于上传到我的网站的文件的设计决定:我可以将它们存储在我的文件服务器上,或者我可以将它们存储在我的数据库中的blob(MSSQL 2005)。如果它对设计决定有任何影响,这些文件是保密的,必须有一定程度的保护。
我想到的考虑因素是:
我非常感谢这里的一些建议。谢谢!
答案 0 :(得分:7)
在SQL Server 2005中,您只能选择使用VARBINARY(MAX)
将文件存储在数据库表中,或者将它们保留在外部。
将它们留在数据库之外的明显缺点是数据库无法真正控制它们发生的情况;他们可以被移动,重命名,删除.....
SQL Server 2008 在FILESTERAM
类型上引入VARBINARY(MAX)
属性,允许您将文件保留在数据库表之外,但仍处于数据库的事务控制之下 - 例如你不能只是从磁盘中删除文件,这些文件是数据库的组成部分,因此可以复制并备份。很棒,如果你需要它,但它可以做一些巨大的备份! : - )
SQL Server 2008的发布提供了一些关于何时直接在数据库中存储内容以及何时使用FILESTREAM的“最佳实践”。这些是:
另外,为了不对查询的性能产生负面影响,将大文件放在一个单独的表中通常是个好主意 - 不要让巨大的blob成为您查询的常规表的一部分 - 但是而是创建一个单独的表,如果你真的需要兆字节的文档或图像,你只能查询它。
这样可以让你知道从哪里开始!
答案 1 :(得分:3)
我强烈建议您考虑文件系统解决方案。原因是:
如果您担心目录中存在大量条目,则始终可以创建分支架构。例如:
filename : hello.txt
filename md5: 2e54144ba487ae25d03a3caba233da71
final filesystem position: /path/2e/54/hello.txt
答案 2 :(得分:1)
这个受欢迎的主题背后有很多“它取决于”。既然你说这些文件是敏感和保密的,那么我会把它存放在数据库中。原因如下:
SQL Server 2008也有文件流数据类型,这在这里可能会有所帮助,但我对它不够熟悉,无法根据您的情况提供建议。