【发布时间】:2015-09-10 02:52:07
【问题描述】:
在 SQL Server 中将音频文件(mp3、wav)存储为 BLOB 是否是个好主意?优点之一似乎是节省硬盘空间。这对可扩展性或性能有任何影响吗?
【问题讨论】:
标签: sql-server sql-server-2005
在 SQL Server 中将音频文件(mp3、wav)存储为 BLOB 是否是个好主意?优点之一似乎是节省硬盘空间。这对可扩展性或性能有任何影响吗?
【问题讨论】:
标签: sql-server sql-server-2005
不,这不是一个好主意 :) 可变大小的字段(例如 TEXT 和 BLOB)会对性能产生各种影响。更好的方法是将文件存储在磁盘上,并在数据库表中维护对它们的引用。如今,硬盘空间非常便宜(尤其是与 CPU 和 I/O 性能相比),甚至不应该成为一个问题。
【讨论】:
我认为这在很大程度上取决于您的应用程序是如何设计的。如果您要经常检索音频文件(或更新它们),则可能会严重影响性能,因为音频文件可能非常大。为什么不将它们放在共享的网络位置,而只是将文件的路径存储在数据库中呢?硬盘空间便宜,带宽和 SQL 性能不便宜。除非您有充分的理由将它们保存在数据库中(而且我认为这不是节省硬盘空间),否则最好将它们存储在本地或共享路径上。
【讨论】:
如果您可以选择升级到 SQL 2008(即,如果您获得免费升级许可),那么FILESTREAM 是最佳选择 - 它将“链接”放在列中,但使用常规文件系统实际存储数据。
在 SQL 2005 或更早版本中,我不会这样做。我也看不出它会如何节省硬盘空间; 5 megs 是 5 megs,无论是磁盘上的文件还是位于某处的数据库列中;后者只会使访问变得更加困难,并且正如其他人提到的那样,可能会对您的整体数据库性能产生负面影响。我猜有一些较小的文件系统开销,例如最小集群大小,但对于大文件(尤其是音频),影响可以忽略不计。
【讨论】:
如果您使用的是 Sql Server 2008,则可以使用 filestream 属性。 Sql Server 会将文件存储在文件系统上,但会将其链接到 varbinary 列。
查看以下链接:
http://www.aghausman.net/sql_server/configure-sql-server-2008-for-file-stream-2.html (断开的链接 - 仍可通过 https://web.archive.org/web/20120530062012/http://www.aghausman.net/sql_server/configure-sql-server-2008-for-file-stream-2.html 的 Internet 存档访问)
【讨论】: