是否計劃了有關最大規模逐出的其他替換策略?我需要一個MRU算法,以便系統從緩存中受益。系統將數據以塊的形式存儲在磁盤上或緩存頁面的內存中,而頁面/記錄未被聚集(可能不會在更新後以預先存儲的形式存儲)。在我的情況下,記錄是樹狀結構中的節點。番石榴緩存/可配置逐出/緩存替換策略
系統按升序分配記錄標識(即首先它們處於預訂狀態),並將記錄存儲在帶有遞增ID(0,1,2 ...)的頁面中。然而,在更新之後,如果例如記錄/節點需要以預先遍歷的方式進行遍歷,那麼可能是頁面被記錄1,2,3,4,5,6,7,8,9,10 ...讀取,但是已經在節點6和7之間插入節點(例如具有大子樹的節點11)。在這種情況下,緩存僅在保留第一頁(其中存儲記錄1,2 ...,如果緩存大小爲1且以節點11爲根的子樹屬於另一頁時爲10)時有用,則第一頁必須是取而代之,其他樹遍歷方法的情況也是如此,MRU比LRU更有用,但也許存在其他更適合的聰明算法,可能是自調整的一個方面。對於我的用例(一個版本化的數據存儲系統)的長篇描述,但我希望它是一個有效的用例。因此,如果基於大小的驅逐是可配置的,在某些情況下,LRU完全有意義但可能不適用於樹遍歷)
編輯:我可能甚至不需要併發性支持,只要我一次只允許一次寫入事務(因爲Guava將條目分割成不同的段,因此它不使用全局LRU算法)。
我目前還不確定它是否是個好主意。也可能是按順序讀取第1,2,3和4頁(而高速緩存/緩衝區的最大大小爲3)。然後提取頁面4會清除頁面3,但可能需要再次讀取,因爲子樹已經插入到頁面3上的節點之間(並且子樹位於頁面4)。因此,前序遍歷必須讀取1,2,3和4,然後再讀取3,因此LRU會更好;-)我猜這是一種兩難的困境。對這樣的節點進行聚類將是最好的,但是對於恰好一種訪問模式(前,後,級,順序等)來說也是如此。 – Johannes 2013-05-03 13:17:45
這聽起來像你想要像LIRS掃描居民政策。 – 2013-05-03 16:32:43
謝謝,那麼我會堅持使用Guava Caches,因爲我正在廣泛使用這個庫。希望LIRS將在未來實施:-)或者......我認爲(當然,現在知道;-))Charles Fry已經實施了LirsMap。 – Johannes 2013-05-03 17:16:45