【问题标题】:composite column keys & composite row keys复合列键和复合行键
【发布时间】:2014-11-04 06:22:06
【问题描述】:

我正在尝试理解复合列键和复合行键的概念,但无法理解。我认为它用于获取一系列值,但我们不能为此目的使用时间戳列作为集群键吗?什么是用例,优点,缺点和实现。请使用 CQL 3 进行解释。

复合列键:http://i.stack.imgur.com/qLboK.png

复合行键:http://i.stack.imgur.com/xA6Hz.png

【问题讨论】:

    标签: cassandra cql3 cassandra-2.0 datastax


    【解决方案1】:

    您可能会混淆这两个术语,即 cassandra 如何存储复合主键。我将解释复合键的工作原理以及如何使用 Cassandra 2.0 和 CQL3 轻松地进行物理存储。

    Cassandra 将具有相同分区键的所有逻辑行存储为单个物理宽行。分区键分为(partition_key,clustering_key)。

    • partition_key:标识 Cassandra 中的行。具有相同 partition_key 的所有寄存器将转到同一台机器并存储在一起。您可以复合 partition_key。
    • clustering_key:保持具有相同partition_key的数据有序。您可以设置多个以逗号分隔的聚类键。

    假设您有一个具有此定义的餐桌购买:

    CREATE TABLE purchase(
      user text,
      item text,
      time timestamp,
      PRIMARY KEY ((user, item), time)
    );
    

    还有这个数据

    john  car  09/01/14...
    john  car 09/05/13...
    john  house 09/07/11...
    penny laptop  09/08/08...
    penny laptop 09/03/11...
    rachel tv 09/01/09...
    

    Cassandar 将存储该数据

    john || car  || 09/05/13 - 09/01/14
    john || house || 09/07/11
    penny || laptop || 09/08/08 - 09/03/11
    rachel || tv || 09/01/09
    

    如果您想检索 john 购买的汽车,您可以确保将两个寄存器存储在一起并按时间排序。

    对于查询,您始终必须设置分区键字段 ( = ),如果您想将集群键的顺序与 ( ) 进行比较,您可以设置。

    例子:

    • 选择 * from purchase where user='penny' and item='laptop'。返回 2 个寄存器。
    • 选择 * from purchase where user='john' and item='car' where date 01/01/14。返回 1 个寄存器。

    希望对你有帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    相关资源
    最近更新 更多