0

GridCache.keySet(), .primarySize(), 并且.size()只返回该节点的信息。

除了整个集群,我如何获取这些信息?

扫描整个集群“有效”,但我需要的只是键或计数,而不是值。

问题是如果我想根据索引字段查找 SQL 查询,但我无法根据网格缓存条目键本身查找。

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

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

这要求 key 与字段之一相同,并且出于性能原因需要对该字段进行索引。

4

1 回答 1

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;
于 2014-07-06T02:27:36.237 回答