2016-06-25 6 views
0

Являются ли localkeyset для IMap отсортированы? Или, в любом случае, я могу проксировать структуру данных резервного копирования для сортировки?Hazelcast IMap localkeyset сортировка

Я храню временные ключи в IMap и время от времени ищу старейший локальный ключ. На данный момент я делаю новый TreeSet (imap.localKeyset()), однако задавался вопросом, могу ли я в любом случае упорядочить структуру данных локального резервного копирования.

Спасибо, Sutanu

ответ

0

Нет, localKeySet не сортируется и просто обычный набор. Если вы хотите сохранить заказ, я предпочел бы использовать Queue вместо TreeMap (если вы не хотите сортировать его на основе какого-либо другого параметра вместо TimeStamp добавления) и реализовать localEntryListener для управления этой очередью.
Другой вариант - использовать TreeSet.

public class HazelcastNode { 

    private static Queue localEntryQueue = new LinkedList<>(); 

    public HazelcastNode(){ 
     HazelcastInstance hz = Hazelcast.newHazelcastInstance(); 

     hz.getMap("hzMap").addLocalEntryListener(new MyLocalMapListner()); 
    } 

    public static void main(String[] args){ 

     HazelcastNode node = new HazelcastNode(); 

     //Get the Head of the queue which will be the oldest local entry 
     HazelcastNode.localEntryQueue.peek(); 
    } 

    private class MyLocalMapListner implements MapListener,EntryAddedListener, 
      EntryRemovedListener, 
      EntryUpdatedListener, 
      EntryEvictedListener, 
      EntryExpiredListener{ 

     @Override 
     public void entryAdded(EntryEvent entryEvent) { 
      HazelcastNode.localEntryQueue.add(entryEvent.getKey()); 
     } 

     @Override 
     public void entryEvicted(EntryEvent entryEvent) { 
      HazelcastNode.localEntryQueue.remove(entryEvent.getKey()); 
     } 

     @Override 
     public void entryExpired(EntryEvent entryEvent) { 
      HazelcastNode.localEntryQueue.remove(entryEvent.getKey()); 
     } 

     @Override 
     public void entryRemoved(EntryEvent entryEvent) { 
      HazelcastNode.localEntryQueue.remove(entryEvent.getKey()); 
     } 

     @Override 
     public void entryUpdated(EntryEvent entryEvent) { 
     } 
    } 
} 
+0

Спасибо за ваш ответ. Сначала у меня был аналогичный дизайн, но с использованием TreeSet (опечатки в вопросе, теперь исправлены), так как мне нужна сортировка. Тем не менее, я думаю о способах оптимизации, если бы я мог работать с уже существующей структурой данных. Локальные карты ConcurrentHashMaps, я полагаю, и я ожидал, что Hazelcast может предоставить какой-то механизм расширения, благодаря которому я мог бы «подключать» настраиваемую карту. –

+0

Я не думаю, что Hazelcast позволяет вам подключать пользовательскую реализацию map/keyset. Кроме того, Hazelcast возвращает только копию keySet/values, а не фактические ссылки. –