请问在Cassandra中,分区密钥、复合密钥和聚类密钥的区别是什么?

在Cassandra中,分区密钥、复合密钥和聚类密钥的区别是什么?

我一直在网上阅读文章,以了解以下内容的不同之处key类型。但对我来说似乎很难理解。举例肯定有助于更好地理解。

primary key,
partition key, 
composite key 
clustering key


慕尼黑5688855
浏览 281回答 3
3回答

森林海

在这方面有很多困惑,我会尽量让它变得简单。主键是一个通用概念,用于指示用于从表中检索数据的一个或多个列。主键可能是简约甚至宣称: 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).
打开App,查看更多内容
随时随地看视频慕课网APP