Cassandra中分区键、复合键和集群键的区别?

我一直在网上阅读文章,了解以下key类型之间的差异。但我似乎很难理解。举例肯定有助于更好地理解

主键,
分区键,
复合键
聚类键

关于这一点有很多困惑,我将尽可能简单

主键是一个通用概念,表示用于从表中检索数据的一列或多列

主键可以是简单的,甚至可以内联声明:

创建表堆栈溢出\u简单(
关键字文本主键,
数据文本
);

这意味着它是由单个列组成的

但是主键也可以是从更多列生成的复合键(也称为复合键)

创建表stackoverflow\u复合(
关键部分第一段文字,
第二部分第二部分,
数据文本,
主键(键第一部分,键第二部分)
);

在复合主键的情况下,"第一部分;键的第二部分称为分区键(在本例中键的第一部分是分区键),键的第二部分是集群键(在本例中键的第二部分

请注意,分区键和群集键都可以由更多的列组成,如下所示:

创建多个表堆栈溢出(
k_第1部分文本,
k_第二部分int,
k_clust_一个文本,
k_clust_two int,
k_clust_三个uuid,
数据文本,
主键((k_第一部分,k_第二部分),k_第一部分,k_第二部分,k_第三部分)
);

在这些名字后面

  • 分区键负责跨节点分发数据
  • 集群键负责分区内的数据排序
  • 主键相当于单个字段键表中的分区键(即简单
  • 复合/复合键只是任意多列键

更多使用信息:DATASTAX文档


小用法和内容示例
***简单***键:

插入stackoverflow_简单(键、数据)值('han','solo');
选择*from stackoverflow_simple where key='han';

表格内容

键|数据
----+------
汉·索洛

复合/复合键可以检索;“宽行”;(即,即使定义了集群键,也可以仅通过分区键进行查询)

插入stackoverflow_组合(键1,键2,数据)值('ronaldo',9,'football player');
插入stackoverflow_组合(键1,键2,数据)值(“罗纳尔多”,10,“前足球运动员”);
从stackoverflow_composite中选择*,其中键_part_one='ronaldo';

表格内容

按键第一部分|按键第二部分|数据
--------------+--------------+--------------------
罗纳尔多| 9 |足球运动员
罗纳尔多| 10 |前足球运动员

但是您可以使用所有键(分区和集群)进行查询

从stackoverflow\u组合中选择*
其中,第一部分=罗纳尔多,第二部分=10;

查询输出

按键第一部分|按键第二部分|数据
--------------+--------------+--------------------
罗纳尔多| 10 |前足球运动员

重要提示:分区键是使用where子句执行查询所需的最小说明符。
如果您有一个复合分区键,如下所示

例如:主键((col1,col2,col10,col4))

您只能通过至少传递col1和col2来执行查询,这两列定义了分区键。";“一般”;进行查询的规则是,您必须至少传递所有分区键列,然后可以选择按设置的顺序添加每个集群键

因此,有效查询是(不包括二级索引)

  • col1和col2
  • col1、col2和col10
  • 第1列和第2列、第10列和第4列

无效:

  • col1、col2和col4
  • 不同时包含col1和col2的任何内容

发表评论