【问题标题】:Photos in sql database or filesystem (2012)sql 数据库或文件系统中的照片 (2012)
【发布时间】:2012-05-05 16:38:57
【问题描述】:

可能已经有几个关于这个的问题,但我想得到一个更新的答案,因为大多数答案现在已经过时了。图像、数据库或文件系统的存储哪个更好?


我认为 facebook 正在使用数据库,因为图像可以有各种扩展:| 请参阅此链接,例如:jpegjpgpnggif

【问题讨论】:

    标签: php mysql sql filesystems storage


    【解决方案1】:

    我建议将文件存储在您网站上的 images/ 文件夹或类似文件夹中,我会使用随机数或 ID 保存它们的名称,然后将该信息存储在数据库中。这将是两者的完美结合!

    【讨论】:

      【解决方案2】:

      我之前做过使用两种存储方式的系统,它通常取决于上下文。

      对于访问大量文件且服务器数量较少(通常为 1 台服务器)的系统,存储在文件中更易于开发和维护。

      对于服务器数量较多且所有服务器都需要访问文件的系统。有时我用文件和 rsync 设置它。有时我将文件存储在数据库中并让复制处理它。

      Facebook 或其他网站将其图像存储在数据库中的原因很可能是因为这个。他们需要在许多服务器中访问文件,而不需要复制文件的开销。

      【讨论】:

        【解决方案3】:

        在数据库中存储图像比在文件系统中存储数据更安全。但在性能方面,将图像存储在文件系统中效率更高。我们必须根据自己的要求选择最好的方式。

        【讨论】:

          【解决方案4】:

          虽然看起来是这样,但这不是品味问题,而是性能问题。 对于现在活跃的项目,我已经尝试了两种方式,并在其开发期间吸取了教训。

          将文件存储在数据库中似乎是创建易于部署、维护等的一体化设置的好方法。但是当涉及到较大的文件(例如高分辨率图像)时,它可能会显着增加您加载时间。

          另一方面,对于较小的图像,作为用户头像、产品缩略图、其他缩略图,它可以通过减少对服务器文件系统的请求来提高加载速度。在这种特定情况下,这完全取决于您可能拥有的 SQL 技能和查询的优化级别。


          我会给你一个建议,我现在已经在涉及许多图像的项目中使用了它,而不仅仅是那些。

          在你的数据库中创建一个表,大致如下结构:

          id            INT(5) AUTO_INCREMENT PRIMARY KEY
          filename      VARCHAR(255)
          fullsize_path CHAR(255)
          image         BLOB
          mime          CHAR(25)
          size          INT(20)
          

          呃……你明白了,BLOB 字段是你的图像所在的位置。如果它是某物的缩略图,fullsize_path 将不会留空并提及完整尺寸图像的路径。

          这样,当显示例如一个带有产品的页面时,所有的查询都将是基于 SQL 的,但是当访问一个特定的产品时,fullsize_path 会告诉浏览器在哪里可以找到大哥。


          当然,在部署这样的东西时,你有更多的事情要担心,我将在这里概述一些:

          • SQL 服务器性能
          • SQL 托管图像的最大大小(以字节为单位)
          • 要存储的图像数量

          当然,之前做一些性能测试是非常宝贵的实践!

          【讨论】:

            【解决方案5】:

            您可能还想看看 Filetable 选项。优点是更简单的编程模型(可以使用 T-SQL 和 Windows API)和更简单的管理(通过 SSMS),缺点是这会使数据库更大。如果您选择此选项,您将需要将文件表放置在专用文件组上,并且您需要调整备份策略以包括文件组备份。

            另一种可能性是查看 RBS(远程 BLOB 存储),它作为 SQL Server 2012 功能包的一部分提供(不在主要产品中)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-12-05
              相关资源
              最近更新 更多