在SQL中存储文件与在Web服务器的HDD中存储

时间:2012-02-02 11:30:38

标签: asp.net sql-server-2008 file-upload

所以我在asp.net上有这个网站,它允许用户上传并将重要文件保存到服务器,这可以根据用户的要求(当用户登录并查看他的文件并点击他的某个文件时)被允许下载到客户计算机。
此外,允许保存的文件大小小于25Mb(至少现在!),文件只能是任何类型,包括但不限于.txt,.rtf,.pdf,.doc,.docx ,. jpg,.png等 所以,问题是我应该在哪里存储文件以考虑最佳性能,我应该将文件存储在SQL Server中(使用SQL Server 2008就知道,visual studio 2008 sp1)在列中(可能是BLOB格式吗?)或应该我把它们存放在服务器的硬盘中 另外,考虑到最大尺寸,即使10个用户上传了20Mb的文件,这也会占用200Mb的存储空间!如果有人能说出来,如果这些文件存储在数据库中,这会导致数据库大小增加多少? 我的意思是,相对于文件系统中的存储,数据库中的空间需求会增长多少,哪种性能会更好?

3 个答案:

答案 0 :(得分:2)

请参阅此Microsoft论文:To Blob or not

恕我直言 - 这两种方法都有很多好处和缺点 - 在DB中存储文件并将它们存储在FS中

对于sql server 2008,

还有另一种选择 - 将文件作为数据库的一部分存储在FileSYstem中,请参阅FILESTREAM overview

答案 1 :(得分:0)

我个人总是将磁盘存储用于这样的文件数据。数据库最终只是在磁盘上存储文件数据,只需要额外的成本和抽象层。抽象总是会增加扩展和性能障碍。例如,它更容易从本地HDD上的文件转换到CDN中的文件而不是数据库,并且在需要时更容易添加更多磁盘空间而无需扩展数据库的大小。

我已经构建了与您过去描述的类似的系统,从经验来看,值得投入一些时间考虑商店文件的抽象方式,以便可以换出或更新。

答案 2 :(得分:0)

根据msg文件,Oleg提供的文件以及使用db的较小文件(约0.25MB或更少)可用的其他一些基准/意见可能会相当快,但是我会保留该解决方案仅用于极端的良好基础。对于大多数情况,我会说在HDD上存储文件更合适,更灵活,更自然。

但是,我不应该仅限于分析性能。考虑到不同的方面,如:

  • 安全
  • 备份
  • 可扩展性(例如复制)

在使用其他数据源时通常需要特别注意。