如何处理SQL查询结果缓存

时间:2010-06-22 23:26:14

标签: sql perl caching

在Perl程序中,我缓存SQL请求结果以加速程序。

我看到两种常见的方法:

  • 使用查询作为索引来创建哈希,以缓存结果,如建议的here
  • 使用2索引创建哈希,首先是used table的列表,第二个是where子句

我今天使用了第二个选项,因为当你知道它们已被更改时,更容易清理一组给定表的缓存。

我的问题是处理缓存清理,今天我做的大多数选择查询都是针对表,只有很少的更改。因此,当我运行更新/删除/ ...时,我只需清理缓存此表的缓存结果的哈希表部分。

这对性能几乎没有影响,因为我很少需要清理常用的哈希部分 但是现在对于在大多数表上更频繁地更新/删除的程序,这使我的缓存效率降低,因为我经常需要清理它。

如何处理?我当前的缓存系统非常简单,Cache :: Memcached :: Fast非常复杂。你有一个比我更高效但仍然很简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

我用来缓存不太可能改变的数据的一种方法(例如配置数据)是通过优秀的Memoize模块使用memoization。我将sql查询包装在一个函数中,我传入了bind参数和表名,并记住该函数。

use Memoize;

sub get_config_for_foo
{
     my ($table, $field1, $field2) @_;

     # generate my sql query here, using table, field1 and field2...

     return $result;

}
memoize(get_config_for_foo);

您还可以在memcache或类似的东西中使用缓存策略;查看Tie::Cache::LRU以获得良好的实施方案。