Cassandra,分区/主键:分区和约束

时间:2017-01-07 15:07:33

标签: database-design cassandra primary-key partitioning nosql

我正在尝试在Cassandra中设计一些列族,但我对主键/分区键有疑问。
我想要的是以下内容:

  • 在群集中均匀分布数据
  • 最小化读取的分区数

我知道通过选择适当的分区/主键可以实现这些目标,但是假设选择的分区/主键允许colum-family中的无效数据,你做什么?

假设我有以下colum-family:

((o)
 (d e)
 (d e)
 (m n)
 (a b c)
 (f g h)
 (i j k l))

假设一个用户名必须只属于一个组,这个主键我可以实现(有一些假设)以前的目标,但没有办法避免用户名放在不止一个小组。

我可以简单地假设列系列中的内容,或者有办法避免插入无效数据吗?

1 个答案:

答案 0 :(得分:2)

声明一个以用户名作为主键的表将确保只存在一个用户名与组之间的关系:

CREATE TABLE group (username text, groupname text, PRIMARY KEY (username));

使用lightweight transactions,您可以阻止更新用户的群组:

INSERT INTO group (username, groupname) VALUES ('joe', 'wheel') IF NOT EXISTS;

如果您希望按组查询,请创建物化视图:

CREATE MATERIALIZED VIEW usersbygroup AS
   SELECT groupname, username FROM group
PRIMARY KEY (groupname, username);
相关问题