Cassandra: объединение динамических столбцов с фиксированными столбцами

58
6

Я новичок в Cassandra, и мне интересно, как решить эту проблему с данными датчиков:

Каждый датчик имеет имя и описание, а также несколько временных меток со значением каждый. В JSON это будет выглядеть так:

[{
"sensor" : "Sensor1",
"description" : "first sensor",
"timeseries" : {
1200001 : 2,
1200002 : 5,
1200006 : 1,
1200009 : 3,
1200011 : 7,
1200012 : 9 }
}]

Как я могу сохранить это с помощью CQL? Я попробовал что-то вроде этого:

CREATE TABLE sensordata (
sensor text,
description text,
time int,
value int,
PRIMARY KEY (sensor, time)
);

Но это сохранит описание для каждой отметки времени. И если я добавлю описание в качестве ключа кластера, я всегда должен его предоставить при написании. Мое письмо должно выглядеть так:

INSERT INTO sensordata (sensor, description) VALUES ('Sensor1', 'first sensor');
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200001, 2);
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200002, 5);
INSERT INTO sensordata (sensor, time, value) VALUES ('Sensor1', 1200006, 1);

Наверное, мне нужно просто использовать две таблицы?

CREATE TABLE sensormetadata (
sensor text,
description text,
PRIMARY KEY (sensor)
);
CREATE TABLE sensordata (
sensor text,
time int,
value int,
PRIMARY KEY (sensor, time)
);

В конце концов, я хочу запросить один конкретный датчик (в определенном временном диапазоне). Другим запросом будут все данные датчиков за последние 120 секунд.

SELECT description, time, value from sensordata WHERE sensor='Sensor1';
SELECT description, time, value from sensordata WHERE sensor='Sensor1' AND time > 1200000 AND time < 1250000;
SELECT sensor, description, time, value from sensordata WHERE time > 1200000;

Спасибо!

Лучший, Malte

спросил(а) 2014-06-03T19:16:00+04:00 6 лет, 4 месяца назад
1
Решение
71

Вы можете использовать свою первую схему, но description столбец description static:

CREATE TABLE sensordata (
sensor text,
description text static,
time int,
value int,
PRIMARY KEY (sensor, time)
);

Это по существу означает, что описание будет храниться один раз для раздела (или один раз для идентификатора датчика), но будет отображаться в каждой строке. Статические столбцы были добавлены в 2.0.6, и вы можете прочитать о них подробнее здесь: http://www.datastax.com/dev/blog/cql-in-2-0-6

ответил(а) 2014-06-04T23:53:00+04:00 6 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема