2017-02-17 42 views
0

我想从我命名的PARTITIONED缓存中获取所有项目。当前我正在使用Apache Ignite:如何从命名缓存中获取所有项目

List<Cache.Entry<String, Object>> found = 
     stmCache.query(new ScanQuery<String, Object>(
     new IgniteBiPredicate<String, Object>() { 
      @Override 
      public boolean apply(String key, Object person) { 
       return true; 
      } 
     })).getAll(); 

这表现不佳。它可以使用:

IgniteCompute compute = ignite.compute(); 

要做同样的,或任何其他建议?

回答

0

您可以广播一个任务,该任务将在多个线程中的每个节点上运行本地ScanQueries。

水木清华这样的:

ignite.compute(ignite.cluster().forDataNodes("myCache")).broadcast(
    -> { 
    UUID locNode = ignite0.cluster().localNodeId(); 

    int[] parts = ignite0.affinity("myCache").primaryPartitions(locNode); 

    Arrays.asList(parts).parallelStream().forEach(p -> { 
     new ScanQuery().setLocal(true).setPartition(p).setFilter(...).getAll(); 
    }) 
    } 
) 
1

尝试cache.iterator() API:

Iterator<Cache.Entry<String, Object>> iter = cache.iterator();

+0

这并不提供答案的问题。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/15247780) – Lundin

+0

@Lundin你在开玩笑吗?这是正确的答案。没有什么需要添加的,只需使用这个API。你熟悉Apache Ignite吗? –

+0

单行答案“你试过......吗?”以问号结尾是评论,而不是答案。因此,您的帖子最终会进入低质量的审核队列。上面的评论是从该评论中自动发布的。无论如何,你现在已经修复了答案,所以没关系。 – Lundin

相关问题