hazelcast - 仅在包含相关 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>));
解决方案
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()
.
推荐阅读
- c - 如何修复附件 K 中的安全函数发出的运行时错误?
- ruby-on-rails - 设计:如何将注册/新表单呈现到会话/新
- javascript - 三个 js - JSON 加载器在示例中有效,但在我的代码中无效?
- firebase - react-native-firebase 和 Firebase npm 包有什么区别
- java - 如何覆盖自定义自动配置?
- javascript - 为什么我在运行 METEOR 时在 modules.js 中收到 SytaxError?
- google-chrome-extension - chrome.tabs.getCurrent 返回未定义
- python-3.x - 改变先知情节的特点
- c# - 在 AutoCAD 中打开一个 dwg 文件并通过 C# 滚动到 dwg 地图的特定位置
- python - 什么是属性?它如何“保持”一个价值?