仅在包含相关KEY的节点上运行流操作

问题描述

假设我在一个大型群集上有一个大型IStreamMap,而我只想对几个键进行操作。我可以对过滤器表达式进行如下所示的修改,但是我的理解是,它将在所有节点上运行。即使最终没有任何结果,99%的节点也将被迫流式传输地图。有没有办法让Hazelcast Jet集群仅在与那些键相对应的节点上运行该操作?下面应该工作的代码,但是我认为它没有效率。 (就我而言,我可能会在大型分布式地图上多次运行此操作,因此,如果我能提前告知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>));

解决方法

我认为,三年前,

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()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...