首页 > 解决方案 > 仅在包含相关 KEY 的节点上运行流式操作

问题描述

假设我在一个大型集群上有一个大型 IStreamMap,我只想对几个键进行操作。我可以正确地使用如下所示的过滤器表达式,但我的理解是这将在所有节点上运行。99% 的节点将被迫流式传输地图,即使最终没有任何结果。有没有办法让 Hazelcast 喷气机集群只在与这些键对应的节点上运行操作?应该工作的代码如下,但我认为它不是有效的。(在我的情况下,我可能会在大型分布式地图上多次运行此操作,因此如果我可以提前告知 99% 的节点与所选节点无关,我不希望每个节点都尝试执行此操作键。)

final IStreamMap<String, Integer> streamMap = instance1.getMap("source");
    // stream of entries, you can grab keys from it
             streamMap.stream()
                    .filter(key -> key == 1 || key = 9999999)
                    .forEach(key -> <do something interesting>));

标签: hazelcasthazelcast-jet

解决方案


IStreamMap我想是三年前从 Hazelcast Jet 中删除的。您应该通过其Pipeline API使用 Jet 。

您可以尝试使用map带有谓词的源:

Pipeline p = Pipeline.create();
BatchStage<Entry<K, V>> stage = p.readFrom(Sources.map("name", 
        (Map.Entry<K, V> mapEntry) -> myCondition(mapEntry), 
        e -> e));

不过,这仍会扫描整个地图。如果您只是有一组您感兴趣的键,那么可能更适合您的用例的是IMap.executeOnKeys().


推荐阅读