对每个节点的缓存数据进行操作
Operate on Cached data per node
我可以使用 apache ignite 进行关联计算机数据配置。在以下两个示例中,它按预期工作。
// Works on all nodes
IgniteUtil.getIgnite().compute().broadcast(() -> {
System.out.println("Should happen on all nodes");
cache.get(key).forEach(x -> {
System.out.println(x);
});
});
// Works on just the one node
IgniteUtil.getIgnite().compute().affinityRun(IgniteUtil.CACHE_NAME, key , () -> {
System.out.println("Should only happen on one node");
cache.get(key).forEach(x -> System.out.println(x));
});
但是,我想 运行 一个针对所有节点数据的 lambda。因此,例如,假设我已经为每个人缓存了他们来自亚马逊的所有订单。我想知道每个人的订单总金额是多少。
我可能只是遗漏了一个示例,但根据文档,我不知道如何执行此操作。在我看到的例子中,我必须指定我想要用来计算的键。在此示例中,我只想能够在所有节点上执行一些 lambda,每个节点仅在其自己的数据份额上运行。
我试过这样做
IgniteUtil.getIgnite().compute().affinityRun(IgniteUtil.CACHE_NAME, key , () -> {
System.out.println("Should only happen once per node");
List<Integer> count = new ArrayList<Integer>();
System.out.println("Size: " + Sets.newHashSet(cache.iterator()).size());
cache.iterator().forEachRemaining(x -> {count.add(count.size());});
System.out.println("Calculated Size: " + count.size());
System.out.println("Values: " );
cache.get(key).forEach(x -> System.out.print(x));
System.out.println();
});
它只在有键的节点上执行,但是,缓存大小是完整缓存大小,而不仅仅是本地值。
有什么建议吗?
您可以像第一个示例一样广播一个闭包,并使用 IgniteCache.localEntries()
方法遍历本地数据。
我可以使用 apache ignite 进行关联计算机数据配置。在以下两个示例中,它按预期工作。
// Works on all nodes
IgniteUtil.getIgnite().compute().broadcast(() -> {
System.out.println("Should happen on all nodes");
cache.get(key).forEach(x -> {
System.out.println(x);
});
});
// Works on just the one node
IgniteUtil.getIgnite().compute().affinityRun(IgniteUtil.CACHE_NAME, key , () -> {
System.out.println("Should only happen on one node");
cache.get(key).forEach(x -> System.out.println(x));
});
但是,我想 运行 一个针对所有节点数据的 lambda。因此,例如,假设我已经为每个人缓存了他们来自亚马逊的所有订单。我想知道每个人的订单总金额是多少。
我可能只是遗漏了一个示例,但根据文档,我不知道如何执行此操作。在我看到的例子中,我必须指定我想要用来计算的键。在此示例中,我只想能够在所有节点上执行一些 lambda,每个节点仅在其自己的数据份额上运行。
我试过这样做
IgniteUtil.getIgnite().compute().affinityRun(IgniteUtil.CACHE_NAME, key , () -> {
System.out.println("Should only happen once per node");
List<Integer> count = new ArrayList<Integer>();
System.out.println("Size: " + Sets.newHashSet(cache.iterator()).size());
cache.iterator().forEachRemaining(x -> {count.add(count.size());});
System.out.println("Calculated Size: " + count.size());
System.out.println("Values: " );
cache.get(key).forEach(x -> System.out.print(x));
System.out.println();
});
它只在有键的节点上执行,但是,缓存大小是完整缓存大小,而不仅仅是本地值。
有什么建议吗?
您可以像第一个示例一样广播一个闭包,并使用 IgniteCache.localEntries()
方法遍历本地数据。