0

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

4

1 回答 1

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)。

随时询问更多信息。

于 2016-04-01T20:41:19.740 回答