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

В Cassandra есть концепция «Модель вокруг ваших запросов», в которой в основном говорится, что вам нужно знать все ваши запросы, прежде чем придумать хороший дизайн. [Этот документ] (http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling) содержит основные правила проектирования, вы также можете посмотреть [Моделирование данных] (https://academy.datastax.com/courses/ds220-data-modeling) курса DataStax. Короткий ответ заключается в том, что вам, вероятно, нужна дополнительная таблица, в которой хранятся записи по статусу, но правильный дизайн зависит от других возможных полей запроса. – medvekoma