使用MySQL而不是文本文件或文件名用于PHP的图像顺序是更快还是更好?

时间:2011-11-03 23:58:47

标签: php mysql

我将图像存储在与PHP网站上的文章相关的文件夹中,并且希望设置顺序以根据作者输入显示图像。我首先命名文件前面有一个数字,但是考虑在文本文件中记录顺序,而不是重命名每个文件并保留原始文件名,或者可能将顺序存储在MySQL表中。

我的问题是关于最佳实践和速度 - 每次加载文章时,都必须找出图像的顺序来显示它们。我希望得到一些关于哪种方法最好和最快的输入。

例如,与使用MySQL查询和更新语句相比,使用PHP读取文件夹中的文件名列表或打开文本文件并读取内容是否慢得多?

4 个答案:

答案 0 :(得分:3)

我会说很多取决于你的基本硬件/文件系统/ mysql连接性能。单次访问磁盘,只是为了读取图像很可能是您最快的选择。但您需要提前手动命名文件。

Mysql需要TCP或* NIX套接字连接,这可能会减慢速度(很大程度上取决于您拥有的图片数量,以及数据库链接的“质量”)。如果你有很多文件,性能损失可能微不足道。只是从文件中读取可能会更快,而无需设置数据库连接;你仍然需要记下订购的ID /文件名对应关系。

我在你的情况下尝试的是看一下php stat命令,看看它是否可以帮助你排序图片。根据您拥有的图片数量(较低的数字可以效果更好),性能可能不会受到严重的性能影响,并且您无法保留单独的图片/创建日期元组列表。随着图片数量的增长,文件列表方法在我看来似乎是解决问题的合理方法。然而,随着图片数量的增加,对事物进行基准测试可以告诉你真相。因为,我认为,根据您的具体情况,您可能会有很多变化。

答案 1 :(得分:2)

如果您关注的是性能,为什么不将列表(可能已经格式化为HTML)保存到文件中。加载页面时,只需使用

读取文件

$code = file_get_contents("cache_file.html")

并输出给用户。最快的解决方案是将文件存储为.html并让apache直接提供,但这只适用于您的页面没有任何其他动态部分的情况。

要确保您的缓存文件是最新的,您可以使其无效并在一段时间后重新创建它(具体时间取决于图像更改中的频率)或检查目录是否在缓存文件创建日期之后更改。如果您可以触发图像目录中的更改(例如,如果更改是从您编写的一段代码中进行的,则可以始终确保在更改图像时刷新缓存)

希望这有帮助

答案 2 :(得分:2)

这闻起来像是过早优化。

  

我的问题是关于最佳实践和速度 - 每次加载文章时,都必须找出图像的顺序才能显示它们。

所以?像“选择文件名,图像中的标题,其中articleId = $ articleId order by'order'”的查询将在几分之一秒内执行。这没关系。做任何最容易做的事情,我可以建议成为SQL选项。

答案 3 :(得分:1)

imho,使用mysql会比较慢,但是要容易得多哦。如果mysql服务器托管在同一台服务器上(或者在同一台服务器上的专用空间内,比如云linux),那么它可能不会节省太多时间

修改

如果你想进行测试,你可以使用microtime函数准确计算追加和排序文件所需的时间,以及从mysql中获取所需的时间