将文件存储在数据库中而不是文件系统中?

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

请先 登录 后评论

6 个回答

Lance Fisher

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

请先 登录 后评论
Jon Limjap

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

请先 登录 后评论
N8g

不要含糊其辞,但我认为您将存储的“文件”类型是最大的决定因素之一。如果您本质上是在谈论可以存储为文件的大文本字段,那么我更喜欢使用 db 存储。

请先 登录 后评论
Marcus Downing

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

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

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

请先 登录 后评论
ZombieSheep

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

请先 登录 后评论
martinsb

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

请先 登录 后评论