私はHazelcast 3.6 IMapを使用して大量のデータを分散保存しています(1B項目でテストしました)。2 つの IMap インスタンスをキーで結合したいのですが、それを行うための組み込み機能がないようです。そのため、@PatritionAware
キーが等しい場合はこれらのマップのエントリを同じノードに格納しSet<K> localKeySet();
、クラスタの各メンバーで最初のマップを使用しています。その後、同じノード上の 2 番目のマップから値を取得して、ネットワークによる述語キーの転送を回避しようとします。しかしgetAll(Set<K> keys)
、同じノードではそうではないようです。誰かがすでに同じ問題を抱えていますか? Hazelcast の機能に基づいて解決できますか?
以下のコード例を参照してください
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); } ...