2016-09-16 84 views
0

我需要在Cassandra中建立表来存储操作状态。 我的模型看起来是这样的: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 

回答

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字段将始终包含最后一个值。

+0

好的,你可以写样本选择查询来检索所有具有状态xx的行吗? – Robert

+0

卡桑德拉有“围绕您的查询模型”的概念,基本上说您需要知道所有的查询,然后才能提出一个好的设计。 [本文档](http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling)包含基本的设计规则,您还可以观看[数据建模](https:/ /academy.datastax.com/courses/ds220-data-modeling)DataStax课程。简而言之,您可能需要一个附加的表格来存储条目的状态,但正确的设计取决于其他可能的查询字段。 – medvekoma