Вставить идентичные записи в несколько таблиц с разными первичными ключами - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть несколько миллиардов записей с 15 полями, которые я хочу вставить их в Cassandra (с Java API).Поскольку мой поисковый ключ для запросов может быть одним из пяти различных полей записи (т. Е. Поисковым запросом для полей 3, 7, 8, 13 или 14), я создал 5 идентичных таблиц с разными первичными ключами в Cassandra (аналогичноупоминается в введите описание ссылки здесь ).

Теперь я читаю запись (или серию записей) и называю «вставка в Кассандру» 5 раз.

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

Например, запись(s) сохраняет в MemTable сразу (из моего кода, вставляя сразу), а ядро ​​Cassandra сохраняет их в 5 таблицах в SSTable?

1 Ответ

0 голосов
/ 27 декабря 2018

Начиная с Cassandra 3.0 существует поддержка для материализованных представлений, которые могут вам помочь.Но вам нужно тщательно спроектировать исходную таблицу, так как существует ряд ограничений на то, как вы можете изменить структуру материализованных представлений по сравнению с исходной таблицей - в частности: * вы можете добавить в первичный ключ не более одного столбца, который не являетсяв первичном ключе исходной таблицы;* Первичный ключ материализованного представления должен содержать все компоненты первичного ключа исходной таблицы, но вы можете использовать другой порядок столбцов в первичном ключе.* все столбцы первичного ключа материализованного представления должны быть ненулевыми.

Подробнее об этих ограничениях вы можете найти в этом сообщении в блоге .

Вы также должны быть осторожны с изменением ключа раздела, чтобы не получать большие разделы (но у вас может быть та же проблема, если вы пишете данные вручную).Кроме того, примите во внимание, что это увеличивает нагрузку на узел-координатор, который должен будет распространять данные на другие серверы, если ключ раздела изменяется - когда вы пишете данные «вручную», драйвер отправит запрос непосредственно в реплику, которая содержит эти данные.

Синтаксис для создания материализованных представлений содержится в документации - он очень похож на SQL, но не совсем (пример из документации):

CREATE TABLE cyclist_mv (cid UUID PRIMARY KEY, 
   name text, age int, birthday date, country text);

CREATE MATERIALIZED VIEW cyclist_by_age 
  AS SELECT age, birthday, name, country 
  FROM cyclist_mv 
  WHERE age IS NOT NULL AND cid IS NOT NULL 
  PRIMARY KEY (age, cid);

В этом случае мы перемещаемот одного столбца в первичном ключе (cid) до 2 столбцов в первичном ключе (age и условие cid). Note the explicit check for non-NULL values in the WHERE`.

...