如果我必須建立一個Web服務來提供對字典的訪問,我想最好不要在每個請求上觸發SQL查詢,而是將先前的結果保留在內存中並僅訪問數據庫直到現在還沒有要求輸入。高速緩存的模式
但是這樣一來,我的字典就會增加,並以內存中的完整SQL表結束。
我正在根據每個條目的使用頻率尋找一種字典的清理模式。但是「上次訪問時間」並不是一個好辦法,也不是命中數,因爲它會隨着時間的推移而增長,並且不能反映我的字典條目的平均當前使用情況。
有沒有辦法知道哪些條目要放棄以便儘可能多地訪問數據庫?
如果我必須建立一個Web服務來提供對字典的訪問,我想最好不要在每個請求上觸發SQL查詢,而是將先前的結果保留在內存中並僅訪問數據庫直到現在還沒有要求輸入。高速緩存的模式
但是這樣一來,我的字典就會增加,並以內存中的完整SQL表結束。
我正在根據每個條目的使用頻率尋找一種字典的清理模式。但是「上次訪問時間」並不是一個好辦法,也不是命中數,因爲它會隨着時間的推移而增長,並且不能反映我的字典條目的平均當前使用情況。
有沒有辦法知道哪些條目要放棄以便儘可能多地訪問數據庫?
最常見的是「LRU」,代表「最近最少使用」。這是您提到的「最後訪問時間」,在實踐中效果很好。
維基百科有不同的策略的例子很多,也許你可以找到一個適合您: http://en.wikipedia.org/wiki/Cache_algorithms#Examples
「我的字典裏將增加,並且在內存中完整的SQL表結束」 - 你怎麼定義內存中的完整SQL表。你可以定義一個固定的內存大小嗎? 如果是,那麼你可以創建一個固定大小的優先級隊列。 彈出的第一個元素應該是最不頻繁點擊的元素,可以通過使用Comparable/Comparator Interface來完成。 當隊列已滿並且您必須插入傳入元素時,只需觸發queue.pop(),然後插入傳入元素。這樣你可以繼續清理最不常用的。
您如何定義「平均當前使用量」? – Sameer