-2

我觉得很难从Cassandra The Definite Guide中理解宽行的概念和相关概念:

Cassandra 使用称为复合键(或复合键)的特殊主键来表示宽行,也称为分区复合键由一个分区键和一组可选的集群列组成。 分区键用于确定存储行的节点,它本身可以由多个列组成。聚类列用于 控制数据在分区内存储的排序方式。Cassandra 还支持称为静态列的附加构造,用于存储不属于主键但由分区中的每一行共享的数据。

图 4-5 显示了如何通过 分区键唯一标识每个分区,以及如何使用集群键来唯一标识分区内的行。

在此处输入图像描述

宽行和分区是同义词吗?

在“分区键用于确定存储的节点,它本身可以由多个列组成”和“每个分区由一个分区键唯一标识”,

  • 由于分区键用于宽行,为什么会有多个“行”(这里的“行”是指“宽行”)?

  • 分区键如何“确定存储的节点”?

  • 分区键如何用于“每个分区由分区键唯一标识”?

在“聚类列用于控制数据在分区内存储的排序方式”中,

  • 什么是聚类列,例如图中的聚类列是什么?
  • 聚类列如何“控制数据在分区内存储的排序方式”?

在“聚类键用于唯一标识分区内的行”中,

  • 分区是宽行的同义词,“分区内的行”是什么意思?
  • 如何“使用聚类键来唯一标识分区内的行”?

谢谢。

4

1 回答 1

2

宽行和分区是同义词吗?

分区和行可以被认为是同义词。宽行是一种情况,其中选择的分区键将导致cells该键的数量非常大。考虑一个场景,所有的人都在一个国家,使用的分区键是城市,那么一个城市会有一行,所有的人都cells在这一行。对于地铁城市,这将导致大排。另一个例子是使用 sensorId 作为分区键存储每隔几秒接收到的传感器数据,这将导致cells几年后的大量数据。

由于分区键用于宽行,为什么会有多个“行”(这里的“行”是指“宽行”)?

和上面一样。

分区键如何“确定存储行的节点”?

从分区键哈希(默认为 MurMur3Hash)生成,cassandra 中的每个节点负责值的范围。考虑分区键值的哈希结果是 20,并且 Node1 负责范围 1 到 100,那么该分区将驻留在 Node1 上。

分区键如何用于“每个分区由分区键唯一标识”?

如上所述,分区键决定数据驻留在哪个节点上。数据表示可以被视为只能具有唯一键的巨大映射。

什么是聚类列,例如图中的聚类列是什么?

考虑像Create TABLE test (a text,b int, c text, PRIMARY KEY(a,b))这里创建的表a是分区键并且b是集群列。附图clustering key中是聚类列,整个封闭框是单元格。

聚类列如何“控制数据在分区内存储的排序方式”?

bCassandra 将使用上述示例表中的列在升序表中对数据进行排序。它也可以更改为下降。

INSERT INTO test(a,b,c) VALUES('test',2,'test2')
INSERT INTO test(a,b,c) VALUES('test',1,'test1')
INSERT INTO test(a,b,c) VALUES('test-new',1,'test1')

如果您按此顺序运行上述查询,cassandra 将按以下顺序存储数据(数据表示比下面的要多得多。只需检查 b 列的顺序):

test -> [b:1,c=test1] [b:2,c=test2]
test-new -> [b:1,c=test1]

分区是宽行的同义词,“分区内的行”是什么意思?

聚类列用于识别cells分区内的(单元格是比行更好的术语)。示例SELECT * from test where a='test' and b=1将使用b:1用于分区键测试的单元格。

如何“使用聚类键来唯一标识分区内的行”?

上面的答案也应该解释这一点。

于 2019-11-28T06:44:16.717 回答