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