了解Cassandra复合键

S K*_* Kr 8 cql cassandra

我刚观看了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)
);
Run Code Online (Sandbox Code Playgroud)

为什么是主键((username,interaction_date),interaction_time).这有什么不同(username,interaction_date,interaction_time).

lor*_*can 13

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

PRIMARY KEY(username,interaction_date,interaction_time)
Run Code Online (Sandbox Code Playgroud)

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

PRIMARY KEY((username,interaction_date),interaction_time)
Run Code Online (Sandbox Code Playgroud)

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

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

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