【问题标题】:Storing files in SQL vs Storing in web server's HDD将文件存储在 SQL 中与存储在 Web 服务器的硬盘中
【发布时间】:2012-02-02 11:30:37
【问题描述】:

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

【问题讨论】:

  • 我个人喜欢将文件存储在文件系统上。

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


【解决方案1】:

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

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

但是对于 sql server 2008,还有另一种选择 - 将文件作为 DB 的一部分存储在 FileSYstem 中,请参阅 FILESTREAM overview

【讨论】:

    【解决方案2】:

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

    我已经构建了与您过去描述的系统类似的系统,根据经验,值得花一些时间来考虑存储文件的抽象方式,以便可以换出或更新它。

    【讨论】:

    • 同意。但是附加层可以为您提供相同的额外功能,例如一致的备份策略或复制
    • 没错,尽管基于磁盘的备份可能更具成本效益。
    • 但需要单独设置 ;-) 人们很可能会忘记这类事情 :D
    【解决方案3】:

    根据 Oleg 提供的 msdn 文档和其他一些可用于较小文件(约 0.25MB 和更少)的基准/意见,使用 db 可能会更快,但是我会保留该解决方案仅用于非常有根据的目的。在大多数情况下,我会说将文件存储在 HDD 上更合适、更灵活且……自然。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-16
      • 2016-10-08
      • 2022-12-03
      相关资源
      最近更新 更多