首先,我运行的网站是托管的,我无法安装像memcached这样有趣的东西。缓存表结果获得更好的性能......怎么样?
我有几个网页显示HTML表格。这些HTML表格的数据是使用昂贵且复杂的MySQL查询生成的。我尽可能地优化了查询,并提供索引以提高性能。问题是如果我的网站有很高的流量,MySQL服务器就会受到攻击,并且挣扎。有趣的是 - MySQL表中的数据不会经常改变。事实上,它只是在每隔几周发生一次“事件”之后才会改变。
所以,我现在所做的是这样的:
- 保存一次生成一个文件
- 当网址进入查看保存的文件,如果它存在
- 如果该文件是HTML表大于1小时,运行查询并保存新文件,如果不输出文件
这确保了对绝大多数请求页面加载非常快,并且数据最多可以是1小时。为了我的目的,这不是太糟糕。
我真的很想保证,如果数据库中的任何数据发生变化,缓存文件将被删除。这个可能是可以通过查找所有在表上执行任何更改查询并添加代码来删除缓存文件的脚本来完成,但这种方法很脆弱,因为所有将来的更改都需要关注此机制。
有没有一种优雅的方式来做到这一点?
我没有什么,但香草PHP和MySQL(最新版本) - 我想玩memcached,但我不能。
我没有抽象层。但是你的文章让我意识到,对于数据库中的每个表,我创建了一个使用自动时间戳的更新列。所以至少我可以做一个简单的查询来检查数据的新鲜度并相应地删除缓存文件。这不是我正在寻找的银弹,但它很闪亮。 – Vamos 2009-10-22 12:15:49
其实,我有一个抽象层排序,至少有一个方法处理所有查询。我可以检查查询是否是UPDATE/INSERT/DELETE之一,如果是,查询运行后,我可以删除相关的缓存文件。不是很好,但它应该达到我想要的一定程度的稳健性。 – Vamos 2009-10-22 13:19:39