只是我建立一個高音克隆*C *的樂趣建模時間表
,我周圍看到所有建議的C *方案使用或多或少相同的建模技術來更好地瞭解的C。問題在於我對以這種方式建模Twitter時間軸的可擴展性感到懷疑。
的問題:如果我有一個用戶A(搖滾歌星) 會發生什麼或更多,是非常受歡迎的,隨後是10K +用戶? 每次用戶A發佈推文時,我們都必須爲他的每個追隨者在時間表中插入10k +推文。
問題: 這個模型真的會縮放嗎? 任何人都可以建議我一個可以真正縮放的時間線建模的替代方法嗎?
C *架構:
CREATE TABLE users (
uname text, -- UserA
followers set, -- Users who follow userA
following set, -- UserA is following userX
PRIMARY KEY (uname)
);
-- View of tweets created by user
CREATE TABLE userline (
tweetid timeuuid,
uname text,
body text,
PRIMARY KEY(uname, tweetid)
);
-- View of tweets created by user, and users he/she follows
CREATE TABLE timeline (
uname text,
tweetid timeuuid,
posted_by text,
body text,
PRIMARY KEY(uname, tweetid)
);
-- Example of UserA posting a tweet:
-- BATCH START
-- Store the tweet in the tweets
INSERT INTO tweets (tweetid, uname, body) VALUES (now(), 'userA', 'Test tweet #1');
-- Store the tweet in this users userline
INSERT INTO userline (uname, tweetid, body) VALUES ('userA', now(), 'Test tweet #1');
-- Store the tweet in this users timeline
INSERT INTO timeline (uname, tweetid, posted_by, body) VALUES ('userA', now(), 'userA', 'Test tweet #1');
-- Store the tweet in the public timeline
INSERT INTO timeline (uname, tweetid, posted_by, body) VALUES ('#PUBLIC', now(), 'userA', 'Test tweet #1');
-- Insert the tweet into follower timelines
-- findUserFollowers = SELECT followers FROM users WHERE uname = 'userA';
for (String follower : findUserFollowers('userA')) {
INSERT INTO timeline (uname, tweetid, posted_by, body) VALUES (follower, now(), 'userA', 'Test tweet #1');
}
-- BATCH END
在此先感謝您的任何建議。