我们运行许多用PHP编写的web应用程序。不幸的是,这些查询中的一些select查询带有一些相当大的连接,这导致MySQL的响应变得不那么灵敏。
正因为如此,我们正在研究如何缓存一些常用的连接。我已经研究了Zend_Cache,它看起来很有前途,有没有其他可能表现更好的替代方案?
另外,缓存的最佳后端是什么?我相信Zend_Cache提供了基于文件的、Sqlite和Memcached。
发布于 2009-10-13 10:05:00
当速度很重要时,你绝对应该使用memcached。但在大多数情况下,文件缓存或sqlite缓存可以满足您的需求。
Zend_Cache是一个非常好的缓存库,它通过它的适配器系统支持大量缓存机制,这使得以后更改缓存解决方案变得轻而易举,所以我肯定会选择Zend_Cache。
发布于 2009-10-13 10:47:09
这实际上取决于到底是什么原因导致这些查询速度变慢,以及这些查询是再次是相同的,还是每次都是不同的。
一般来说,我最初会专注于为什么查询很慢并改进它们。数据库内部使用的缓存是高效的,因为不同的查询可以使用相同的缓存项(假设它们使用相同的数据)。
不要担心MySQL查询缓存,最好使用数据库服务器的ram来增加innodb缓冲池(假设您使用的是innodb)。查询缓存的主要困难在于,当表中的一行被修改时,该表的每个条目都会被抛出-即使该特定查询的结果没有更改。
如果使用不当,查询缓存可能会严重损害性能-但innodb缓冲池通常只是有益的。
如果你的数据不是太大,一个便宜和低风险的解决方案是为你的数据库服务器购买大量的内存,并增加innodb缓冲池,使其超过你的数据大小。
客户端缓存将更具可伸缩性(例如,如果每个web服务器一个),但效率较低,并向应用程序公开过时的数据(当其数据变得陈旧时,它们可能不会自动过期)。
就像任何性能的事情一样,测试,测试。使用生产级硬件、类似生产级的数据和工作负载。
发布于 2009-10-13 11:26:54
PEAR的Cache_Lite包( http://pear.php.net/package/Cache_Lite/docs )是另一个缓存解决方案,您可能也希望对其进行评估。不过,它只使用基于文件的缓存。
当然,你应该分析那些被证明很慢的查询,看看你是否可以做一些可以让它们更快的事情。
https://stackoverflow.com/questions/1559217
复制相似问题