我正在使用Hazelcast 3.6 IMap来分发存储大量数据(我在1B项目上测试过)。我想通过键加入2个IMap实例,但似乎没有任何内置功能。因此,如果键相等,我使用@PatritionAware
将这些映射的条目存储在同一节点中,然后在claster的每个成员上使用第一个映射的Set<K> localKeySet();
。之后,我尝试从同一节点上的第二个映射中获取值,以避免网络传输谓词密钥。但似乎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); } ...
答案 0 :(得分:0)
我猜你要找的是EntryProcessor
。此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)中找到。
随时询问更多信息。