【问题标题】:How can Cassandra retrieve rows only by using the partition key?Cassandra 如何仅使用分区键检索行?
【发布时间】:2019-04-27 10:35:16
【问题描述】:

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

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

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

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

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

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

The visulatiation of Cassandra Storage Layer for the above query.

【问题讨论】:

    标签: cassandra rocksdb sst


    【解决方案1】:

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

    【讨论】:

    • 我明白这一点。我猜,Cassandra 允许这种重复并按照聚类键的排序顺序尝试将每一列按该顺序存储在不同的键中,因此每一行都是对列的范围查询。 (请参阅我发现的带有可视化的更新问题)。我说的对吗?
    • 是的,类似于 - 数据在写入文件之前按每个聚类列排序...然后 Cassandra 能够进行有效的范围查询,甚至在同一分区内进行聚合
    • 好的。根据上图和我们所说的,您对 Cassandra 如何理解一行的最后一列 - 特别是 NULL 列,考虑到它们不应该占用任何空间有任何意见。
    • 对不起,不明白你的意思——你的意思是“C* 如何理解在哪里停止阅读?”
    • 是的,C* 在哪里停止读取单行的列?不知不觉因为每一列都存储在不同的键中,我想我们必须在达到列数的地方停止,但是如果我们有 NULL 列,我们怎么知道我们在一行中?
    【解决方案2】:

    如您所述,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

    【讨论】:

    • 我知道,我主要说的是Cassandra的存储层,请参考更新,我猜Cassandra将每个列值存储在不同的键中。我说的对吗?
    • 数据库使用嵌套排序顺序存储和定位数据。数据存储在查询必须遍历的层次结构中。您已为集群列的不同值共享密钥。看这里:Clustering columns
    猜你喜欢
    • 2015-02-02
    • 1970-01-01
    • 2017-07-21
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2011-11-15
    • 2015-06-21
    • 2020-10-05
    相关资源
    最近更新 更多