Cassandra - 我要更新的列的主键

时间:2016-09-16 11:37:43

标签: cassandra one-to-many data-modeling

我需要在Cassandra中构建表来存储操作状态。 我的模型看起来像这样:

import 1.. * import_statuses

表格导入:

id - 1
date - 2016-08-09

表import_statuses:

id - 232
import_id - 1
status - IMPORT

现在我必须搜索导入和第二个表中的状态。但我只需要从第二张表中获得最后状态。

这两个表中的非规范化数据:

1, 2016-08-09, 232, 1 IMPORT
1, 2016-08-09, 233, 1 SENDING
1, 2016-08-09, 234, 1 SENT
2, 2016-08-11, 235, 2 IMPORT
2, 2016-08-11, 236, 2 SENDING

我只需要获得第三和第五行:

1, 2016-08-09, 234, 1 SENT
2, 2016-08-11, 236, 2 SENDING

1 个答案:

答案 0 :(得分:0)

我将创建以下两个表,并将同时更新两个:

CREATE TABLE import (
  id int,
  status_id int,
  date date static,
  status text,
  PRIMARY KEY (id, status_id)
) WITH CLUSTERING ORDER BY (status_id DESC);

CREATE TABLE last_import_status (
  id int PRIMARY KEY,
  date date, 
  status_id int,
  status text
);

第一个包含非规范化数据,但由于日期字段是静态的,因此每次导入只存储一次。状态记录按降序存储 - 我知道这是一个越来越多的数字。如果status_id不是一个不断增加的数字,你可以添加一个timeuuid字段,并将其用作聚类键(PRIMARY KEY中的第二个字段)。

last_import_status表将包含每个导入的记录,status_id和status字段将始终包含最后一个值。