将图像数据存储在MySQL数据库中?

时间:2010-12-06 14:43:22

标签: mysql image

我正在实施一个处理大量图片的项目。

在您看来,以下两种方法的缺点是什么:

  • 我需要存储数千个项目,每个项目都是多个字符串属性和图像。
  • 每个项目作为ID(整数)
  • MyISAM表
  • 您将如何存储图像:
    • 接近1 :将图像存储到目录中,每个图像名为ID.jpg
    • 方法2 :将图像作为二进制BLOB存储到数据库中

使用方法1我可以直接访问图像,就是这样

<img src="same_directory/10.jpg" />  

使用方法2,我仍然可以使用上面的HTML,但需要将jpg访问重定向到PHP脚本,该脚本将从数据库返回真实图像。

就性能而言,你觉得它更快吗?

我渴望接近1.

5 个答案:

答案 0 :(得分:5)

方法1的优点:

  • 从网络服务器中检索平面文件更快。
  • 大多数网站主机都可能采用这种方法。
  • 文件系统的平面文件存储速度更快。

方法2的优点:

  • 如果您迁移,您的所有数据都会保存在一个位置 网站/数据库图像就在那里
  • 更容易排序/删除/等...
  • 由于您必须通过PHP脚本提供服务,因此您可以执行此操作 额外的事情,如安全性,如果需要,或图像处理 (显然你也可以用平面文件做到这一点,但你必须做 确保通过将图像保留在公共场所来绕过安全性 目录)。

考虑性能方法1最好继续进行。

答案 1 :(得分:2)

存储文件系统的速度更快。

答案 2 :(得分:1)

我很想使用第一种方法,因为用图像数据混淆数据库没有实际价值。 (从数据库中获取数据也会明显慢于将其从磁盘上加载。)

但是,作为建议,您可能不希望将磁盘上的完整路径存储到数据库表中的映像,以便将来支持可移植性。 (即:只需将路径和文件名的一部分存储在“已知”基本文件夹中。)

答案 3 :(得分:0)

将图像文件作为图像文件保存在服务器上以降低数据库负载并允许服务器处理缓存等。 总的来说,这取决于我们谈论的图像类型。小缩略图(例如文件图标)不会那么糟糕,但我不会将整个图像存储在数据库中。总的来说,我猜文件系统方法会更快。

答案 4 :(得分:0)

让我们在网络浏览器上调查问题。 当您加载保存在数据库中的10张图片的页面时。您浏览器向服务器发送新的http请求。每个请求init数据库连接和服务器端脚本。或者只是从文件系统中读取静态图像。

什么会更快?

其他部分 - 从文件系统或数据库获取数据。如果我们不为数据库使用缓存(但对于10 GB的映像,您应该有10 GB的RAM来缓存此数据)。无论如何,数据库和HTTP服务器都从文件系统中读取数据。但我认为HTTP浏览器比数据库服务器更快地读取数据。

数据库存储只有一件事 - 很容易将数据从一台服务器迁移到另一台服务器。但这对系统性能无关紧要。

不要忘记像/a/b/c/abc.jpg这样的图像的制作路径 - 对于大量图像来说会更快,然后将所有图像放在一个目录中。