2017-02-17 44 views
0

Я пытаюсь получить все элементы из моего названного PARTITIONED кэша. Currenly Я используюApache Ignite: Как получить все элементы из named cached

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 на каждом узле в нескольких потоках.

Smth как:

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