2016-04-01 12 views
0

私はHazelcast 3.6を使用しています。大量のデータを分散ストアにIMapします(私は1B項目でテストしました)。 2つのIMapインスタンスをキーで結合したいのですが、組み込みの機能がないようです。したがって、キーが等しい場合には@PatritionAwareを使用して、同じノードにこれらのマップのエントリを格納してから、最初のマップのSet<K> localKeySet();を使用しています。その後、同じノード上の2番目のマップから値を取得して、ネットワークによる述語キーの転送を回避しようとします。しかし、getAll(Set<K> keys)は、同じノードでそれをしないようです。既に誰かに同じ問題がありますか? Hazelcast機能に基づいて解決することは可能ですか?述語キーと同じノードのIMapエントリを取得する[Hazelcast]

は、私が何を探していることはEntryProcessorだと思い

 

public class PartitionAwareKey implements PartitionAware, Serializable { 

    private Integer key; 

    public PartitionAwareKey(Integer key) { 
     this.key = key; 
    } 

    @Override 
    public Integer getPartitionKey() { 
     return this.key; 
    } 
} 
 



public class FindDataWithPredicateTask implements HazelcastInstanceAware, Serializable, Callable>> { 
... 
    @Override 
    public IMap call() throws Exception { 
     IMap map1 = hazelcastInstance.getMap("map1"); 
     Set localKeySet = map1.localKeySet(); 

     IMap, String> map2 = hazelcastInstance.getMap("map2"); 

     return map2.getAll(localKeySet); 
    } 
... 
 

答えて

0

次のコード例を参照してください。このEPはまた、他のデータ構造へのアクセスを得るためにHazelcastInstanceAwareを実装しなければなりません。一緒に属しているデータが同じパーティション内に格納されてアクセス可能であることを確認するために既に行っているように、データアフィニティを適用することは重要です。

EntryProcessorの詳細については、ドキュメント(http://docs.hazelcast.org/docs/3.6/manual/html-single/#entry-processing-with-imap-methods)を参照してください。例は、例リポジトリ(https://github.com/hazelcast/hazelcast-code-samples/tree/master/distributed-map/entry-processor)にあります。

お気軽に詳しい情報をお尋ねください。

+0

ありがとうございます! 'HazelcastInstanceAware'で' EntryPeocessor'を実装し、 'hazelcastInstance.getMap(" map1 ")を呼び出して各ノードにプロセスを送信した後、' PartitionWideEntryWithPredicateOperation:複数のパーティションで呼び出しを行うことはできません! 'マップキーは 'PartitionAware'を実装していますので、(同じノードまたは同じパーティションからの)ローカルキーを持つエントリだけを取得することは可能ですか? – yevtsy

+0

IMap :: localKeySetはあなたが探しているものですか? – noctarius

+0

私が前に述べたように、私は前のステップで得ているマップ上で 'IMap:lokalKeySet'を呼び出したいと思っています。質問のコード例を見てください。しかし、 'EntryProcessor'メソッドを使用する場合、前のコメント – yevtsy

関連する問題