【问题标题】:Storing Images : DB or File System -存储图像:数据库或文件系统 -
【发布时间】:2009-08-05 16:04:54
【问题描述】:

我阅读了一些关于这方面的帖子,但我仍然不明白在我的情况下最好的解决方案是什么。

我开始编写一个新的 webApp,后端将提供大约 1-1000 万张图片。 (单张图片的平均大小 200-500kB

我的网站会同时向 100-1000 位用户提供内容和图片。

我还希望尽可能降低提供商成本(但这是次要要求)。 我认为与数据库大小的成本相比,文件系统空间更便宜。

就我个人而言,我喜欢将我所有的图片都放在数据库中的想法,但任何建议都会非常感激:)

您认为就我而言,DB 方法是正确的选择吗?

【问题讨论】:

  • 重复?我正在使用 10MB 的 1/20 - 1/50 的 java、mysql 和图像文件。我的问题与特定技术无关,而是与需要存储的图像的大小/数量有关

标签: database image filesystems storage


【解决方案1】:

将所有这些图像放入数据库中会使它变得非常非常大。这意味着您的数据库引擎将忙于缓存所有这些图像(它并不是真正设计的任务),而它可能正在缓存热门​​应用程序数据。

将文件缓存留给操作系统和/或您的反向代理 - 他们会做得更好。

【讨论】:

  • 边缘服务器应该为你做这件事,如果你有能力扩展的话。边缘服务器将关闭 HTTP 流量,因此图像来自何处无关紧要,除了初始请求和超时“之后”发生的请求子集。请记住,最好以这样一种方式构建他们的数据库层,即它可以用正确的信息响应 HEAD 请求,而无需访问包含“整个”图像的记录。磁盘通常更快,但选择数据库并不意味着您必须放弃所有性能。
【解决方案2】:

在文件系统上存储图像的其他一些原因:

  • 即使数据库繁忙或停机,图像服务器也可以运行。
  • 文件系统用于存储文件,并且非常高效。
  • 将数据转储到数据库中意味着备份和其他操作速度较慢。
  • 无需服务器端编码即可提供图像,只需简单的旧 IIS/Apache。
  • 您可以使用非常便宜的 Web 服务器更快地扩展,或者可能扩展至 CDN。
  • 您可以在不涉及数据库的情况下执行相关工作(生成缩略图等)。
  • 您的数据库服务器可以在内存中保留更多“真实”表数据,这是您获得数据库查询速度的地方。如果它使用其宝贵的内存来缓存图像文件,那么与在内存中拥有更多照片索引相比,在速度方面几乎没有什么好处。

【讨论】:

    【解决方案3】:

    大多数大型网站都使用文件系统。

    Store pictures as files or in the database for a web app?

    【讨论】:

      【解决方案4】:

      在处理二进制对象时,遵循以文档为中心的架构方法,而不是将 pdf 和图像等文档存储在数据库中,当您开始看到数据库的各种性能问题时,您最终将不得不对其进行重构。只需将文件存储在文件系统上,并将路径放在数据库表中即可。用于序列化并将其保存在数据库中的数据类型的大小也存在物理限制。只需将其存储在文件系统中并访问即可。

      【讨论】:

      • 在 SO 上每天都会有人问这个问题。
      【解决方案5】:

      您的第一句话说您已阅读有关该主题的一些帖子,因此我不会费心添加指向该主题的文章的链接。根据我的经验,根据您发布的图像数量和图像大小,如果您将它们存储在数据库中,您将在数据库性能方面付出高昂的代价。我会将它们存储在文件系统中。

      【讨论】:

        【解决方案6】:

        您使用的是什么数据库? MS SQL Server 2008 提供 FILESTREAM 存储

        允许结合使用 SQL Server 2008 和 NTFS 文件系统来存储和高效访问 BLOB 数据。它涵盖了 BLOB 存储的选择、配置 Windows 和 SQL Server 以使用 FILESTREAM 数据、将 FILESTREAM 与其他功能结合的注意事项以及分区和性能等实现细节。

        details

        【讨论】:

          【解决方案7】:

          我们使用 FileNet,一种针对成像进行了优化的服务器。这个很贵。更便宜的解决方案是使用文件服务器。

          请不要考虑在数据库服务器上存储大文件。

          正如其他人所提到的,在数据​​库中存储对大文件的引用。

          【讨论】:

            猜你喜欢
            • 2012-06-29
            • 1970-01-01
            • 2011-05-31
            • 2014-05-04
            • 2012-06-26
            • 2011-01-04
            • 2021-05-31
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多