普通图像存储或mySQL blob?

时间:2010-02-07 21:59:12

标签: php mysql

我正在编写一个php / mysql网络应用程序,它有点像一个博客平台,人们可以上传图片并发布它们。

存储这些图像的最佳方法是什么,通过BLOB将它们存储在文件夹或mySQL表中?

我问这个是因为我想要一种最简单的方法,让我轻松移动到另一台主机/服务器而无需花费数天时间下载所有发布的图片,并将它们上传到新服务器。

可选问题:专用服务器是否足以支持已启动的博客平台?

由于

7 个答案:

答案 0 :(得分:5)

离开数据库。当它离开数据库时,您的网络服务器可以完成其工作并使客户端缓存图像。使用数据库驱动的动态图像这样做更复杂。此外,您可以通过允许网络服务器处理它来获得更好的性能。

答案 1 :(得分:3)

如果您提供静态文件托管,您可能需要考虑使用CD3(例如Amazon S3)来保留文件。实现更多的工作,但如果您更改Web主机(除非您更改cdn提供程序),您永远不必担心移动文件。 Plus文件访问将本地化到客户端,甚至不需要为大多数请求访问您的Web服务器,从而减少带宽使用。

答案 2 :(得分:1)

最好的方法是将图像存储在目录中,并仅将图像名称存储在数据库中。通过这种方式,数据库不会变得庞大并且更易于维护......

答案 3 :(得分:1)

如果是图像 - 数据库。性能可以与文件系统一样好,特别是如果您将文件与文件名一起检索并保留数据完整性,这比性能至少对于业务应用程序和常规网站更重要(即不是youtube,gmail,microsoft.com等等。)

这里有更多关于这个话题: http://sietch.net/ViewNewsItem.aspx?NewsItemID=124

你必须自己测试和研究的一件事是MySQL如何处理blob。如果它是SQL Server或Oracle,我肯定他们在使用blob,特别是特殊的文件流和bfile类型方面做得非常好。我对MySQL没有任何经验,也不知道它是否可以处理超过几兆字节的blob。

答案 4 :(得分:0)

在我的网络应用程序中,我将二进制文件存储在数据库之外。实现更复杂,但数据库是空间节省。

答案 5 :(得分:0)

将它们保存为文件:

  • 速度更快。

  • 您甚至无需访问数据库即可处理文件(复制到其他服务器)。

通过巧妙的应用程序设计,您甚至可以避免任何有关这些图像的数据库访问。缓存模板可以访问图片或使用聪明的文件格式。

答案 6 :(得分:0)

不要使用数据库 - 使用文件系统。我遇到了同样的问题,尝试了两种方法,并且说实话,使用db作为二进制数据存储有太多问题。

我所做的是拥有一个包含所有上传文件的文件夹,其中包含与上传文件相关的参考数据库和对象,而不是仅仅将它们“存储起来”,而是将其存储,然后使用相应的文件名进行存储上述文件的MD5(或SHA-1)校验和,非常好地消除了重复上传并减少了开销 - require();比从db转储数据更有效。