2016-07-18 9 views
0

HzのPredicateBuilderを使用して、ネストされたオブジェクトの属性に関するクエリでHzマップを照会しています。ネストされたフィールドのインデックスも設定ファイルに作成しました。ヘイルキャストインデックスが使用されているかどうかを検証

EntryObject e = new PredicateBuilder().getEntryObject(); 
Predicate idPredicate = e.get("id").equal(id); 
Predicate predicate = e.get("rel.id").equal(rel.id).and(idPredicate); 
return personMap.values(predicate); 

ここで、relは、id属性のオブジェクトで、Personオブジェクトの属性です。

indexes = [ 
      { 
       attribute = id 
       isOrdered = false 
      }, 
      { 
       attribute = rel.id 
       isOrdered = false 
      } 
      ] 

正しいレコードが返すが、このクエリは、インデックスを使用している場合を確認するにしています。このクエリがインデックスを使用していることを確認する方法はありますか? (情報メッセージなど)。これらのメッセージは、DB2の前とデバッグ・レベルで表示されます。どんな助けでも大歓迎です!前もって感謝します。

+0

十分なレコードで私を信じてください。インデックスを使用していない場合は、メモリに記憶されます。特に、リモートトラフィックのために1つ以上のメンバーを開始する場合。 –

+0

@AlexanderPetrov:ありがとう!実際には、以前は述語を使用していましたが、インデックスは使用されませんでした。したがって、それはindexawareクラスであるため、PredicateBuilderに移動していますので、目的が満たされているかどうかを確認したいだけです。これらの変更では、前例がはるかに良いですが。 –

+0

あなたはこれを読んでいますか?残念ながら、インデックスに関連する統計MBeanがあるように見えませんが、インデックスを有効にしてからインデックスを無効にして時間を簡単に測定できますhttp://docs.hazelcast.org/docs/3.5/manual/html/management .html –

答えて

1

Hazelcastドキュメント - 管理セクションに従ってください。 Indexesの統計オブジェクトはリストされていません。リストされた統計MBeanは、異なる分散オブジェクトです。

同時にインデックスがヒットしない場合、キーの順番の直列化が解除され、値もキューに入れられている場合は値が返されます。おそらく100,000以上のメモリで十分なレコードがあれば、パフォーマンスの差は目に見えない程度になります。

1

これは良い質問です。

インデックス定義とまったく同じネストされた属性パスをクエリで使用する場合は、インデックスが使用されることを100%確かめることができます(述語がIndexAwareの場合)。

経験的にテストするために、大きなサンプルデータセット(1Mエントリなど)に対して2つのクエリを実行できます。そのうちの1人がインデックスを使用し、他の1つがネストされた他の属性(ネストレベルが同じ)を使用させます。実行時間がとかなり異なることがわかります

関連する問題