gpt4 book ai didi

hazelcast - 在具有百万条目的 imap 上使用执行程序的 hazelcast 性能

转载 作者:行者123 更新时间:2023-12-02 02:44:56 26 4
gpt4 key购买 nike

我们在仅包含 100,000 个对象的 imap 上应用少量谓词来过滤数据。这些谓词将因用户而异。在我的本地计算机 (16 GB) 上使用两个节点(每个节点显示 50000 个)和 100,000 条记录执行 POC 时,我在 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));

最佳答案

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

代码示例中的部分工作涉及对 100,000 个条目应用谓词。如果没有索引,如果有 2 个节点,扫描阶段会检查每个节点 50,000 个条目。加倍到 4 个节点,每个节点有 25,000 个条目要扫描,因此扫描时间将减半。

扫描时间是查询时间的一部分,整个结果集也必须由每个节点的部分结果组成。因此,在最佳情况下,将节点数量加倍可能会将运行时间缩短近一半,或者这可能不会带来重大改进。

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

代码示例中的

objectMap.values(predicate) 将结果集检索到一个中心点,然后应用 parallelStream() 尝试将结果合并到并行到 MultiMap 中。所以这看起来更像是一个 ETL,而不是一个查询。

根据标题使用执行器,以及类似 objectMap.localKeySet(predicate) 的东西可能允许更好地并行化,因为没有中心点保存中间结果。

关于hazelcast - 在具有百万条目的 imap 上使用执行程序的 hazelcast 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55909101/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com