[英]Get IMap entries on same node as Predicate keys [Hazelcast]
我正在使用Hazelcast 3.6 IMap来分布式存储大量数据(我已经在1B项目上进行了测试)。 我想通过键加入2个IMap实例,但是似乎没有任何内置功能可以做到这一点。 因此,如果密钥相等,我将使用@PatritionAware
将这些映射的条目存储在同一节点中,然后使用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); } ...
我猜您正在寻找的是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 )。
随时询问更多信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.