Cassandra如何仅通过使用分区键来检索行?

时间:2018-11-25 17:23:56

标签: cassandra rocksdb sst

类似BigTable的数据库存储按键排序的行。

Cassandra使用分区键和集群键的组合来保持数据的分布和排序;但是,您只有通过使用分区键才能选择行!

Cassandra的架构如何以这种方式工作?

例如,在RocksDB中解决此问题的一种方法是,您可以通过分区键拥有一个默认的列族,而通过分区键和集群组合键可以拥有另一个默认的列族,并遍历排序的数据并通过默认的列族进行检索,最终您将空间复杂度高!

更新:我猜Cassandra试图将每一列存储在不同的键中,它以分区键开始,并在不同的“列名”(可能是群集列的其他组合)上进行迭代。请参阅基础存储引擎-的图片。

选择*来自作者,名字='Tom Clancy',年份='1993'。 在一个表中,“名称”是分区键,“年”和“标题”是聚类列。

The visulatiation of Cassandra Storage Layer for the above query.

2 个答案:

答案 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