类似BigTable的数据库存储按键排序的行。
Cassandra使用分区键和集群键的组合来保持数据的分布和排序;但是,您只有通过使用分区键才能选择行!
Cassandra的架构如何以这种方式工作?
例如,在RocksDB中解决此问题的一种方法是,您可以通过分区键拥有一个默认的列族,而通过分区键和集群组合键可以拥有另一个默认的列族,并遍历排序的数据并通过默认的列族进行检索,最终您将空间复杂度高!
更新:我猜Cassandra试图将每一列存储在不同的键中,它以分区键开始,并在不同的“列名”(可能是群集列的其他组合)上进行迭代。请参阅基础存储引擎-的图片。
选择*来自作者,名字='Tom Clancy',年份='1993'。 在一个表中,“名称”是分区键,“年”和“标题”是聚类列。
The visulatiation of Cassandra Storage Layer for the above query.
答案 0 :(得分:2)
Cassandra中的所有数据都由分区存储,因此,当您仅对分区键有条件时,则检索具有该分区键的所有行-它们被依次写入。您可以在DSE Architecture guide中找到更多信息。
答案 1 :(得分:1)
Cassandra有一个分区键和一个集群键。
这里有一个很好的例子,Datastax - The most important thing to know in Cassandra data modeling: The primary key对主题做了简短而清晰的解释。
此文档的重要内容是:
PRIMARY KEY中的第一个元素是所谓的分区键。除了显示数据库中记录的唯一性之外,分区键在Apache Cassandra中还有特殊用途。另一个目的(在分布式系统中非常关键)是确定数据的位置。
其中解释了如何仅通过拥有分区键来选择行是Cassandra设计的一部分。
如果分区键在其定义中具有多个列-
在分区键之后列出的所有列都称为聚簇列。这是我们与关系数据库大相径庭的地方。在分区键对于数据局部性很重要的地方,聚类列指定数据在分区内的排列顺序。
正确设计聚类列后,与未定义聚类列相比,读取查询所花的时间应更少。
除了上面的链接之外,您还可以在this stakoverflow question.(Cassandra中的分区键,复合键和聚类键之间有区别吗?)找到很好的解释和示例。
更新:
数据库使用嵌套的排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您具有用于聚类列的不同值的共享密钥。在这里看看:Clustering columns