hazelcast在imap上使用执行器执行百万条目的性能

hazelcast在imap上使用执行器执行百万条目的性能,hazelcast,hazelcast-imap,Hazelcast,Hazelcast Imap,我们在仅包含100000个对象的imap上应用了几个谓词来过滤数据。这些谓词将根据用户的不同而变化。在我的本地机器(16GB)上进行POC时,有两个节点(每个节点显示50000个)和100000条记录,我在30秒内得到了输出,这比直接查询数据库要多得多 增加节点的数量会减少时间吗?我甚至尝试了PagingPredicate,但每个页面大约需要20秒 IMap objectMap = hazelcastInstance.getMap("myMap"); MultiMap resultMap = h

我们在仅包含100000个对象的imap上应用了几个谓词来过滤数据。这些谓词将根据用户的不同而变化。在我的本地机器(16GB)上进行POC时,有两个节点(每个节点显示50000个)和100000条记录,我在30秒内得到了输出,这比直接查询数据库要多得多

增加节点的数量会减少时间吗?我甚至尝试了PagingPredicate,但每个页面大约需要20秒

IMap objectMap = hazelcastInstance.getMap("myMap");
MultiMap resultMap = hazelcastInstance.getMap("myResultMap");

/*Option 1 : passing hazelcast predicate for imap.values*/

objectMap.values(predicate).parallelStream().forEach(entry -> resultMap(userId, entry));

/*Option 2: applying java predicate to entrySet OR localkeyset*/
objectMap.entrySet.parallelstream().filter(predicate).forEach(entry -> resultMap(userId, entry));

更多的节点将有所帮助,但改进很难量化。它可以大,也可以小

代码示例中的部分工作涉及对100000个条目应用谓词。如果没有索引,扫描阶段将检查每个节点的50000个条目(如果有2个节点)。最多加倍4个节点,每个节点有25000个条目要扫描,因此扫描时间将减少一半

扫描时间是查询时间的一部分,还必须根据每个节点的部分结果形成整体结果集。因此,将节点数量增加一倍可能是最佳情况下运行时间的近一半,或者可能不是一个显著的改进

也许这里更大的问题是你想要实现什么

代码示例中的
objectMap.values(predicate)
将结果集检索到一个中心点,然后应用
parallelStream()
尝试将结果并行合并到多映射中。因此,这看起来更像是一个ETL而不是一个查询

按照标题使用执行器,以及类似于
objectMap.localKeySet(谓词)
的东西,可能会更好地将其并行化,因为不会有保存中间结果的中心点