Cassandraのドキュメントを読んで、データのクエリ時に実行される内部手順について説明します。 Cassandraはクエリを処理するためにパーティショナーとレプリケーション戦略に依存しています。パーティションャーがパーティションキーを知る必要があると私はまだ混乱しています。クエリにパーティションキーがある場合、内部クエリプロセスはただし、クエリが以下のような確定的な行ではなく結果セットを期待している場合。
SELECT * FROM <table>
この場合、WHERE
句で主キーが指定されていないとき、コーディネーターはどのノードにリクエストを送信するかをどのようにして知るのですか?
異なるノードに分散されている可能性がある複数の行が返された場合、これらの行はどのように集計されてクライアントに返されますか?
wHERE句で主キーが指定されていない場合、コーディネーターはどのノードにリクエストを送信するかをどのようにして知るのですか?
異なるノードに分散されている可能性がある複数の行が返される場合、これらの行はどのように集計されてクライアントに返されますか?
crew
のパーティションキーを使用して、crewname
という名前のテーブルに対してバインドされていないクエリを実行するとします。そのキーでCQL token()
関数を実行すると、返された行が実際にトークン順に並べられていることがわかります。
aploetz@cqlsh:presentation> SELECT crewname,token(crewname),firstname,lastname
FROM crew;
crewname | token(crewname) | firstname | lastname
----------+----------------------+-----------+-----------
Simon | -8694467316808994943 | Simon | Tam
Jayne | -3415298744707363779 | Jayne | Cobb
Wash | 596395343680995623 | Hoban | Washburne
Mal | 4016264465811926804 | Malcolm | Reynolds
Zoey | 7853923060445977899 | Zoey | Washburne
Sheppard | 8386579365973272775 | Derial | Book
(6 rows)
Cassandraは特定のノードが主に特定のトークン範囲を担当するため、このように機能します。次に、コーディネーターがその順序で結果セットを返すのは簡単なタスクになります。複数の行がある場合、同じパーティションキー、結果はさらにクラスタリングキーwithin各パーティションキーでソートされます。