2016-06-25 9 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 /値のコピーを返します。 –

関連する問題