[英]Implementing java.util.Map for big data
我正在嘗試實現一個由數據庫支持的java.util.Map
,大多數接口(例如put和get)都易於實現,但是我很難確定實現的最佳方法:
@Override
public Set<K> keySet() {
// TODO Auto-generated method stub
return null;
}
@Override
public Collection<V> values() {
// TODO Auto-generated method stub
return null;
}
@Override
public Set<Map.Entry<K, V>> entrySet() {
// TODO Auto-generated method stub
return null;
}
我擔心的是鍵和值可能會計入數百萬條記錄。 因此,當訪問這些方法時,我認為其內存和cpu效率不足以獲取和存儲所有“鍵”或“值”。
有哪些選擇可以實現內存高效的實現方式?
為entrySet實現迭代器的策略是什么?
老實說,它看起來似乎是一種最好的方法,您還必須以一種有效的方法來檢索這些值,而不必嘗試將整個數據庫拉到內存中並返回一個實現的Set或Collection接口的實例。
我建議使用Oracle的BerkeleyDB Java版。 com.sleepycat.collections.StoredContainer.StoredMap類實現java.util.Map接口,並且還將數據備份到磁盤。 我用它來處理約8GB數據的地圖。
StoredMap: http ://docs.oracle.com/cd/E17277_02/html/java/com/sleepycat/collections/StoredMap.html
BerkeleyDB Java版: http : //www.oracle.com/technetwork/database/berkeleydb/overview/index-093405.html
如果總數據量很大(千兆字節),則可能值得將數據移出堆外,以避免長時間的GC暫停。 作為一個真實示例,請參閱這篇文章: 取消堆砌以提高延遲並減少AWS賬單 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.