此主键如何获取组中的所有用户?

时间:2015-08-06 22:41:49

标签: cassandra data-modeling database nosql

我尝试使用this文章来了解来自关系背景的Cassandra中的数据建模。但是,我无法理解其中一个示例。

示例2用户组

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    PRIMARY KEY (groupname, username)
)
  

请注意,PRIMARY KEY有两个组件:groupname,即   分区键和用户名,称为群集密钥。   这将为每个组名提供一个分区。特定的   分区(组),行将按用户名排序。 找一个小组   就像执行以下操作一样简单

SELECT * FROM groups WHERE groupname = ?

然而,我无法理解的是,如果我们要创建一个组,我们将在插入中传递单个组名和相应的用户名。

那么,如何使用select语句检索属于单个组的所有用户?此外,由于组名是主键,因此我们无法添加具有相同组名的更多用户,因为这会导致违规。

1 个答案:

答案 0 :(得分:2)

您可以将分区视为数据存储区。它可以包含单行或多行数据。当您读取该数据存储桶时,Cassandra可以非常有效地访问存储桶中的所有行,或者仅通过群集密钥指定的行范围。

分区是Cassandra中的复制单元,因此一个分区存储区中的所有数据都存储在一个节点上(如果使用的复制因子高于一个,则可能在其他节点上有额外的副本)。

但是分区键只是键的一部分。存储桶中的每一行仍然需要具有唯一的主键,因此在该示例中,存储在特定组分区中的每个用户都需要具有不同的用户名。因此,groupname和username的组合需要是唯一的。只要组内的每个用户名不同,您就可以在同一组名下插入更多用户。如果您插入了重复的用户名,那么它将是对该用户名的行的更新,而不是添加一行。