我很难理解 Cassandra The Definite Guide 中的宽行概念和相关概念:
Cassandra使用称为复合键(或复合键)的特殊主键来 代表宽行,也称为分区。 组合键由一个分区组成 键,以及一组可选的聚类列。 分区键用于确定 存储行的节点,节点本身可以由多列组成。的 集群列用于控制如何对数据进行排序以存储在分区中。 Cassandra还支持称为静态列的其他构造,该构造为 用于存储不属于主键但被表中每一行共享的数据 分区。
图4-5显示了如何通过分区键唯一地标识每个分区,以及 集群键如何用于唯一标识分区中的行。
是宽行和分区同义词吗?
在“分区键用于确定存储行的节点上,它们本身可以由多列组成”和“每个分区由分区键唯一地标识”,
由于分区键用于宽行,为什么会有多个“行”(这里的“行”是指“宽行”)?
分区键如何“确定存储行的节点”?
如何将分区键用于“每个分区由分区键唯一标识”?
在“群集列用于控制如何对数据进行排序以存储在分区中”,
在“聚类键用于唯一标识分区中的行”中,
谢谢。
答案 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
拾取单元以进行分区键测试。
“聚类键如何用于唯一标识其中的行 一个分区”?
以上答案也应对此进行解释。