如何解决仅在包含相关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()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。