了解Cassandra复合键

时间:2013-10-24 04:50:23

标签: cassandra cql

我刚看过cassandra数据建模的this youtube video of Patrick McFadin。有一个表,如下:

create table user_activity_history {
  username varchar,
  interaction_date varchar,
  activity_code varchar,
  detail varchar,
  PRIMARY KEY((username,interaction_date),interaction_time)
);

为什么主键为((username,interaction_date),interaction_time)。 这与(username,interaction_date,interaction_time)有什么不同。

1 个答案:

答案 0 :(得分:13)

差异与表格partition_key有关。通常,PRIMARY KEY中的第一个元素也是分区键 - 它定义了集群中数据的物理位置,例如,通过使用以下内容:

PRIMARY KEY(username,interaction_date,interaction_time)

插入表中的数据将根据username进行分区(物理定位),而使用以下内容:

PRIMARY KEY((username,interaction_date),interaction_time)

它将根据username,interaction_date组合进行分区。后一种方案的优点是可以跨群集中的节点存储与单个username相关的数据。

CREATE TABLE上的datastax的CQL文档中有关于partition_keys的更多详细信息:

  

使用复合PRIMARY KEY时,Cassandra会将定义中声明的第一列视为分区键,并将该行的所有列存储在同一物理节点上。使用复合分区键时,Cassandra会将嵌套括号中的列视为分区键,并将行的列存储在多个节点上。你宣布一个复合   分区键使用一组额外的括号来定义哪些列对数据进行分区。