說我想設計一個系統,用戶可以創建帖子,每個帖子屬於一個用戶,但用戶可能有多個帖子。另外,假設我想支持查找給定用戶ID的所有帖子,以及通過postId簡單查找帖子。我還想存儲用戶特定的帳戶詳細信息,例如帳戶創建日期。造型在Cassandra中建立一對多關係的最佳方式是什麼?
的一種方式,這將是如下:
CREATE TABLE user (
userId int,
name varchar,
userDetail1,
userDetail2,
...,
PRIMARY KEY(userId)
);
CREATE TABLE post (
postId int,
postDetail1,
postDetail2,
...,
userId int,
PRIMARY KEY(postId)
);
從我讀過,推測這是不是最佳的查詢由特定用戶的帖子成爲記憶效率低下。它是否正確? Cassandra不支持索引userId上的發佈表的原因是什麼?
那麼理想的解決方案如下?
CREATE TABLE user (
userId int,
name varchar,
userDetail1,
userDetail2,
...,
PRIMARY KEY(userId)
);
CREATE TABLE post (
postId int,
postDetail1,
postDetail2,
...,
userId int,
PRIMARY KEY(postId)
);
CREATE TABLE user_to_post (
userId int,
postId int,
userDetail1,
userDetail2,
...,
postDetail1,
postDetail2,
...,
PRIMARY KEY(userId, postId)
);
使用組合鍵,查詢特定用戶的帖子效率更高。但是通過這種設計,會有一張專門用於表達職位的表格?同樣,在這個設計中,我希望查找特定用戶發佈的帖子,並且還想快速鏈接到發佈帖子的特定用戶。我做了大量的閱讀,但對於如何在Cassandra中精確設計一對多關係感到非常困惑。