Hazelcast IMap:keySet() 与 localKeySet()

Hazelcast IMap : keySet() versus localKeySet()

我在具有 5 个以上节点的集群中使用 Hazelcast 3.4。我有一张地图,其中键是复杂对象(不是原始类型)。在任何时候,地图的大小可能在200K左右。

我了解到一个map中的entries/values会被存放在不同的分区中。但是,我想知道以下内容。

  1. Hazelcast 集群中的每个成员是维护有关给定映射中所有键的集合的信息,还是仅维护其拥有的分区中这些键的子集的信息?

2 & 3 是跟进问题。

  1. keySet()是分布式操作吗? (即它肯定会涉及集群环境中的远程机器通信)

  2. localKeySet()是分布式操作吗?

关于该问题的更多背景信息:

我需要通过调用第三方程序公开的服务 cachedKeys(K[] keys) 定期通知第三方程序我的程序中 hazelcast 映射中存在的键。

选项 1: 从集群中的任何 一个 节点调用 keySet() 以检索映射中的所有键和然后从该节点调用 cachedKeys(K[] keys) 服务。

选项 2: 从集群中的 每个 节点调用 localKeySet() 来识别每个节点拥有的本地密钥,随后是来自每个节点的 cachedKeys(K[] keys) 调用。

以上答案将帮助我做出正确的选择。

成员不维护全局密钥集。每个成员只知道本地条目。因此 keySet() 是一个针对所有成员的分布式操作,而 localKeySet() 只是一个本地操作。希望这些信息对您有所帮助。

问题在 google 组中得到回答:致谢:Jaromir Hamala