【发布时间】:2019-12-03 01:29:57
【问题描述】:
在 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
谢谢。
【问题讨论】:
-
CQL 中确实存在分区键和集群键的概念......宽行并不是选择坏分区键的坏情况..
-
如果未定义集群键,则 order by 子句在 CQL 中将不起作用... ORDER BY 子句仅适用于集群列.. 同样 WHERE 子句使用分区键最有效
-
谢谢。你可以再详细一点吗? (也许写一个答案?)
-
@undefined_variable 谢谢。在您的示例中,如果两行的分区键值不同,那么它们属于不同的分区是否正确,不同的分区意味着不同的节点或数据存储?
-
是的..不同的分区键意味着数据属于不同的分区..虽然一个节点负责多个分区..所以不同的分区并不意味着不同的节点