【问题标题】:Store image files or URLs in MySQL database? Which is better? [duplicate]在 MySQL 数据库中存储图像文件或 URL?哪个更好? [复制]
【发布时间】:2012-01-01 05:03:34
【问题描述】:

可能重复:
Storing Images in DB - Yea or Nay?
Images in database vs file system

我一直在使用 RIA 技术(Flex + PHP + MySQL + Ajax)开发一个 Web 应用程序,现在我对图像文件进退两难。

我在我的 Flex 应用程序中使用了一些图像,所以我认为“如果我将它们存储到数据库中,然后从中检索,那就太棒了;因此,维护过程应该更容易”。但是,这是我的困境:

我应该存储图片的物理 URL,还是直接存储图片会更好?

例如,我的Cars 表应该如下所示:

ID(自动数字)| Source(文字)

还是这样?

ID(自动数字)| Image (longblob 或 blob)

我知道这里有很酷的人可以回答我这个问题,向我解释哪个更好以及为什么:)

【问题讨论】:

  • 网址,肯定更好。

标签: mysql database-design blob


【解决方案1】:

我个人建议将图像存储在数据库中。当然它既有优点也有缺点。

在数据库中存储 BLOB 数据的优点:

  • 更容易使 BLOB 数据与行中的其余项目保持同步。
  • BLOB 数据与数据库一起备份。拥有一个单一的存储系统可以简化管理。
  • 可以通过 MySQL 中的 XML 支持访问 BLOB 数据,这可以返回 XML 流中数据的 base 64 编码表示。
  • 可以对包含固定或可变长度字符(包括 Unicode)数据的列执行 MySQL 全文搜索 (FTS) 操作。您还可以对图像字段中包含的基于文本的格式化数据执行 FTS 操作,例如 Microsoft Word 或 Microsoft Excel 文档。

在数据库中存储 BLOB 数据的缺点:

仔细考虑哪些资源可能更好地存储在文件系统中而不是数据库中。很好的例子是通常通过 HTTP HREF 引用的图像。这是因为:

  • 与使用文件系统相比,从数据库中检索图像会产生大量开销。
  • 数据库 SAN 上的磁盘存储通常比 Web 服务器场中使用的磁盘上的存储更昂贵。

【讨论】:

  • 我根本不是数据库专家,但是结果缓存和数据库服务器 RAM 使用情况如何?由于blob会全部加载到ram中,它不会增加很多吗?
【解决方案2】:

作为一般规则,您不希望将数据库保持在较小的规模,这样它们的性能会更好(并且备份也更好)。因此,如果您只能在数据库中存储文件系统引用(路径 + 文件名)或 URL,那就更好了。

【讨论】:

  • 不同意。如果管理得当,大型数据库的性能与小型数据库一样好。数据库也是存储图像的理想平台;在使用大型系统时,直接从数据库访问这些可以解决很多问题,例如多个 Web 服务器,您必须开始使用共享存储(有它自己的问题)或复制文件(更多问题)。
  • @ChrisBint 例如,如果您有一个网络画廊,并将图像存储在数据库中,那么所有的工作和流量都必须通过数据库服务器。如果您存储路径/url,您可以与您正在谈论的多个 Web 服务器共享负载。但是每种情况都需要不同的方法,因此我说这是一般规则而不是一成不变的法律。
  • 您不能与多个服务器“共享负载”,因为您需要弄清楚如何共享文件。 NFS?没办法……如果你丢失了 NFS 共享,那又如何呢?至少使用数据库,您可以同步它们,并且可以在需要时求助于主从。
  • @luckytaxi 是的,你可以。有几个选项可以同步目录中的文件,rsync 是一个常见的例子。不要因为你不知道怎么做,就认为每个人都不会。
  • @hexa 哈哈,认真的吗? rsync 很好,我很虔诚地使用它,但是如果你想走那条路,还有更好的选择。你将如何推/拉数据?你什么时候做这个? rsync 只是一种方式,如果 A 是授权服务器,那么如果 B 不同于 A 会发生什么?我会研究 Unison 或类似 DRDB 的东西,你知道更可靠的东西,并且适用于集群环境中的东西。
【解决方案3】:

这可能是个人喜好问题。

作为一般规则,最好保持数据库较小。但是,当您使用企业应用程序时,他们会定期将图像直接添加到数据库中。如果将它们放在文件系统上,则数据库和文件系统可能会不同步。

较大的 CMS 会定期将这些文件放在数据库中。但是请注意,当一切都在增长时,这需要更大的数据库大小......

当您只保存 url 和 name 时,请确保它们将来不会更改。

使用存储在数据库中的文件,您可以更轻松地实现安全性,而不必担心文件名重复。

【讨论】:

    【解决方案4】:

    我曾经将路径存储到 URL 中,但后来添加一个额外的 Web 服务器证明并不理想。一方面,您必须共享存储图像的路径。我们使用的是 NFS,但一段时间后它变得很慢。我们尝试将文件从一台网络服务器同步到另一台网络服务器,但这个过程变得很麻烦。

    话虽如此,我会将它们存储在数据库中。我已经将我所有的图像/文件存储转移到了 MongoDB。我知道这不能满足您的需求,但我们已经尝试了所有方法(甚至是 S3)并且我们对其他解决方案不满意。如果必须,我肯定会将它们放入 MySQL 中。

    【讨论】:

      【解决方案5】:

      我会存储 url,它的数据更少,这意味着数据库更小,从中获取数据的速度更快;)

      【讨论】:

        【解决方案6】:

        就我个人而言,我一直存储 URL。

        没有理由不将图像直接存储在数据库中,但不将其存储在数据库中也有好处。

        当您不将图像存储在数据库中时,您将获得更大的灵活性。您可以轻松地移动它,只需更新文件中的 URL。因此,如果您想将图像从您的网络服务器移动到 Flickr 或 Amazon Web Services 等服务,只需更新指向新文件的链接即可。这也让您可以轻松访问内容交付网络,从而更快地将图像交付给最终用户。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-11-12
          • 2023-04-09
          • 2011-04-04
          • 2019-11-08
          • 1970-01-01
          • 2011-01-01
          • 2011-01-06
          • 2013-06-13
          相关资源
          最近更新 更多