2010-12-06 261 views
10

我正在实施一个处理大量图像的项目。将图像数据存储在MySQL数据库中?

在您看来什么是以下两种方法的利弊/利弊:

  • 我需要上千项,每个项目存储为几个字符串属性和图像。
  • 每个项目作为ID(整数)
  • MyISAM表
  • 你将如何存储图像:
    • 方法1:将图像存储到一个目录下,命名为ID.jpg
    • 每个图像
    • 方法2:存储图像到数据库作为二进制BLOB

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

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

使用方法2,我仍然可以使用上面的HTML,但需要重定向到一个PHP脚本将返回真正的是JPG访问来自数据库的图像。

就性能而言,您认为它更快吗?

我渴望接近1

+2

一般来说,在数据库中存储大型BLOB确实会影响性能。如果所有的图像都是非常小的文件,它并不是那么糟糕。 – Orbling 2010-12-06 14:45:33

+0

如果所有图像不是jpg,请在保存到数据库之前进行压缩。 – 2010-12-06 14:45:52

+0

[将图片存储为文件或者存储在数据库中的Web应用程序?](http://stackoverflow.com/questions/561447/store-pictures-as-files-or-in-the-database-for- a-web-app) – shamittomar 2010-12-06 14:48:58

回答

1

我会尝试使用第一种方法,因为在塞满了图像数据的数据库没有实际价值。 (从数据库获取数据也会比简单地将其从磁盘加载数据库慢得多)。

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

0

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

0

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

什么会更快?

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

数据库存储只有一个缺点 - 非常容易将数据从一台服务器迁移到其他服务器。但这不是系统性能的问题。

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

5

优点的方法1:

  • 检索平面文件的网络服务器形式是更快。
  • 大多数网络主持人可能会遵循这种方法。
  • 平面文件存储的文件系统速度更快。

优势的方法2:

  • 您的所有数据都保存在一个地方,如果您迁移 网站/数据库中的图像也只是有
  • 它更容易整理/删除/ etc ...
  • 因为你必须通过PHP脚本来提供它,所以你可以执行另外的东西,如安全(如果需要的话)或者图像处理 (显然你可以做也与平面文件,但你必须使 确保安全不能被绕过将图像保留在公开的 目录中)。

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