2017-07-01 1 views
0

私はCassandraカラムファミリーの設計に取り組んでいます。Cassandraはどのように選択クエリを処理しますか?

より高い密度のデータを読み込んだ後で、SELECTを実行している間にGCが高いという状況に遭遇しました。つまり、パーティション内のデータ量が増加しました。また、低密度データの場合、正常に動作します。

CassandraがどのようにSELECTクエリを実行するのかを知りたい(パーティションキーとクラスタキーの両方が指定されている)

SELECTを実行している間に、パーティション内のデータセット全体がメモリにロードされていますか?

多くのパーティションキーがパフォーマンスに影響しますか?

+0

クエリサンプルを追加して、高密度と低運命の意味を詳しく説明してください。クラスタ化キーを使用しているかどうかを問い合せていますか、関連するクラスタリング列の各パーティションの高さまたは低さですか? – dilsingi

+0

テーブルの構造は次のとおりです。 - PRIMARY KEY(A、B、C)。テーブルにもフィールド(p、q、r、s、t)はほとんどありません。サンプルクエリ - SELECT p、q、r、s、t FROMテーブルA =? AND B =? – kjk

+0

より多くのBおよびCエントリがINSERTされるとデータ密度が増加します。 – kjk

答えて

0

Cassandraはパーティション全体をメモリにロードしませんが、Cassandraがパーティション内の関連するCQL行を見つけるのを助けるIndexInfoオブジェクトをロードします。これらは短命のJavaオブジェクトであり、ヒープ・プレッシャー(GC一時停止)をかなり発生させる可能性があります。これは、BASSのインデックス・データ構造のBツリーであるCASSANDRA-9754で扱われる設計上の問題です。

cassandra-4.0がリリースされるまで、あなたの最大パーティションサイズを100MBに設定し、大きなパーティションをより小さなサイズに分割してください。

+0

ありがとうございました。私がパーティションの数を増やすと(パーティション数は2^63)、カサンドラのパフォーマンスにどう影響しますか?特にパフォーマンスを読む? – kjk

+1

多くのパーティションが問題ありません。多くのデータがある場合は、2^63を超えることもできます(cassandra can /複数のパーティションキーを同じトークンにハッシュすることはできます)。 実際にパーティションにデータが必要なのは、そのデータを一緒にクエリしている場合だけです。ここで、cassandraはディスク上のデータをソートしてグループ化できます。パーティションから多くの行を取得していない場合は、分割してください。 また、複数のパーティションがある場合は、一度に複数の非同期SELECT呼び出しを発行し、クエリをより効率的に並列化できます。 –

関連する問題