2017-11-13 11 views
-2

ヘイルキャストIMapから別のマップに5百万エントリをロードしたいのに時間がかかりすぎます。それは考えアプリケーションの起動中にハゼルキャストマップから別のマップに5百万エントリをロードする必要があります

IMap map = hc.getMap("some-map"); 
Map result = map.getAll(map.keySet()); 

しかし:それはあまり時間を取る必要がありますし、私のアプリケーションは、早けれpossible.Belowあなたはこのような何かを行うことができ、コードスニペット

//localMap is another map where i want to put all entries from Hazelcast 
    Map<Object, Object> localMap = new ConcurrentHashMap(); 
    //imap is hazelcast map reference 
    Iterator<Object> itr = imap.keySet().iterator(); 
    while (itr.hasNext()) { 
     Object obj = itr.next(); 
     localMap.put(obj, imap.get(obj)); 
    } 
    //returning entry set of local map 
    return localMap.entrySet().iterator(); 
+0

5つのスレッド、各コピーのみ100万エントリにそれを並列化? – Shark

+1

バックグラウンドスレッドでマップを初期化できないため、アプリケーションをより速く開始できますか? – StephaneM

+0

http://docs.hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html#executeOnEntries-com.hazelcast.map.EntryProcessor-が役立ちます。しかし一般に、これは設計上の問題のように見えます。以前にキーを処理した時と比べて、初期化ロジックが終了したときに、マップに同じ値が含まれていることをどのように確認できますか? – SpaceTrucker

答えて

0

あるとして出てくることができるようにどのように私はそれを最適化することができます高価な操作である。または、すべての値を取得するために述語を実行してください。doc:http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#distributed-query

これは設計上の問題のように見えますが、アプリケーションjvmに5百万のエントリをすべて格納する必要があります。また、同時に多くのエントリを移動する際のネットワークとser/desオーバーヘッドを忘れないでください。

ご利用の場合は、そのような場合には、私はあなたにも詳細についてはページング述語のドキュメントを参照してください、あなたの結果は小さなチャンクに設定されたページを見てください:http://docs.hazelcast.org/docs/3.9/manual/html-single/index.html#filtering-with-paging-predicates

関連する問題