2

カサンドラに関する記事と元の論文を読みました。今、私はmemtableについて混乱しています:

  1. memtable の行は行キーで並べられているという記事がありますが、ハッシュテーブルのようなものであると書かれている記事がありますが、どちらが正しいですか?

  2. パーティショナーについて: cassandra には基本的に 2 つのパーティショナー (RandomPartitioner と ByteOrderedPartitioner) があるため、選択したパーティショナーに関連する memtable の行の順序はありますか? (たとえば、RP を選択した場合、行はハッシュテーブルのように格納され、BOP を選択した場合、行はキー順に並べ替えられますか?)

  3. 行がキー順に並べられている場合、memtable は挿入をどのように処理しますか? (挿入により行が移動しますか?)

  4. Cassandra によって暗黙的に維持されるプライマリ インデックス (行キー インデックス) と何か関係がありますか?

4

1 に答える 1

0

将来的には、質問ごとに 1 つの質問に制限するようにしてください。これらのほとんどすべてが、1 つの質問として独立している可能性があります。

  1. memtable の行は行キーで並べられているという記事がありますが、ハッシュテーブルのようなものであると書かれている記事がありますが、どちらが正しいですか?

Cassandra は、そのデータを (Strickland、2014 年) 「分散ハッシュ テーブル データ構造」に格納します。これにより、データをクラスター全体に均等に格納および分散しながら、すばやくクエリを実行できます。行キー (別名パーティション キー) の値は、Consitent Hashingと呼ばれるプロセスを使用してハッシュされます。その後、キーのハッシュ値を含むトークン範囲を担当するノードのクラスターにデータが保存されます。関数を使用して、句を指定せずに CQL クエリを実行するWHEREと、結果セットの順序がハッシュされた行キー値の影響を受けることがわかりtoken()ます。

> SELECT userid, token(userid), posttime FROM postsbyuser;

 userid | token(userid)        | posttime 
--------+----------------------+-------------------------- 
      1 | -4069959284402364209 | 2015-01-25 13:25:00-0600 
      1 | -4069959284402364209 | 2015-01-25 13:22:00-0600 
      0 | -3485513579396041028 | 2015-01-25 13:21:00-0600 
      2 | -3248873570005575792 | 2015-01-25 13:28:00-0600 
      2 | -3248873570005575792 | 2015-01-25 13:27:00-0600 
      2 | -3248873570005575792 | 2015-01-25 13:26:00-0600
  1. パーティショナーについて: cassandra には基本的に 2 つのパーティショナー (RandomPartitioner と ByteOrderedPartitioner) があるため、選択したパーティショナーに関連する memtable の行の順序はありますか? (たとえば、RP を選択した場合、行はハッシュテーブルのように格納され、BOP を選択した場合、行はキー順に並べ替えられますか?)

最終的には、はい、Random パーティショナーと Byte Ordered パーティショナーはリング上でデータを異なる方法で分散します。実際、Murmur3Partitioner であるデフォルトのパーティショナーがありません。Murmur3 パーティショナーには、Random パーティショナーと同じ目的があります。これは、データを均等に分散させることです。新しいクラスターでは、Murmur3 パーティショナーを使用する必要があります。この 2 つの違いについては、こちらで回答されています。スループットの観点からcassandraのランダムまたはMurmur3と、それらの違いは何ですか?

BOP は下位互換性のためにまだ含まれており、実際にはもう使用しないでください。BOP を避けるべき理由についても詳しく説明されています: Cassandra ByteOrderedPartitioner

  1. 行がキー順に並べられている場合、memtable は挿入をどのように処理しますか? (挿入により行が移動しますか?)

この DataStax ドキュメントからの抜粋更新の書き込みパス は、これを非常によく説明しています。タイトルは気にしないでください...挿入と更新は基本的に Cassandra と同じです。

更新はシーケンシャル I/O を使用してディスクにストリーミングされ、新しい SSTable に保存されます。更新中、Cassandra は書き込みパスを使用して列にタイムスタンプを付け、ディスクに書き込みます。更新中に memtable に列の複数のバージョンが存在する場合、Cassandra は新しいバージョンの列のみをディスクにフラッシュします。

ドキュメントThe Write Path to Compactionからのこの最後の抜粋は、この質問の最後の部分に答えます:

データをフラッシュするために、Cassandra は memtable をトークンでソートし、データをディスクに順番に書き込みます。

  1. Cassandra によって暗黙的に維持されるプライマリ インデックス (行キー インデックス) と何か関係がありますか?

私が質問を理解している場合、この Cassandra 1.1 ドキュメント ( About Indexes in Cassandra ) は少し古いかもしれませんが、RDBMS の対応物との比較とともにこれを説明しています。

Cassandra では、列ファミリーのプライマリ インデックスはその行キーのインデックスです。各ノードは、管理するデータのこのインデックスを維持します。

行は、クラスター構成のパーティショナーとキースペース構成のレプリカ配置戦略によってノードに割り当てられます。Cassandra のプライマリ インデックスを使用すると、行キーで行を検索できます。各ノードは、各ノードが管理するキーの範囲を認識しているため、関連するレプリカでのみ行インデックスをスキャンすることで、要求された行を効率的に見つけることができます。

これがあなたの質問に答えることを願っています。

参考文献:

Strickland R. (2014)。 カサンドラの高可用性。Packt Publishing Ltd. バーミンガム、英国。(pp. 19-24)。

于 2015-02-18T01:36:28.223 に答える