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();
这要求密钥与其中一个字段相同,并且出于性能原因需要对字段进行索引。
答案 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;