【发布时间】:2014-07-04 16:12:42
【问题描述】:
我想知道在 Cassandr 中何时何地使用复合列和复合键
【问题讨论】:
我想知道在 Cassandr 中何时何地使用复合列和复合键
【问题讨论】:
复合键的使用在许多情况下都很有用。
想象一个 users 表,其中您有一个用户 id (uuid) 作为主键(单键) 除非您知道用户的 id(暂时忽略二级索引),否则无法查询此表。
现在让我们考虑一个表,其中您不再使用 id 作为主键,而是使用由 (name, surname, email) 组成的复合键
现在您可以通过了解来查询您的用户
名称
姓名 - 姓氏
姓名 - 姓氏 - 电子邮件
主键必须是唯一的,在这种情况下,电子邮件应保证用户是唯一的。 注意,要通过电子邮件查询,您必须知道姓名和姓氏,要查询姓氏,您必须知道姓名(这是真的,除非您不使用特定的方式来建模您的数据) .
CREATE TABLE users (
name text,
surname text,
email text,
age int,
address text,
id uuid,
PRIMARY KEY (name, surname, email)
)
另一个有用的场景是数据排序。 想象一下,您有一个表,其中保存了由推特扬声器(由 uuid 标识)制作的推文(由时间 uuid 标识)。
在 cassandra 中,密钥的第一部分称为分区密钥,其余部分称为集群密钥。对于相同的分区键数据可以通过一个聚类键进行排序
CREATE TABLE tweets (
tweeter_id uuid,
tweet_id timeuuid,
content text,
PRIMARY KEY (tweeter_id, tweet_id)
) WITH CLUSTERING ORDER BY (tweet_id DESC)
在这种情况下,一旦您向 cassandra 询问推文发的推文,它们将免费按时间排序。
干杯, 卡罗
【讨论】: