【问题标题】:Clustering Keys in CassandraCassandra 中的集群键
【发布时间】:2013-09-09 05:34:11
【问题描述】:

在给定的物理节点上,给定分区键的行按由集群键引起的顺序存储,使得以该集群顺序检索行特别有效。 http://cassandra.apache.org/doc/cql3/CQL.html#createTableStmt聚类键会引发什么样的排序?

【问题讨论】:

    标签: cassandra nosql


    【解决方案1】:

    假设你的聚类键是

    k1 t1, k2 t2, ..., kn tn
    

    其中 ki 是第 i 个键名,ti 是第 i 个键类型。然后订单数据以字典顺序存储,其中每个维度都使用该类型的比较器进行比较。

    所以 (a1, a2, ..., an)

    这意味着找到具有特定 k1=a 的所有行是有效的,因为数据存储在一起。但是在 i > 1 时查找所有具有 ki=x 的行是低效的。事实上,这样的查询是不允许的 - 唯一允许的集群键约束指定零个或多个集群键,从第一个开始,没有丢失.

    例如,考虑架构

    create table clustering (
        x text,
        k1 text,
        k2 int,
        k3 timestamp,
        y text,
        primary key (x, k1, k2, k3)
    );
    

    如果你做了以下插入:

    insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 1, '2013-09-10 14:00+0000', '1');
    insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 13:00+0000', '1');
    insert into clustering (x, k1, k2, k3, y) values ('x', 'a', 2, '2013-09-10 13:00+0000', '1');
    insert into clustering (x, k1, k2, k3, y) values ('x', 'b', 1, '2013-09-10 14:00+0000', '1');
    

    然后将它们按此顺序存储在磁盘上(select * from clustering where x = 'x' 返回的顺序):

     x | k1 | k2 | k3                       | y
    ---+----+----+--------------------------+---
     x |  a |  1 | 2013-09-10 14:00:00+0000 | 1
     x |  a |  2 | 2013-09-10 13:00:00+0000 | 1
     x |  b |  1 | 2013-09-10 13:00:00+0000 | 1
     x |  b |  1 | 2013-09-10 14:00:00+0000 | 1
    

    k1 排序占主导地位,然后是 k2,然后是 k3

    【讨论】:

    • 谢谢理查德。可以举个例子吗?
    • 我在答案中添加了一个示例。
    • 非常感谢理查德。从您的示例中,我能够理解集群列和 CQL 文档“为 PRIMARY KEY 定义列的顺序很重要。”来自cassandra.apache.org/doc/cql3/CQL.html#createTableStmt
    猜你喜欢
    • 2021-11-01
    • 2015-08-09
    • 2017-11-07
    • 2019-09-07
    • 2016-06-14
    • 2018-12-13
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多