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

所以我使用的应用程序在数据库中大量存储图像。您对此有何看法?我更喜欢将位置存储在文件系统中,而不是直接将其存储在数据库中。

您认为优点/缺点是什么?

请先 登录 后评论

9 个回答

graham.reeds

在我以前工作的一家公司,我们在 Oracle 8i(当时是 9i)数据库中存储了 1.55 亿张图像。 7.5TB 价值。

请先 登录 后评论
urini

不经常编辑的小型静态图像(不超过几兆)应存储在数据库中。这种方法有几个好处,包括更容易移植(图像与数据库一起传输)、更容易备份/恢复(图像与数据库一起备份)和更好的可扩展性(包含数千个小缩略图文件的文件系统文件夹听起来像是可扩展性的噩梦)我)。

从数据库中提供图像很容易,只需实现一个 http 处理程序,将数据库服务器返回的字节数组作为二进制流提供。

请先 登录 后评论
Teifion

您的网络服务器(我假设您正在使用)旨在处理图像,而数据库则不是。因此,我会大力投反对票。

仅将路径(可能还有文件信息)存储在数据库中。

请先 登录 后评论
Mark Harrison

我负责管理许多 TB 图像的应用程序。我们发现最好在数据库中存储文件路径

有几个问题:

  • 数据库存储通常比文件系统存储更昂贵
  • 您可以使用标准的现成产品超加速文件系统访问
    • 例如,许多 Web 服务器使用操作系统的 sendfile() 系统调用将文件直接从文件系统异步发送到网络接口。存储在数据库中的图像不会从这种优化中受益。
  • Web 服务器等无需特殊编码或处理即可访问文件系统中的图像
  • 数据库在图像和元数据之间的事务完整性很重要的情况下胜出。
    • 管理数据库元数据和文件系统数据之间的完整性更为复杂
    • 很难(在 Web 应用程序的上下文中)保证数据已刷新到文件系统上的磁盘
请先 登录 后评论
Patrick McElhaney

根据我的经验,有时最简单的解决方案是根据主键命名图像。因此很容易找到属于特定记录的图像,反之亦然。但与此同时,您不会在数据库中存储关于图像的任何信息。

请先 登录 后评论
Michael Stum

通常,我坚决反对采用最昂贵和最难扩展的基础架构部分(数据库)并将所有负载放入其中。另一方面:它极大地简化了备份策略,尤其是当您有多个 Web 服务器并且需要以某种方式保持数据同步时。

像大多数其他事情一样,这取决于预期的规模和预算。

请先 登录 后评论
David

如果这是基于 Web 的应用程序,那么将图像存储在第三方存储交付网络(例如 Amazon 的 S3 或 Nirvanix 平台)上可能会有优势。

请先 登录 后评论
Community

其次是关于文件路径的建议。我参与了几个需要管理大型资产集合的项目,任何将内容直接存储在数据库中的尝试都会导致长期的痛苦和挫折。

关于将它们存储在数据库中,我能想到的唯一真正的“专业人士”是单个图像资产的简单化潜力。如果没有可供使用的文件路径,并且所有图像都直接从数据库中流出,那么用户就不会发现他们不应该访问的文件。

不过,这似乎可以通过中间脚本从网络无法访问的文件存储中提取数据来更好地解决。所以数据库存储并不是真正必要的。

请先 登录 后评论
GateKiller

我会亲自将大数据存储在数据库之外。

优点:请将所有内容合二为一,轻松访问数据文件,轻松备份 缺点:降低数据库性能,许多页面拆分,可能导致数据库损坏

请先 登录 后评论