我正在尝试从我的命名PARTITIONED缓存中获取所有项目。 Currenly我正在使用
List<Cache.Entry<String, Object>> found =
stmCache.query(new ScanQuery<String, Object>(
new IgniteBiPredicate<String, Object>() {
@Override
public boolean apply(String key, Object person) {
return true;
}
})).getAll();
这不是很好。可以使用:
IgniteCompute compute = ignite.compute();
要做同样的事情还是其他任何建议?
答案 0 :(得分:4)
试试cache.iterator()
API:
Iterator<Cache.Entry<String, Object>> iter = cache.iterator();
答案 1 :(得分:0)
您可以广播在多个线程中的每个节点上运行本地ScanQueries的任务。
Smth喜欢:
ignite.compute(ignite.cluster().forDataNodes("myCache")).broadcast(
-> {
UUID locNode = ignite0.cluster().localNodeId();
int[] parts = ignite0.affinity("myCache").primaryPartitions(locNode);
Arrays.asList(parts).parallelStream().forEach(p -> {
new ScanQuery().setLocal(true).setPartition(p).setFilter(...).getAll();
})
}
)
答案 2 :(得分:0)
您可以使用 JDK 1.8 中的 StreamSupport 将 Iterable
转换为 Stream
:
Stream<javax.cache.Cache.Entry<YourKey, YourValue>> stream =
StreamSupport.stream(yourIgniteCache.spliterator(), false);
请注意,第二个参数确定生成的 Stream
应该是并行的还是顺序的。另外,请注意 Java 流不可重用,因此您可以将所有内容收集回映射,例如:
Map<YourKey, YourValue> reusableMap =
stream.collect(Collectors.toMap(Cache.Entry::getKey, Cache.Entry::getValue));