2017-01-07 98 views
0

我想在卡桑德拉设计一些列家族,但我对主/分区键有一些怀疑。
我想是这样的:卡桑德拉,分区/主键:分区和约束

  • 数据分布均匀集群
  • 周围最小化分区的读取数量

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

假设我有以下科拉姆-FAMILY:

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

假设一个用户名必须属于只在一组,与此主键,我可以实现(有一些假设)之前的目标,但是无法避免将用户名放在多个组中。

我可以简单地假设列族中的内容还是避免插入无效数据的方法?

+0

这是不可能的c在Cassandra中将RDBMS相当于一个“约束”。如果您需要确保无效数据未写入,则需要在应用程序级别检查该数据。 – Aaron

回答

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

在这一天,我试着告诉我,这似乎是一个很好的解决方案,谢谢! – LolloFake