森林海
在这方面有很多困惑,我会尽量让它变得简单。主键是一个通用概念,用于指示用于从表中检索数据的一个或多个列。主键可能是简约甚至宣称: create table stackoverflow_simple (
key text PRIMARY KEY,
data text
);这意味着它是由一列组成的。但是主键也可以是复合材料(又名复配),由更多列生成。 create table stackoverflow_composite (
key_part_one text,
key_part_two int,
data text,
PRIMARY KEY(key_part_one, 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文档小用法和内容示例简约钥匙:insert into stackoverflow_simple (key, data) VALUES ('han', 'solo');
select * from stackoverflow_simple where key='han';表内容key | data
----+------
han | solo复合键/复合键可以检索“宽行”(即,您可以仅通过分区键进行查询,即使您定义了群集键)。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..如果您有一个复合分区键,如下所示例:PRIMARY KEY((col1, col2), col10, col4))您只能通过至少传递col1和col2来执行查询,这是定义分区键的2列。要进行查询的“一般”规则是,您必须至少传递所有分区键列,然后可以按设置的顺序随意添加每个聚类键。因此,有效的查询是(不包括次要指数)可乐1和可乐2可乐1、可乐2和可乐10Col1,Col2,Col10和Col4无效:可乐1、可乐2和COL 4不同时包含col1和col2的任何内容。希望这能帮上忙。
阿波罗的战车
添加一个Redux答案作为接受的答案是相当长的。术语“行”和“列”是在CQL上下文中使用的,而不是Cassandra实际上是如何实现的。主键唯一标识行。复合键是由多列组成的键。分区键是查找一组行(即分区)的主要查找。聚类键是主键的一部分,它不是分区键(并定义分区内的顺序)。例子:PRIMARY KEY (a)*分区键是a.PRIMARY KEY (a, b)*分区键是a,聚类键是b.PRIMARY KEY ((a, b))*复合分区键是(a, b).PRIMARY KEY (a, b, c)*分区键是a,复合聚类键是(b, c).PRIMARY KEY ((a, b), c)*复合分区键是(a, b),聚类键是c.PRIMARY KEY ((a, b), c, d)*复合分区键是(a, b),复合聚类键是(c, d).