Временная шкала пользователя и репликация данных в Кассандре - PullRequest
0 голосов
/ 15 ноября 2018

В настоящее время я создаю бэкэнд для клона instagram и использую Cassandra в качестве базы данных (впервые NoSQL). Я пытался денормализовать свои данные - но это не так. Уровень репликации - N (где N - количество подписчиков / подписчиков).

Я знаю, как первичный ключ состоит из двух частей (ключ раздела и столбцы кластеризации), и пытался смоделировать соответствующим образом.

 CREATE TABLE IF NOT EXISTS instagram.user_post (
   user_id uuid,
   post_id timeuuid,
   tag text,
   caption text,
   PRIMARY KEY (user_id, post_id)
 ) WITH CLUSTERING ORDER BY (post_id DESC);

CREATE TABLE IF NOT EXISTS instagram.user_post_comment (
  user_id uuid,
  post_id timeuuid,
  comment text,
  PRIMARY KEY (user_id, post_id)
) WITH CLUSTERING ORDER BY (post_id DESC);


CREATE TABLE IF NOT EXISTS instagram.user_post_timeline (
  user_id uuid,
  post_id timeuuid,
  caption text,
  month text,
  PRIMARY KEY ((user_id, month) post_id)
) WITH CLUSTERING ORDER BY (post_id DESC);

Если "Джо" делает пост и имеет 400 подписчиков, мой код создаст 400 записей instagram.user_post_timeline .... по одной для каждого пользователя. Я продолжаю читать, дублирование данных - это нормально, но это кажется крайним. Есть лучший способ сделать это? (Я знаю, что твиттер сохраняет ZIPLISTS в redis для каждого пользователя ... но это всего лишь кеш).

Спасибо

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