在Cassandra的查询语言级别上是否存在宽行,分区,集群列/键和分区键的概念?

问题描述 投票:0回答:2

在Cassandra中,宽行,分区,集群列/键和分区键的概念是否存在于查询语言级别?还是它们是查询语言的用户不了解的内部实现问题?

这里是How to understand the concept of wide row and related concepts in Cassandra?中的示例。在查询语言的命令中,以上概念似乎并不存在,但在钩子中确实存在。

考虑一个以a作为分区键,以b作为聚类列创建的表:

Create TABLE test (a text,b int, c text, PRIMARY KEY(a,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]

b:1来分配分区键test的单元:

SELECT * from test where a='test' and b=1

谢谢。

cassandra cql
2个回答
1
投票

绝对-CQL语法确实具有分区键与群集键的概念。只需查看您提供的示例:

Create TABLE test (a text,b int, c text, PRIMARY KEY(a,b)) 

语法(a,b)在CQL中表示a分区键,而b集群键。再举一个例子,如果您要写((a,b,c),d,e,f),则表示abc是分区键列,而def是聚簇键列。这是CQL语法。

这实际上意味着什么,我想你知道。除其他事项外,您可以要求以某种已知的排序顺序获取属于单个分区的所有聚类行-但是未对分区进行排序,并且全表扫描以随机顺序返回它们。]

CQL中未使用术语“宽行”作为术语,但确实存在该概念,正如我在上文中解释的那样,当单个单个行发生时,会发生“宽行”(实际上,“宽分区”更为准确)分区具有很多群集行-即,同一分区键有很多不同的群集键。在Cassandra中,对宽行的支持是有限的(从真正大的分区读取可能会比较慢,并且各种代码段仍然以低效的方式处理它们)。某些文件,例如this,建议Cassandra分区的大小最好为10MB。


1
投票

CQL模式

© www.soinside.com 2019 - 2024. All rights reserved.