2013-07-17 23 views
10

CassandraのCQLとの複合行キーについて少し誤解があります。 このデータが保存されているどのようにCassandraが複数列の主キー(CQL)を保存する方法

cqlsh:testcql> CREATE TABLE Note (
      ... key int, 
      ... user text, 
      ... name text 
      ... , PRIMARY KEY (key, user) 
      ...); 
cqlsh:testcql> INSERT INTO Note (key, user, name) VALUES (1, 'user1', 'name1'); 
cqlsh:testcql> INSERT INTO Note (key, user, name) VALUES (1, 'user2', 'name1'); 
cqlsh:testcql> 
cqlsh:testcql> SELECT * FROM Note; 

key | user | name 
-----+-------+------- 
    1 | user1 | name1 
    1 | user2 | name1 

次のは、私が持っているとしましょうか? 2行または1行ありますか?

2つの場合、同じキーを持つ複数の行をどのように持つことができますか? key = 1のレコードと「user1」から「user1000」のユーザーの場合は、キー= 1の行が1つあり、各ユーザーの名前が入っている列が1000行あることを意味しますか?

誰かがバックグラウンドで何が起こっているのか説明できますか?ありがとう。

答えて

11

reading an articleLyuben Todorov(ありがとう)によって提案されていますので、私は少し質問して答えを見つけました。

カッサンドラは、リレーショナルデータベースとはまったく異なる行というデータ構造にデータを格納します。行には固有のキーがあります。

私の例では何が起きていますか...テーブルNoteには、PRIMARY KEY (key, user)と定義された複合キーがあります。このキーの最初の要素のみが行キーとして機能し、パーティションキーと呼ばれます。内部的には、このキーの残りの部分が複合列を構築するために使用されます。私の例では

key | user | name 
-----+-------+------- 
    1 | user1 | name1 
    1 | user2 | name1 

------------------------------------- 
| | user1:name | user2:name | 
| 1 |-------------------------------- 
| | name1   | name1   | 
------------------------------------- 

が、それはそれは膨大な量で、任意の列を追加することは良い考えではないということは明らかだということを知っていたので、これは一列にカサンドラに表現されますコンポジット・キーが1つの行に格納されるため、コンポジット・キーに固有の値(および増加する値)複合主キーでこのように複数の列がある場合はさらに悪化します。

更新:その後、私はthis blog post by Aaron Mortonが詳細を同じよりも説明するよりも多く見つかりました。

+1

ブログ投稿はもう存在しません=( – Highstead

+1

@Highsteadそのブログ記事の新しいアドレスへのリンクが更新されました – Moonwalkr

関連する問題