将图像作为BLOB或纯文件存储在某个地方是否更高效?

Eas*_*onk 3 php mysql performance lamp

我有一个带256MB RAM的LAMP服务器(云端的穷人服务器).我有一个应用程序编写在这台机器上运行.目前人们上传图像,他们直接进入mysql作为BLOB.

有人担心这可能是非常耗费内存的操作,我们将其转移到简单的普通文件.有人可以告诉我这些问题是否有效?(考虑到我们将在未来6个月内拥有足够的内存,我们是否值得努力改变已经写好的颂歌?)

作为一般规则,我们应该何时将图像存储在数据库中以及何时作为文件?

Qua*_*noi 15

要读取内存BLOB,MySQL您需要三倍的内存(它被复制到几个缓冲区).

所以,是的,在读BLOBMySQL比读一个文件会占用更多的内存.


web*_*ave 8

您应该将它们存储在文件系统中,原因如下:

  • 可以通过其他应用程序(shell,FTP,www等)轻松访问这些图像,
  • 从文件系统读取它们比从数据库读取资源更少(包括内存)
  • 如果数据库损坏,图像是安全的.
  • 您也不会遇到表格大小限制(由操作系统文件大小限制确定),这会减慢它们的速度(并使它们需要更多资源来阅读).

您应该考虑在数据库中存储图像的唯一时间是在事务处理中使用它们时,即使这样,存储在文件系统中时也会有很多变通方法.


And*_*ore 6

总结一下:

数据库存储:

优点:

  • 确保参照完整性
  • 更轻松的备份策略
  • 更容易的群集(数据库群集)

缺点:

  • 内存使用和存储成本较高
  • 难以扩展
  • 必须编写其他代码以支持HTTP缓存
  • 需要数据库和关联的查询代码

文件系统存储

优点:

  • 内存占用少(效率更高)
  • 存储空间等于文件大小
  • 易于检索和存储
  • 允许Web服务器控制缓存

缺点:

  • 参考完整性无法保证
  • 备份并不总是与数据库备份同步
  • 需要额外的备份策略

如果图像的参照完整性很重要,请将它们存储在数据库中.优点是备份数据库始终意味着您的行和图像是同步的.它确实意味着存储和检索是一种更昂贵的资源.

如果图像本身并不重要,请将它们存储为文件.它允许快速和简单的检索和存储.但是,使用文件的缺点是备份策略变得更加复杂,并且您的文件并不总是与数据库行同步.

我个人总是将它们存储在数据库中.对我来说,奖励比成本更高.但情况并非总是如此,您应该查看您的应用程序要求,看看哪种方法最适合您.

一些大型网站正在使用BLOB来存储他们的网站内容.Flickr对BLOB的使用实际上有很好的记录.但要回答您的问题,文件存储比数据库存储更有效.