cassandra如何仅使用分区键检索行?

bmp9r5qi  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(532)

类似bigtable的数据库存储按键排序的行。
cassandra采用分区和聚类相结合的方法来保持数据的分布和排序;但是,您只能通过使用分区键来选择行!
Cassandra的架构是如何以这种方式工作的?
例如,在rocksdb中解决这个问题的一种方法是,您可以按分区键拥有一个默认列族,另一个具有分区和群集组合键,并对排序的数据进行迭代,然后按默认列族进行检索,这将导致非常高的空间复杂度!
更新:我猜cassandra试图将每一列存储在一个不同的键中,它从分区键开始,在不同的“列名”上进行迭代——可能是其他列的组合——集群列。请参阅底层存储引擎的图片-。
从name='tom clancy'和year='1993'的作者中选择*。在表中,“name”是分区键,“year”和“title”是集群列。
上述查询的cassandra存储层的可视化。

nszi6y05

nszi6y051#

cassandra中的所有数据都是由分区存储的,因此当您只对分区键有条件时,您将检索具有该分区键的所有行—它们将一个接一个地写入。您可以在dse体系结构指南中找到更多信息。

5m1hhzi4

5m1hhzi42#

正如您所提到的,cassandra有一个分区密钥和一个集群密钥。
下面是一个关于这个主题的非常简短和清晰的解释,并提供了一些很好的例子datasax—在cassandra数据建模中要知道的最重要的事情:主键。
本文件的重要内容包括:
主键中的第一个元素是我们称之为分区键的元素。分区键在apachecassandra中有一个特殊的用途,除了显示数据库中记录的唯一性之外。另一个目的,也是在分布式系统中非常关键的一个目的,是确定数据的局部性。
这解释了如何选择行只有通过分区键是Cassandra设计的一部分。
如果分区键在其定义中有多个列-
在分区键之后列出的所有列都称为集群列。这就是我们从关系数据库中获得巨大突破的地方。如果分区键对数据局部性很重要,则clustering列指定数据在分区内的排列顺序。
当正确设计集群列时,与不定义集群列相比,读取查询所花费的时间应该更少。
除了上面的链接,你可以在这个stakoverflow问题中找到很好的解释和例子(cassandra中分区密钥、复合密钥和聚类密钥的区别?)。
更新:
数据库使用嵌套排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您已经为集群列的不同值共享了键。请看这里:集群列

相关问题