私は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); } ...
ありがとうございます! 'HazelcastInstanceAware'で' EntryPeocessor'を実装し、 'hazelcastInstance.getMap(" map1 ")を呼び出して各ノードにプロセスを送信した後、' PartitionWideEntryWithPredicateOperation:複数のパーティションで呼び出しを行うことはできません! 'マップキーは 'PartitionAware'を実装していますので、(同じノードまたは同じパーティションからの)ローカルキーを持つエントリだけを取得することは可能ですか? – yevtsy
IMap :: localKeySetはあなたが探しているものですか? – noctarius
私が前に述べたように、私は前のステップで得ているマップ上で 'IMap:lokalKeySet'を呼び出したいと思っています。質問のコード例を見てください。しかし、 'EntryProcessor'メソッドを使用する場合、前のコメント – yevtsy