我有一个定义如下的榛树地图,其中存储大约。100 万个条目。
IMap<Integer, Employee> employeeMap = hazelcastInstance.getMap("employeeMap");
employeeObj.isCool()
返回给定员工是否“酷”。
我需要一种机制来从employeeMap
. 我了解我可以执行以下操作之一。
选项 1:调用employeeMap.keySet(predicate);
将在集群中的每个成员中并行执行,并由调用者使用 fork/join 机制加入。
问题1:但是,我认为这会在将谓词应用于每个条目之前一次性将每个节点中的条目集加载到内存中。请确认。
选项 2:employeeMap.executeOnEntries(entryProcessor);
入口处理器的process()
方法如下。
@Override
public Object process(Entry<Integer, Employee> entry)
{
return entry.getValue().isBad() ? true : null;
}
问题 2:我知道EntryProcessor
在分区线程中运行。我想知道它是否会在process()
调用方法之前一次性加载(反序列化)本地节点中的所有本地条目(并临时存储)。
问题 3:我想知道可用的最佳选择(就时间和空间复杂性而言)及其背后的基本原理。