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

Cassandra 此主键如何获取组中的所有用户?,cassandra,data-modeling,database,nosql,Cassandra,Data Modeling,Database,Nosql,我试图通过本文来理解Cassandra中的数据建模来自关系背景,但是,我无法理解其中的一个示例 在示例2用户组中: CREATE TABLE groups ( groupname text, username text, email text, age int, PRIMARY KEY (groupname, username) ) 请注意,主键有两个组件:groupname,它是 分区键和用户名,称为集群键。 这将为每个组名提供一个分区。在特定范围内

我试图通过本文来理解Cassandra中的数据建模来自关系背景,但是,我无法理解其中的一个示例

在示例2用户组中:

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    PRIMARY KEY (groupname, username)
)
请注意,主键有两个组件:groupname,它是 分区键和用户名,称为集群键。 这将为每个组名提供一个分区。在特定范围内 分区(组),行将按用户名排序获取组 只需执行以下操作即可:

CREATE TABLE groups (
    groupname text,
    username text,
    email text,
    age int,
    PRIMARY KEY (groupname, username)
)
然而,我不明白的是,如果我们要创建一个组,我们将在insert中传递一个组名和相应的用户名


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

您可以将分区视为数据桶。它可以保存一行或多行数据。当您读取该数据存储桶时,Cassandra可以非常高效地访问存储桶中的所有行,或者只访问由集群键指定的一系列行

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


但是分区密钥只是密钥的一部分。bucket中的每一行仍然需要具有唯一的主键,因此在该示例中,存储在特定组分区中的每个用户都需要具有不同的用户名。因此,组名和用户名的组合必须是唯一的。只要组中的每个用户名不同,就可以在同一个组名下插入更多用户。如果您使用重复的用户名插入,则将使用该用户名更新该行,而不是添加一行。

谢谢您的评论。我也可以访问用户的其他属性,如电子邮件、年龄等。。。如果是,我将如何更新组中用户的年龄?是否会获取组中的用户并启动后续查询以更新其他表中的用户信息?您将为要更改的用户更新单个行。例如,在CQL中,您可以这样做,“更新组设置年龄=30,其中groupname='somegroup'和username='someuser'