我在理解本文中的一件事时遇到问题 - http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling
练习 - 我们希望按组名获取所有用户。
解决方案:
CREATE TABLE groups (
groupname text,
username text,
email text,
age int,
PRIMARY KEY (groupname, username)
);
SELECT * FROM groups WHERE groupname = 'footballers';
但要查找群组中的所有用户,我们可以设置:PRIMARY KEY (groupname)
并且它也有效。
为什么在这种情况下需要一个群集密钥(用户名)?我知道当我们将username设置为聚类键时,我们可以在WHERE
子句中使用它。但是,在查询效率方面,仅按组名查找用户是PRIMARY KEY (groupname)
和PRIMARY KEY (groupname, username)
之间的差异吗?
答案 0 :(得分:3)
群集密钥提供多种好处:查询灵活性,结果集排序(在分区键内)和扩展唯一性。
但要查找群组中的所有用户,我们可以设置:
PRIMARY KEY (groupname)
尝试一次。仅使用groupname
作为PRIMARY KEY创建一个新表,然后尝试为每个组插入多个username
。您会发现只有一个组,并且该组中的每个新用户都将覆盖username
列。
但是,仅根据
groupname
查找用户,PRIMARY KEY (groupname)
和PRIMARY KEY (groupname, username)
在查询效率方面有何不同?
如果PRIMARY KEY (groupname)
执行得更快,最可能的原因是因为只能返回一行。
在这种情况下,将username
定义为群集键提供:
按组内username
排序的能力。
查询群组中特定username
的能力。
在群组中添加多个username
的功能。
答案 1 :(得分:1)
如果要按组名查询,则不需要群集密钥。
如果您添加一个群集密钥(此例子中的用户名),将按用户名为行命名。