Хранение счетчика внутри коллекции кассандры - PullRequest
0 голосов
/ 28 июня 2018

Я хочу сохранить данные агрегации от моего датчика, вот мой план схемы для таблицы Кассандры

ОБНОВЛЕНО

CREATE TABLE every_second_aggregate_signature(
    device_id text,
    year int,
    month int,
    day int,
    hour int,
    minute int,
    second int,
    signature map<text,counter>,
    PRIMARY KEY ((device_id, year, month, day, hour, minute, second))
)WITH CLUSTERING ORDER BY (year DESC, month DESC, day DESC, hour DESC, minute DESC, second DESC);

Данные подписи представлены в виде значения приращения и динамического значения, например

ts1 - {"4123sad" : 80, "djas10" : 99}
ts2 - {"4123sad" : 83, "djas10" : 103}
ts3 - {"4123sad" : 87, "djas10" : 198, "asfac9" : 281}
ts4 - {"4123sad" : 89, "djas10" : 201, "asfac9" : 540, "asd81" : 12}

Проблема в том, что я знал, что Кассандра не поддерживает счетчик внутри коллекции. Есть ли альтернативный подход или решение этой проблемы? Спасибо за вашу помощь

1 Ответ

0 голосов
/ 29 июня 2018

Единственный альтернативный подход - переместить «ключ» карты в первичный ключ таблицы. Прямо сейчас вы пытаетесь моделировать так (как я понял):

create table counters (
  ts timestamp primary key,
  counters map<text, counter>
);

Тогда вам нужно изменить его на следующее:

create table counters (
  ts timestamp,
  key text,
  counter counter,
  primary key (ts, key)
);

И чтобы выбрать все значения, которые должны войти в карту, вы просто делаете

select ts, key, counter from counters where ts = 'some value';

он вернет вам каждую пару ключа / счетчика для данного ts в отдельных строках, поэтому вам понадобится код, который объединит их с картой ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...