同等のカサンドラ表現にMySQLのデータ/クエリセットの翻訳
質問
...次のテーブル構造を持つ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に保存する必要はありません。
所属していません StackOverflow