PHP filemtime vs MySQL最近更新的时间戳,用于CMS中的图像缓存

dro*_*ooh 2 php mysql filemtime updatedate

我正在尝试确定将图像的最后修改日期存储在MySQL数据库中还是使用PHP函数filemtime更好

就我而言,所有网站信息都存储在数据库(cms)中,因此总会有一个查询来提取图像路径,等等。问题是出于缓存的目的,我需要让HTML输出如下所示<img src="/img/photo.jpg?v20190613" />。根据我在php.net网站上阅读的内容,此功能已被缓存。那么,它会使用较少的资源向存储上次更新时间戳的数据库表中添加字段还是每次使用此功能吗?两种方式都有优势吗?我正在寻找可以提供最佳性能的产品。

Bil*_*win 8

由于一个特定的原因,我不会使用filemtime():它仅用于检查运行PHP代码的同一主机上的本地文件。

在现代应用程序部署中,通常会将PHP代码部署到与提供静态资源的主机不同的主机上。实际上,通常将PHP代码部署到负载均衡器后面的多个应用服务器,因此您可以进行滚动部署而不会造成任何停机。

您今天可能没有这种体系结构。您可以将PHP代码部署到静态文件所在的同一主机上,也可以将数据库部署到同一主机上。但是,由于您的应用程序超出了单个主机,或者需要在部署期间进行不间断的操作,因此最终需要扩展到多个主机。最好尽早进行计划,并且不要实施避免妨碍您横向扩展的代码。

没有PHP应用程序服务器可以直接访问保存静态文件的文件系统。如果他们这样做,则必须执行以下一项操作:

  • 使用更多存储空间在每个PHP应用服务器上存储静态文件的重复副本。然后担心保持它们同步,拥有一些后端脚本来连续检查所有主机是否具有相同的文件集,等等。
  • 通过NFS或类似协议,将静态文件的文件系统设置为远程安装到所有PHP应用程序主机。然后filemtime()检查会变得有些慢,因为它们要通过NFS。您还必须担心NFS挂载会消失,安全性强制措施,添加新的应用程序主机时配置NFS等等。

由于这些原因,我选择将时间戳记存储在数据库中,因为无论如何您已经在其中存储了文件元数据(路径名)。