我有一个我正在处理的数据库,它每隔几个小时远程更新一次(不是在任何特定的时间范围内),我无法控制它的管理。我有Web客户端连接到它来查看其中包含的信息。这些客户端(使用PHP和Javascript编码)可能经常检查数据库(不耐烦的用户),即使数据库本身可能没有任何更改,并且检查将涉及相当长的查询,涉及大量查找和交叉引用等
因此,为了减少数据库查询并使事情变得简单,限制客户端在数据库上实际运行整个查询的最佳方式是什么?
为了使事情变得清晰,我无法改变数据库,我只能查询它。但是我可以完全控制Web客户端的来源。
答案 0 :(得分:4)
您应该使用某种缓存。对于更严重的网站,请查看memcached。 如果您的规模较小,请通过序列化将结果缓存到文件中。
答案 1 :(得分:2)
我会看看Zend_Cache。
每个查询只会在缓存的生命周期内运行一次(可以轻松更改)。会话不是可行的解决方案,因为每个用户至少运行一次相同的查询。会话也可以轻松更新。
您需要检查缓存中是否存在结果集。如果没有,请使用唯一标识符缓存结果集:
$query = "SELECT * FROM really_big_table";
$cache_query = md5($query);
if(!$result = $cache->load($cache_query))
{
$result = $db->fetchAll($query);
$cache->save($result, $cache_query);
}
通过使用缓存,您可以为所有用户更新数据设置自己的时间范围。
答案 2 :(得分:-3)
您是否可以控制网络应用?如果用户已登录并具有与之关联的会话,则可以缓存自用户上次查询数据库以来的时间,并且如果请求低于自上次查询以来的某个阈值间隔,则拒绝回传新数据。