В настоящее время я создаю бэкэнд для клона 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 для каждого пользователя ... но это всего лишь кеш).
Спасибо