我目前正在为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);
如果“ Joe”发布了一条帖子并拥有400位关注者,那么我的代码将创建400条instagram.user_post_timeline条目....每个用户一个。我继续阅读数据复制是可以的-但这似乎很极端。有一个更好的方法吗? (我知道,twitter在每个用户的redis中都保留ZIPLISTS ...但是那只是一个缓存)。
谢谢