Ключ раздела моделирования данных Cassandra - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть две таблицы в cassandra для моего проекта.

create table IF NOT EXISTS post_by_user
(topic_id varchar, 
post_id UUID,
title varchar, 
post_body varchar, 
user_id varchar,  
view_count int,
date_created date,
primary key (user_id, post_id))
WITH CLUSTERING ORDER BY (post_id DESC);



create table IF NOT EXISTS post_by_topic
(topic_id varchar, 
post_id UUID,
title varchar, 
post_body varchar, 
user_id varchar,  
view_count int,
date_created date,
primary key (topic_id, post_id))
WITH CLUSTERING ORDER BY (post_id DESC);

Теперь я хочу создать таблицу для наиболее просматриваемой записи на основе view_count.Каким должен быть ключ раздела таблицы, поскольку может быть несколько тем и пользователей?Есть ли возможность материализованного просмотра?

Существует также один способ сохранить постоянное значение ключа раздела.

Пожалуйста, предложите ...

1 Ответ

0 голосов
/ 26 сентября 2018

Создание материализованного представления на одной из ваших таблиц выше не может помочь вам вычислить общее количество просматриваемых постов.В качестве иллюстрации, если мы создадим материализованное представление для post_by_user следующим образом, мы сможем вычислить только топ-пост для каждого пользователя:

CREATE MATERIALIZED VIEW toppostforuser AS
   SELECT post_id FROM post_by_user
   WHERE post_id IS NOT NULL AND user_id IS NOT NULL AND view_count IS NOT NULL AND date_created IS NOT NULL
   PRIMARY KEY (user_id, post_id, view_count, date_created)
   WITH CLUSTERING ORDER BY (view_count desc);

Вам потребуется таблица с ключом раздела, равным простоpost_id, над которым можно создать материализованное представление для вычисления общего количества просматриваемых постов.

Примечание : если вы разделите ваш date_created на отдельные столбцы, такие как year, month, day, вы также можете вычислять ежедневные топ-посты, ежемесячные топ-посты.сообщения и т. д.

CREATE MATERIALIZED VIEW dailytoppostforuser AS
   SELECT post_id FROM post_by_user
   WHERE post_id IS NOT NULL AND user_id IS NOT NULL AND view_count IS NOT NULL AND year IS NOT NULL AND month IS NOT NULL AND day IS NOT NULL
   PRIMARY KEY ((user_id, year, month, day), post_id, view_count)
   WITH CLUSTERING ORDER BY (view_count desc);

Ссылка: Материализованные представления в Кассандре

...