私はCassandraでいくつかの列ファミリを設計しようとしていますが、プライマリ/パーティションキーに関する疑問があります。
私がしたいことは以下の通りです:Cassandra、パーティション/プライマリキー:パーティション化と制約
- スプレッドデータを均等にクラスタ
- 周りのパーティションの数を最小限に抑えるには、私はこれらの目標は、適切なパーティション/主を選択することによって達成可能であることを知っている
を読みますしかし、パーティション/プライマリキーを選択すると、あなたの列ファミリの無効なデータが許可されているとします。あなたは何をしていますか?
は、私は、次のcolum、家族を持っていることとします
CREATE TABLE group (
groupname text,
username text,
PRIMARY KEY (groupname, username))
ユーザ名のみに私は(いくつかの仮定で)前の目標を達成することができ、この主キーを持つ一つのグループを、所属している必要がありますと仮定しますしかし、ユーザー名が複数のグループに置かれるのを避ける方法はありません。
列ファミリの内容を仮定するか、無効なデータの挿入を回避する方法がありますか? lightweight transactionsで
CREATE TABLE group (username text, groupname text, PRIMARY KEY (username));
を使用すると、ユーザーのグループへの更新を防ぐことができます:
INSERT INTO group (username, groupname) VALUES ('joe', 'wheel') IF NOT EXISTS;
主キーとしてユーザー名を持つテーブルを宣言
c Cassandraの「制約」と同等のRDBMSを再考してください。無効なデータが書き込まれないようにする必要がある場合は、アプリケーションレベルでそのデータをチェックする必要があります。 – Aaron