复合柱键和复合行键

时间:2014-09-10 14:33:56

标签: cassandra cql3 cassandra-2.0 datastax

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

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

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

1 个答案:

答案 0 :(得分:3)

也许你会混淆两个引用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

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

对于查询,您始终必须设置分区键字段(=),如果您希望将聚类键的比较顺序与(<或>)进行比较,则可以。

示例:

  • 从购买中选择*,其中user =' penny'和item =' laptop'。返回2个寄存器。
  • 从购买中选择*,其中user =' john'和item =' car'日期01/01/14。返回1个寄存器。

希望它有所帮助。