2017-02-17 103 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

相關問題