8

我刚刚观看了 Patrick McFadin关于 cassandra 数据建模的 youtube 视频。

有一张桌子,如下:

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)

4

1 回答 1

14

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

PRIMARY KEY(username,interaction_date,interaction_time)

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

PRIMARY KEY((username,interaction_date),interaction_time)

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

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

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

于 2013-10-24T08:44:21.857 回答