一般来说,与文件系统相比,将文件存储在数据库(特别是 mssql)中对性能的影响有多大?除了应用程序可移植性之外,我想不出任何理由希望将我的文件作为 varbinaries 存储在 SQL Server 中。

有帮助吗?

解决方案

看看这个答案:

在数据库中存储图像 - 是还是否?

从本质上讲,空间和性能的影响可能相当大,具体取决于用户数量。另外,请记住,Web 服务器很便宜,您可以轻松添加更多服务器来平衡负载,而数据库通常是 Web 架构中最昂贵且最难扩展的部分。

有一些相反的例子(例如,Microsoft Sharepoint),但通常,将文件存储在数据库中并不是一个好主意。

除非您编写桌面应用程序和/或大致知道您将拥有多少用户,但在像公共网站这样随机且不可预期的情况下,您可能会为在数据库中存储文件付出高昂的代价。

其他提示

如果您可以迁移到 SQL Server 2008,则可以利用 FILESTREAM 支持,它为您提供了两者的优点 - 文件存储在文件系统中,但数据库集成比仅将文件路径存储在 varchar 字段中要好得多。您的查询可以返回标准的.NET 文件流,这使得集成变得更加简单。

FILESTREAM 存储入门

我想说,这取决于你的情况。例如,我在地方政府工作,我们有很多图像,例如照片等。我们的用户数量并不多,但我们需要对数据进行良好的安全性和审核。数据库对我们来说是一个更好的解决方案,因为它使这变得更容易,而且我们不会遇到扩展问题。

这里有什么问题?

现代 DBMS SQL2008 有多种处理 BLOB 的方法,而不仅仅是将它们粘贴在表中。当然,有利有弊,您可能需要更深入地思考。

这是一篇有趣的论文,作者是已故(?)吉姆·格雷

BLOB 或不 BLOB:数据库或文件系统中的大对象存储

根据我自己的经验,将文件存储为文件总是更好。原因是文件系统针对文件存储进行了优化,而数据库则没有。当然,也有一些例外(例如备受赞誉的下一代 MS 文件系统应该构建在 SQL Server 之上),但总的来说,这是我的规则。

虽然性能是一个问题,但我认为现代数据库设计已经大大减少了小文件的问题。

除了性能之外,它还取决于数据的紧密耦合程度。如果文件包含与数据库字段密切相关的数据,那么它在概念上属于接近数据库的字段,并且可以存储在 blob 中。如果它包含可能与多个记录相关或可能在数据库上下文之外有某种用途的信息,那么它就属于外部。例如,网页上的图像是根据链接到该图像的页面的单独请求获取的,因此它可能属于外部(取决于具体设计和安全考虑)。

我们的妥协(我不保证这是最好的)是将较小的 XML 文件存储在数据库中,但将图像和其他文件存储在数据库之外。

我们决定将其存储为 varbinary http://www.freshlogicstudios.com/Products/Folders/ 一半期待性能问题。我可以说我们对它的效果感到惊喜。

我同意@ZombieSheep 的观点。还有一件事 - 我通常认为数据库实际上不需要可移植,因为您会错过 DBMS 供应商提供的所有功能。我认为迁移到另一个数据库将是人们最不会考虑的事情。只是我的 $.02

必须将 blob(图像)解析为字节数组,然后以正确的文件名将其写入磁盘,然后读取它的开销足以阻止您经常这样做,特别是如果文件是相当大。

不要含糊其辞,但我认为您将存储的“文件”类型是最大的决定因素之一。如果您本质上谈论的是可以存储为文件的大型文本字段,我的偏好是数据库存储。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top