我一直在网上阅读文章以了解以下key类型之间的区别。但这对我来说似乎很难掌握。示例肯定有助于更好地理解。
key
primary key, partition key, composite key clustering key
对此有很多困惑,我将尝试使其尽可能简单。
主键是一个通用概念,表示用于从表中检索数据的一个或多个列。
主键可能很 _ 简单_ ,甚至可以内联声明:
create table stackoverflow_simple ( key text PRIMARY KEY, data text );
这意味着它是由单列组成的。
但主键也可以是 _ COMPOSITE (又名 _ COMPOUND ),由更多列生成。
create table stackoverflow_composite ( key_part_one text, key_part_two int, data text, PRIMARY KEY(key_part_one, key_part_two) );
在 _ COMPOSITE 主键的情况下,键的“第一部分”称为 _ PARTITION KEY (在本例中 key_part_one 是分区键),键的第二部分是CLUSTERING KEY (在本例中 key_part_two )
请注意,分区键和集群键都可以由更多列组成 ,方法如下:
create table stackoverflow_multiple ( k_part_one text, k_part_two int, k_clust_one text, k_clust_two int, k_clust_three uuid, data text, PRIMARY KEY((k_part_one, k_part_two), k_clust_one, k_clust_two, k_clust_three) );
这些名字的背后…
更多使用信息:DATASTAX 文档
小用法和内容示例 简单 KEY:
insert into stackoverflow_simple (key, data) VALUES ('han', 'solo'); select * from stackoverflow_simple where key='han';
表格内容
key | data ----+------ han | solo
COMPOSITE/COMPOUND KEY 可以检索“宽行”(即您可以仅通过分区键查询,即使您定义了集群键)
insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 9, 'football player'); insert into stackoverflow_composite (key_part_one, key_part_two, data) VALUES ('ronaldo', 10, 'ex-football player'); select * from stackoverflow_composite where key_part_one = 'ronaldo';
key_part_one | key_part_two | data --------------+--------------+-------------------- ronaldo | 9 | football player ronaldo | 10 | ex-football player
但是您可以使用所有键(分区和集群)进行查询…
select * from stackoverflow_composite where key_part_one = 'ronaldo' and key_part_two = 10;
查询输出
key_part_one | key_part_two | data --------------+--------------+-------------------- ronaldo | 10 | ex-football player
重要说明:分区键是使用where clause. 如果您有复合分区键,如下所示
where clause
例如:PRIMARY KEY((col1, col2), col10, col4))
PRIMARY KEY((col1, col2), col10, col4))
您只能通过至少传递 col1 和 col2 来执行查询,这是定义分区键的 2 列。进行查询的“一般”规则是您必须至少传递所有分区键列,然后您可以选择按照设置的顺序添加每个集群键。
所以,有效的查询是( 不包括二级索引 )
无效的: