如何理解Cassandra中的宽行概念和相关概念?

时间:2019-11-28 02:17:09

标签: cassandra column-family

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

  

Cassandra使用称为复合键(或复合键)的特殊主键来   代表宽行,也称为分区组合键由一个分区组成   键,以及一组可选的聚类列。 分区键用于确定   存储行的节点,节点本身可以​​由多列组成。的   集群列用于控制如何对数据进行排序以存储在分区中。 Cassandra还支持称为静态列的其他构造,该构造为   用于存储不属于主键但被表中每一行共享的数据   分区。

     

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

     

enter image description here

是宽行和分区同义词吗?

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

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

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

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

在“群集列用于控制如何对数据进行排序以存储在分区中”,

  • 什么是聚类列,例如,图中的聚类列是什么?
  • 集群列如何“控制如何对分区中存储的数据进行排序”?

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

  • 分区是宽行的同义词,“分区中的行”是什么意思?
  • “集群键如何用于唯一标识分区中的行”?

谢谢。

1 个答案:

答案 0 :(得分:2)

  

是宽行和分区同义词吗?

分区和行可以视为同义词。宽行是一种情况,其中所选分区键将导致该键的cells数量非常大。考虑一个场景,该场景中一个国家/地区的所有人都在使用,而分区键是city,那么一个城市将有一行,而该行中的所有人将为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是聚类列,整个封闭框是单元格。

  

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

Cassandra将使用上面示例表中的列b升序对数据进行排序。也可以将其更改为降序。

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拾取单元以进行分区键测试。

  

“聚类键如何用于唯一标识其中的行   一个分区”?

以上答案也应对此进行解释。