Начиная с 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`.