簡體   English   中英

為大數據實現java.util.Map

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM