对每个节点的缓存数据进行操作

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() 方法遍历本地数据。