如何获取整个GridGain集群的keySet()和size()?

时间:2014-07-05 12:28:54

标签: caching cluster-computing gridgain

GridCache.keySet().primarySize().size()仅返回该节点的信息。

如何获取这些信息,但是对于整个群集?

Scanning the entire cluster“有效”,但我需要的只是键或计数,而不是值。

问题是如果我想基于索引字段查找SQL查询,但我找不到基于网格缓存条目键本身。

我的解决方法有效但远非优雅和高效:

Set<String> ruleIds = FluentIterable.from(cache.queries().createSqlFieldsQuery("SELECT property FROM YagoRule").execute().get())
        .<String>transform((it) -> (String) it.iterator().next()).toSet();

这要求密钥与其中一个字段相同,并且出于性能原因需要对字段进行索引。

1 个答案:

答案 0 :(得分:1)

GridGain(6.2.0)的下一版本将使用globalSize()globalPrimarySize()方法向集群询问大小。

现在您可以使用以下代码:

// Only grab nodes on which cache "mycache" is started.
GridCompute compute = grid.forCache("mycache").compute();

Collection<Integer> res = compute.broadcast(
    // This code will execute on every caching node.
    new GridCallable<Integer>() {
         @Override public Integer call() {
             return grid.cache("mycache").size();
         }
    }
).get();

int sum = 0;

for (Integer i : res)
    sum += i;