2

Planetcassandraでこのブログを読んだ後、3 つのフィールドを持つ CQL3 複合インデックスがどのようにthrift column family word にマップされるのか疑問に思っています。例えば:

CREATE TABLE comments (
        article_id uuid,
        posted_at timestamp,       
        author text,
        karma int,
        content text,
        PRIMARY KEY (article_id, posted_at)
    )

ここで、列 article_id は内部行キーにマップされ、posted_at はセル名 (の最初の部分) にマップされます。

テーブルのデザインがどうなるか

CREATE TABLE comments (
        author_id varchar,
        posted_at timestamp,
        article_id uuid,       
        author text,
        karma int,
        content text,
        PRIMARY KEY (author_id, posted_at, article_id)
    )
  1. また、内部行キーは複合インデックスの最初の 2 つのフィールドにマップされ、article_id がセル名にマップされ、基本的に 20 億エントリまでの記事をスライスし、author_id と posted_at の組み合わせに対するクエリはディスク上の 1 つのシークになりますか?
  2. 複合キーの任意の数のフィールドで動作は同じですか?

あなたの答えは大歓迎です。

4

2 に答える 2

2

上記の観察は正しくなく、正しいものはここにあります

私は個人的に確認しました:

In the first case:
article_id = partition key, posted_at = cluster key

In the second case:
author_id  = partition key, posted_at:article_id = cluster key
  1. 複合キー (author_id) の最初の部分は「パーティション キー」と呼ばれ、残り (posted_at、article_id) は残りのキーです。
  2. 複合キーが使用される場合、Cassandra は異なる方法で列を格納します。パーティション キーが行キーになります。残りのキーは、列名を形成するために、各列名 (セパレータとして ":") と連結されます。列の値は変更されません。
  3. 残りのキー (パーティション キー以外) は順序付けられており、ランダムな列を検索することはできません。最初のキーから始めて、2 番目のキーに移動することができます。これは、「Bad Request」エラーから明らかです。
于 2013-04-02T11:43:04.520 に答える