为什么几乎所有数据库都没有实现行缓存?

时间:2012-09-05 02:39:56

标签: java mysql database database-design innodb

我注意到几乎所有数据库都没有在内部实现行缓存。我问这个问题是因为我发现有人添加了row-cache patch for innodb。至少,它具有超越性能增益的一个优点,即它对客户端是透明的。

是否有任何困难的技术原因阻止这样做,或者仅仅因为它对非常具体的访问模式有用?

由于

1 个答案:

答案 0 :(得分:6)

坦率地说,如果你多次获得相同行的相同版本,那你就错了。作为一般规则,如果数据不太可能发生变化并且需要多次访问,则应缓存数据。根据这个规则,如果在服务器端缓存数据库行有帮助,这意味着你要为数据库进行太多的往返感兴趣。你应该缓存它客户端减少往返次数。如果数据经常更改,因此您需要经常访问它,缓存仍然将无济于事,因为缓存的数据已过期且必须重新执行查询。只获取与缓存数据不同的数据无济于事;你必须弄清楚有什么不同,你还在查询数据库。

最重要的是,大多数数据库都是为高并发性而设计的。缓存一个人的大量结果集将会占用下一个人的大量结果集等资源。在高用户计数的情况下,构建缓存可能只会导致缓存的数据被丢弃,以便为更多缓存数据腾出空间;它不能长时间坚持使用。