質問

...次のテーブル構造を持つ5億行MySQLのテーブルを考えてみましょう
CREATE TABLE foo_objects (
  id int NOT NULL AUTO_INCREMENT,
  foo_string varchar(32),
  metadata_string varchar(128),
  lookup_id int,
  PRIMARY KEY (id),
  UNIQUE KEY (foo_string),
  KEY (lookup_id),
);

...

...だけで次の2つのクエリを使用して照会されています
# lookup by unique string key, maximum of one row returned
SELECT * FROM foo_objects WHERE foo_string = ?;
# lookup by numeric lookup key, may return multiple rows
SELECT * FROM foo_objects WHERE lookup_id = ?;

これらのクエリを考えると、どのようにカサンドラを使用して、指定されたデータ・セットを表すのでしょうか?

役に立ちましたか?

解決

次の2つのオプションがあります:

(1)伝統の一種である:あなたのFooオブジェクトと1枚のCF(columnfamily)、FOOごとに1行ずつ、フィールドごとに1列を持っています。次いで、一つの行のキーは文字列値であり、他の行のキーをlookup_id 2つの指標、CFSを、作成します。インデックス行の列は、fooのIDです。だから、その後、IDのMULTIGETは、インデックスCFにGET返されます。

あなたはlookup_idとしてidが同じにすることができれば、あなたは維持するために1つの以下のインデックスを持っていることに注意します。

Diggのlazyboy( http://github.com/digg/lazyboy のような

高レベルのクライアント)あなたのためのインデックスのCFを維持する自動化します。カサンドラ自身がこれを自動的に行いません(まだ)。

(2)(1)のようですが、(そのインデックストップレベルの列がsupercolumnsあり、である)インデックス・ローのサブカラムに全体FOOオブジェクトを複製します。あなたが実際のfoo ID自体で照会していない場合は、まったく独自のCFに保存する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top