0

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

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

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

例如,在 RocksDB 中解决此问题的一种方法是,您可以通过分区键拥有一个默认列族,而另一个具有分区和集群组合键的默认列族,并迭代排序的数据并按默认列族检索,最终会得到非常高的空间复杂度!

更新:我猜 Cassandra 试图将每一列存储在不同的键中,它从分区键开始并迭代不同的“列名”——也许是其他集群列的组合。参考底层存储引擎图片-。

SELECT * From authors WHERE name = 'Tom Clancy' AND year = '1993'。在一个表中,“name”是分区键,“year”和“title”是集群列。

上述查询的 Cassandra 存储层可视化。

4

2 回答 2

2

Cassandra 中的所有数据都按分区存储,因此当您仅对分区键有条件时,您将检索具有该分区键的所有行 - 它们一个接一个地写入。您可以在DSE 架构指南中找到更多信息。

于 2018-11-25T18:18:34.947 回答
2

正如您提到的,Cassandra 有一个分区键和一个集群键。

这是关于该主题的非常简短和清晰的解释,并带有很好的示例Datastax - Cassandra 数据建模中要了解的最重要的事情:主键

本文档的重要内容是:

PRIMARY KEY 中的第一个元素就是我们所说的分区键。除了显示数据库中记录的唯一性之外,分区键在 Apache Cassandra 中还有一个特殊用途。另一个目的,也是分布式系统中非常关键的一个目的,是确定数据的局部性。

这解释了如何仅通过分区键选择行是 Cassandra 设计的一部分。

如果分区键在其定义中包含多于一列 -

分区键之后列出的所有列都称为集群列。这是我们从关系数据库中取得巨大突破的地方。在分区键对数据局部性很重要的情况下,集群列指定数据在分区内的排列顺序。

当集群列设计正确时,与不定义集群列相比,读取查询应该花费更少的时间。

除了上面的链接,您可以在这个 stakoverflow 问题中找到非常好的解释和示例。(Cassandra 中分区键、复合键和集群键的区别?)。

更新:

数据库使用嵌套排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您已为集群列的不同值共享密钥。看看这里:聚类列

于 2018-11-25T18:23:15.460 回答