2016-06-25 3 views
0

IMap의 로컬 키 세트가 정렬 되었습니까? 또는 어쨌든 내가 뒷받침 데이터 구조를 프록시 처리 할 수 ​​있습니까?Hazelcast IMap localkeyset 정렬

저는 임시 키를 IMap에 저장하고 있으며, 때때로 가장 오래된 로컬 키를 찾고 있습니다. 현재, 새로운 TreeSet (imap.localKeyset())을하고 있지만 로컬 백업 데이터 구조를 자체 정렬 할 수 있는지 궁금합니다.

감사합니다, Sutanu

답변

0

없음은 localKeySet 정렬 단지 일반 설정되어 있지 않습니다. 순서를 유지하려면 TreeMap 대신 Queue를 사용하는 것을 선호합니다 (추가 할 TimeStamp 대신 다른 매개 변수를 기반으로 정렬하지 않는 한). 그리고이 Queue를 제어하기 위해 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에서 사용자 정의 맵/키 세트 구현을 플러그인 할 수 있다고 생각하지 않습니다. 또한 Hazelcast는 실제 참조가 아닌 keySet/값의 사본을 반환합니다. –