Java 为什么不';几乎所有的数据库都实现行缓存吗?

Java 为什么不';几乎所有的数据库都实现行缓存吗?,java,mysql,database,database-design,innodb,Java,Mysql,Database,Database Design,Innodb,我注意到几乎所有数据库都没有在内部实现行缓存。我问这个问题是因为我发现有人在添加。至少,它有一个性能增益之外的优势,即对客户机透明 是否有任何困难的技术原因阻止这样做,或者仅仅因为它对非常特定的访问模式有用 非常坦率地说,如果您多次收到同一行的同一版本,您就错了。一般来说,如果数据不太可能更改并且需要多次访问,则应缓存数据。根据这条规则,如果在服务器端缓存一个DB行有帮助,那就意味着您对感兴趣的数据进行了太多的往返访问。您应该在客户端缓存它,以减少往返。如果数据经常更改,因此您需要经常访问它,缓

我注意到几乎所有数据库都没有在内部实现行缓存。我问这个问题是因为我发现有人在添加。至少,它有一个性能增益之外的优势,即对客户机透明

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


非常坦率地说,如果您多次收到同一行的同一版本,您就错了。一般来说,如果数据不太可能更改并且需要多次访问,则应缓存数据。根据这条规则,如果在服务器端缓存一个DB行有帮助,那就意味着您对感兴趣的数据进行了太多的往返访问。您应该在客户端缓存它,以减少往返。如果数据经常更改,因此您需要经常访问它,缓存仍然没有帮助,因为缓存的数据已过期,必须重新执行查询。仅获取与缓存数据不同的数据没有帮助;你必须弄清楚有什么不同,你仍然在对数据库进行查询


除此之外,大多数数据库都是为高并发性能而设计的。缓存一个人的大量结果集将消耗下一个人的大量结果集可用的资源,以此类推。在高用户数场景中,构建缓存可能只会导致缓存数据被丢弃,从而为更多缓存数据腾出空间;它不能停留足够长的时间来使用。

您似乎在谈论应用程序缓存,而我在谈论与memcache类似的行缓存,它们之间的区别是行缓存应该由事务保护。我不是在谈论应用程序缓存。行缓存是指RDBMS在内存中加载并存储行数据,以便更快地访问。问题正如我所说,;如果您经常请求相同的数据,以至于缓存可以提高性能,那么只需降低查询频率,就可以将性能提高许多数量级。当客户端缓存不起作用时,行缓存有帮助的单一场景是多个独立客户端对相同数据运行相同查询;这就避免了DBMS每次都必须从磁盘上重新检索它。这并不是一种边缘需求,但它是高度专业化的。