2011-10-04 97 views
4

請隨時糾正我。CopyOnwriteArrayList替代頻繁更新

構建市場數據緩存的場景需要時間順序(即按時間順序添加)。緩存將有很多更新。

邏輯規定,列表是一個合乎邏輯的選擇,因爲索引是免費且易於執行的,比如getOldestElem list.get(0);二進制搜索等。

這個緩存將被多個線程使用,顯然讀取和更新指向CopyOnWriteArrayList的緩存。 (Javadoc表示這不適合大尺寸和頻繁更新)

我在尋找替代方案或更好的主意嗎?

+0

「時序......將會有很多更新」:更新是否會包含對現有元素的更改,或僅添加新元素? – Raedwald

+0

在隊列的後面添加並刪除舊元素的頭部。現有元素將不會更新。 – Slash

回答

3

如果存在記錄很少(或從不)更新,所以「頻繁更新」是頻繁添加的,您可以使用時間順序來分隔新舊元素來優化數據結構。例如,您可以將緩存細分爲若干個CopyOnWriteArrayList對象,每個對象只保存固定數量的元素,每個段保存數據的時間子範圍。頻繁添加會增加最後一個分段,直到達到最大大小,此時您將爲後續更新添加一個新分段。通過保持最大分段大小足夠小,您可以避免CopyOnWriteArrayList的性能問題。您應該在您自己的List類中隱藏實施細節。


編輯: 去除舊元素的類似改變僅一個段:最舊的片段。