是否计划了有关最大尺寸驱逐的其他替代策略?我需要一个 MRU 算法,这样系统才能从缓存中受益。系统将记录存储在磁盘上的块中或内存中的缓存页面中,而页面/记录不是集群的(更新后可能不会按预先顺序存储)。在我的例子中,记录是树结构中的节点。
系统按升序分配记录 ID(即首先它们是预排序的),并将记录存储在具有递增 ID(0、1、2...)的页面中。然而,在更新之后,如果需要按顺序遍历记录/节点,则可能会读取带有记录 1、2、3、4、5、6、7、8、9、10 的页面......但是在节点 6 和 7 之间插入了节点(例如,节点 11 具有大子树)。在这种情况下,缓存仅在保留第一页(如果缓存大小为 1 并且以节点 11 为根的子树属于另一页的情况下存储记录 1,2...,10)时才有用。那么第一页必须是提取两次。对于其他树遍历方法也是如此,MRU 比 LRU 更有用,但也许存在其他更适合的聪明算法。
很抱歉对我的用例(版本化数据存储系统)进行了冗长的描述,但我希望这是一个有效的用例。因此,如果基于大小的驱逐是可配置的,那就太好了,因为在某些情况下,LRU 也可能完全有意义(但可能不适用于树遍历)。
编辑:我可能什至不需要并发支持,只要我一次只允许一个写事务(因为 Guava 将条目分成不同的段,因此它不使用全局 LRU 算法)。