Вложенная карта в моделировании данных Кассандры - PullRequest
0 голосов
/ 13 июня 2018

У меня есть следующее требование к моему набору данных, необходимо понять, какой тип данных я должен использовать и как сохранить мои данные соответственно: -

CREATE TABLE events (
id text,
evntoverlap map<text, map<timestamp,int>>,
PRIMARY KEY (id)
) 

evntoverlap = {
               'Dig1': {{'2017-10-09 04:10:05', 0}}, 
               'Dig2': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0}},
               'Dig3': {{'2017-10-09 04:11:05', 0},{'2017-10-09 04:15:05', 0},{'2017-10-09 04:11:05', 0}}
              }

Это выдает ошибку: -

Error from server: code=2200 [Invalid query] message="Non-frozen collections are not allowed inside collections: map<text, map<timestamp, int>>"

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

Ответы [ 2 ]

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

Коллекции CQL ограничены 64 КБ, если вы помещаете в карты такие вещи, как карты, вы можете увеличить этот предел.Особенно с замороженными картами вы десериализуете всю карту, модифицируете ее и повторно вставляете.Может быть лучше с

CREATE TABLE events (
  id text,
  evnt_key, text
  value map<timestamp, int>,
  PRIMARY KEY ((id), evnt_key)
  ) 

Или даже с

CREATE TABLE events (
  id text,
  evnt_key, text
  evnt_time timestamp
  value int,
  PRIMARY KEY ((id), evnt_key, evnt_time)
  )

Это было бы более эффективно и безопаснее, предоставляя дополнительные преимущества, такие как возможность упорядочить event_time в порядке возрастания или убывания.

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

Существует ограничение Cassandra - вы не можете вложить коллекцию (или UDT) в коллекцию, не заморозив ее.Поэтому вам необходимо «заморозить» одну из коллекций - либо вложенную:

CREATE TABLE events (
id text,
evntoverlap map<text, frozen<map<timestamp,int>>>,
PRIMARY KEY (id)
);

, либо верхний уровень:

CREATE TABLE events (
id text,
evntoverlap frozen<map<text, map<timestamp,int>>>,
PRIMARY KEY (id)
);

См. документацию для получения более подробной информации.

...