获取与谓词密钥相同的节点上的IMap条目[Hazelcast]

时间:2016-04-01 13:01:09

标签: java distributed-computing hazelcast hazelcast-imap

我正在使用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);
    }
...

1 个答案:

答案 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)中找到。

随时询问更多信息。