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

Cassandra - difference in efficiency between simple and compound key

我无法理解本文中的一件事 - 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) 也可以。

为什么在这种情况下需要集群密钥(用户名)?我知道当我们将用户名设置为集群键时,我们可以在 WHERE 子句中使用它。但是只通过groupname查找用户,PRIMARY KEY (groupname)PRIMARY KEY (groupname, username)在查询效率上有什么区别吗?

按组名查询不需要聚簇键

如果您添加集群键(本示例中的用户名),行将按组名的用户名排序。

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

But to find all users in group we can set: PRIMARY KEY (groupname)

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

But to find users only by groupname is any difference between PRIMARY KEY (groupname) and PRIMARY KEY (groupname, username) in terms of query efficiency?

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

在这种情况下,将 username 定义为聚类键可提供:

  1. 能够在组内按 username 排序。

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

  3. 在一个组中添加多个 username 的能力。