PHP - 在txt文件中缓存MYSQL查询是一种好习惯吗?

时间:2011-06-22 00:34:11

标签: php mysql caching outputcache

我正在建立一个网上商店&尝试通过最小化MYSQL查询来提高性能。

通过txt文件缓存mysql查询然后获取而不是查询是不错的做法?这就是我正在做的事情

  1. php类将sql查询作为字符串
  2. 做了一个md5
  3. 如果这是第一次运行
  4. 然后对数据库执行查询
  5. 以数组形式获取结果
  6. 序列化数组并将其存储为md5_Of_Query.txt
  7. 返回unserialize(file_get_contents(md5_of_Query.txt))或$ result实际查询,具体取决于缓存是否存在且有效。
  8. 该类还会检查txt文件的filemtime(),如果它大于1小时,则重新执行查询并刷新缓存。
  9. 这比每次执行sql查询更有效吗?我缺少任何安全问题?

8 个答案:

答案 0 :(得分:8)

如果你做了一个基准测试,那么创建一个独特的哈希并执行IO到磁盘的成本将大于从MySQL服务器中取出的成本。

恕我直言,不要打扰到这个程度。好的想法,但MySQL已经有内部缓存和性能调整。

专注于构建应用程序,因为“过早优化是万恶之源”。

答案 1 :(得分:5)

如果你刚刚启动应用程序,memcache比使用文本文件更快捷。

http://memcached.org/

文本文件可以完成这项工作,你所概述的步骤很有意义,但是memcache会更快,并为你处理繁重的工作。

答案 2 :(得分:2)

您的方法看起来有点像将问题从一个角落转移到另一个角落。

引入缓存并不能提高Mysql的性能。更好地查看哪些查询实际上很慢,然后优化查询。

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

答案 3 :(得分:2)

如果您希望实现缓存并着眼于未来的可伸缩性,我建议您设置运行数据库查询的RESTful服务,然后使用Web服务器的HTTP缓存功能来缓存结果。步骤如下:

  1. 原始页面需要运行查询
  2. 它会向服务URL生成一个http GET请求,并将参数作为URL中的查询参数传递
  3. 位于URL的php脚本接受查询的参数,验证它们并将它们添加到MySql查询
  4. 脚本在数据库上运行查询
  5. 脚本序列化结果并将其设置为输出
  6. Web服务器缓存请求的响应,并将其返回给具有相同URL的未来请求
  7. 原始页面使用服务的序列化结果生成HTML
  8. 您可以阅读有关使用Apache here缓存PHP的更多信息。您现在所做的就是接近这一点,但您的应用程序将能够通过基于服务的方法更好地扩展。

答案 4 :(得分:1)

我只想权衡我的两分钱,什么序列号和thephpdeveloper说共享内存/内存比你提出的任何磁盘IO绑定操作快得多的事实。 尽可能多地向mysql投入ram,除非你真的需要升级到集群,否则你不需要处理缓存管理,这需要其他考虑因素。 Memcache使您可以更好地控制缓存管理,因此您需要进行更多编码。

我首先构建应用程序然后对其进行压力测试并优化查询,和/或根据需要添加缓存管理。

答案 5 :(得分:1)

有两件事情,benchmarkingprofiling。关于你可以有意义地比较atything的唯一方法是使用这些diciplines的2个指标,使用你当前使用的mysql配置,php.ini,httpd.conf,.htaccess,mod重写的东西和许多其他的东西将是基准测试和分析代理技术完成任务。

答案 6 :(得分:1)

这是荒谬的,你应该缓存结果

查询汇编时间应该可以忽略不计。 (如果不是,你不使用SQL,因为它应该,而是生成愚蠢的select stream ,其中有一个聪明的{{ 1}}会解决的)

从磁盘加载查询显然容易减慢速度 (操作系统可能会缓存磁盘IO,但很难发现)

无论如何真正需要时间,从数据库中获取结果,然后通过模板将它们设置回网页。在您的位置,我会将给定查询的 样式结果 缓存到磁盘,当被询问时,如果缓存不是很老,我会直接join它们。

答案 7 :(得分:0)

您是否配置了MySQL的query cache