2011-08-03 57 views
-3

http://twitter.com/#!/ladygaga社會進料系統設計

當LadyGaga的鳴叫1消息,它意味着插入對於每一個她的追隨者(佔12221751)的1個數據記錄?那麼共有12,221,751條記錄被插入?

設計這樣一個社會飼料系統的任何線索?

-------------------------------編輯行------------- ------------------

真正的問題:

執行SELECT鳴叫FROM鳴叫IN([FollowingIDs])是不可能在谷歌應用程序引擎,其限制到IN子句中最多30個項目

而在應用程序引擎中,它實際上意味着並行執行30個查詢,這並不是我明智的做法。

即使我被允許超過30個限制, 如果我訂購10000人,該怎麼辦?我不確定在MYSQL或任何其他類型的數據庫基礎結構中是否有任何性能問題使用「IN子句」 (應用程序引擎的bigtable不同於MYSQL)

因此,最好使用IN子句來查詢? 或設置用於存儲饋送關係的UserFeed表? 或第三種方法?

數據庫/ SQL大師請幫忙

+8

我甚至無法正確描述我正在閱讀這個問題的煩惱程度的數量。爲什麼每個用戶的提要都不會簡單地選擇'用戶訂閱'中的頂部x推文,其中tweeterId?我真的想要「aaaaaaargh」作爲「投票結束」理由。 – jball

+0

是的,我想我應該在之前的問題中加入這個例子。 我的問題應該是: 如果我有10000人關注,會有性能問題嗎? 「SELECT * FROM tweets WHERE owner IN(user1_id,user2_id ..... user10000_id)」? – user877062

回答

1

請參閱this talk從2009年穀歌I/O,以瞭解如何處理這些排序具有「扇出」數據結構的App Engine案例。

+0

感謝您的鏈接和關鍵字「扇出」 在18:52的視頻顯示的解決方案。 雖然確實需要寫入一次12,221,751個條目。 (雖然我得到了一些負面評分) 它應該是在App Engine中實現的最佳方式。 但是我仍然對mySQL中的任何線索感興趣嗎? – user877062

+0

*條目/記錄表示消息索引 – user877062

+0

@ user877062如果你想在mySQL中完成,你應該問一個單獨的問題標籤。 –

0

你能想象嗎?

沒有

民族都有追隨者名單

ID  | FOLLOWER__ID 
ladygaga | genesis 
ladygaga | user 

// PHP

$result = mysql_query("SELECT ID FROM followers WHERE FOLLOWER__ID = 'genesis';"); 
while($row = mysql_fetch_assoc($result)){ 
    $select[] = $row['ID']; 
} 

$tweets = mysql_query("SELECT * FROM tweets WHERE owner IN (".implode(",", $select).")");