6

複合列に関しては、Cassandraのストレージエンジンを理解しようとしています。残念ながら、これまで読んだドキュメントにはエラーが含まれており、少し空白のままになっています。

まず、用語。

複合列は、複合主キーを使用して完全に非正規化された幅の広い行で構成されます。

これは誤解を招くように思われます。なぜなら、AFAIKの複合列は複合キーに使用でき、キーとは別に単純に複合列としても使用できるからです。

1:複合キーと列名はどのように実装されますか?私が見つけることができるすべてのCQLの例では、複合キーのみが列として表示され、プレーンな複合列は表示されません。

主な複合キーとして列'a'、'b'、'c'、'd'+列'e'、'f'があるとします。「a」が行とパーティションのキーになることはわかっています。

次のデータを想定してみましょう。

a    b    c    d    e    f
1a   1b   1c   1d   e1   f1
1a   1b   1c   2d   e1   f2
1a   1b   1c   2d   e2   f3
2a   2b   2c   2d   e2   f4

2:これはどのようにボンネットの下に保管されますか?ここでの本当の問題は、列が定義上階層的ではないため、「b」、「c」、「d」がどのようにマップされるかということだと思います。

3:私が読んだドキュメントには、コンパクトストレージはもう使用すべきではないと書かれています。しかし、非主キー列を追加する必要がない場合はどうなりますか...それを使用しない理由は何ですか?

4

2 に答える 2

2

1:複合キーと列名はどのように実装されますか?

主に質問で答えました2。余談ですが、Cassandra 1.2では、非複合キーも内部で複合キーとして実装されます。また、複合列の名前自体はストレージ内で繰り返されません。インメモリ表現は、メモリ効率のしきい値まで名前をインターンします。

2:これはどのようにボンネットの下に保管されますか?

最初のキーコンポーネント(このa例では)が物理行キーになります。残りの列は、非複合列のプレフィックスを形成し、行内に事前にソート(クラスター化)されて格納されます。したがって、例の物理的な表現は次のようになります。

    1b.1c.1d, e   1b.1c.1d, f
1a      e1            f1
------------------------------
    2b.2c.2d, e   2b.2c.2d, f
2a      e2            f4

例の2行目と3行目は無効であることに注意してください。列名は、物理行内で一意である必要があります。

私が使用したドット表記(1b.1c.1d)は比喩的です。実際のストレージは、メタデータの後にデータが続くプレフィックスバイトを使用します。

私が読んだドキュメントには、コンパクトストレージはもう使用すべきではないと書かれています。しかし、非主キー列を追加する必要がない場合はどうなりますか...それを使用しない理由は何ですか?

ストレージ効率が非常に小さいことは、スキーマに進化可能性がないことのマイナス面に値するものではありません。

于 2012-08-21T02:28:41.923 に答える
1

これらの2つのリンクはあなたに役立つかもしれません:

http://www.datastax.com/dev/blog/schema-in-cassandra-1-1

http://xamry.wordpress.com/2012/07/31/composite-keys-in-cassandra

于 2012-08-21T06:25:13.027 に答える