Cassandra - 简单键和复合键之间的效率差异

时间:2015-11-07 17:03:48

标签: cassandra datastax cql cassandra-2.0 nosql

我在理解本文中的一件事时遇到问题 - 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)之间的差异吗?

2 个答案:

答案 0 :(得分:3)

群集密钥提供多种好处:查询灵活性,结果集排序(在分区键内)和扩展唯一性。

  

但要查找群组中的所有用户,我们可以设置:PRIMARY KEY (groupname)

尝试一次。仅使用groupname作为PRIMARY KEY创建一个新表,然后尝试为每个组插入多个username。您会发现只有一个组,并且该组中的每个新用户都将覆盖username列。

  

但是,仅根据groupname查找用户,PRIMARY KEY (groupname)PRIMARY KEY (groupname, username)在查询效率方面有何不同?

如果PRIMARY KEY (groupname)执行得更快,最可能的原因是因为只能返回一行。

在这种情况下,将username定义为群集键提供:

  1. 按组内username排序的能力。

  2. 查询群组中特定username的能力。

  3. 在群组中添加多个username的功能。

答案 1 :(得分:1)

如果要按组名查询,则不需要群集密钥。

如果您添加一个群集密钥(此例子中的用户名),将按用户名为行命名。