Cassandra,partition/primary 键:分区和约束

Cassandra, partition/primary key: partitioning and constraint

我正在尝试在 Cassandra 中设计一些列族,但我对 primary/partition 键有一些疑问。
我想要的是:

我知道这些目标可以通过选择合适的 partition/primary 键来实现,但是假设选择的 partition/primary 键允许列族中的无效数据,您会怎么做?

假设我有以下列系列:

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

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

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

声明一个以用户名作为主键的 table 将确保只存在一个用户名到组的关系:

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);