2016-07-15 1 views
1

データ量があまり多くない場合は、すべてのキーをリストとともに1つのビンに格納します。どのようにエアロスキーでキーを効果的に保つのですか?

しかし、ビンのサイズには制限があります。

機能scanAll JavaクライアントでScanCallbackを使用すると、実際には非常にゆっくりと動作するので、私たちのプロジェクトでは余裕がありません。 Aerospikeはあなたが彼に鍵を与えると速く働きます。

ここでは、レコードとキーがたくさんあるセットがあります。すべての鍵を保存する最善の方法は何ですか?あるいは、scanAllを使わずにすばやく取得する方法がありますか?

+0

ない私は完全に理解しておくが、この役立つだろう:http://www.aerospike.com/apidocs/java/com/aerospike/client/policy/Policy.html#sendKey – kporter

+0

@kporter、私はすでにそれを持っています。しかし、問題はそれらを素早く手に入れることです。 –

答えて

1

4K論理パーティションが存在し、スキャン中にスキャンスレッドがこれらのパーティションをそれぞれ減らさなければならないため、小さなセットのスキャンは現在非効率的です。小さなセットは必ずしもすべてのパーティションにレコードを持っているわけではないので、それらをスキャンするオーバーヘッドに払っています。これは将来のバージョンで変更される可能性がありますが、今の場合です。

速くセット内のすべてのレコードを取得するには、2つの方法があります。

  1. あなたが実際に鍵空間がどのようなものであるかを知っている場合は、あなたがそれらを取得するためにバッチが、読み込み反復処理することができます(もすることができました並行して行われる)。バッチ読み込みで存在しないキーにアクセスしようとしてもエラーは発生しません。特定のインデックスに値が戻ってこないだけです。
  2. また、セット名を持つビンを追加して、そのビン上にセカンダリインデックスを作成してから、すべてのレコードWHERE setname=XYZを照会することができます。これは、小さなセットに対して、スキャンよりもはるかに速く戻るでしょう。
関連する問題