2016-09-16 46 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