我正在使用的應用程序有一個活動供稿,其中每個用戶都可以看到他們的朋友的活動(很像Facebook)。我正在尋找一種適度擴展的方式來即時顯示給定用戶的活動流。我說'適度',因爲我只想用數據庫(Postgresql)和或者 memcached來完成此操作。例如,我希望這個解決方案可以擴展到每個有100個朋友的20萬用戶。以適度可擴展的方式提供活動供稿項目
當前,有一個主活動表存儲給定活動的呈現html(Jim添加了一個朋友,George安裝了一個應用程序等)。這個主活動表保留了源用戶,html和一個時間戳。
然後,有一個單獨的('join')表,它只保留一個指向應該在其好友供稿中看到此活動的人員的指針,以及一個指向主活動表中的對象的指針。所以,如果我有100個朋友,並且我做了3個活動,那麼連接表將增長到300個項目。
很明顯,這個表格將增長得非常快。不過,它具有很好的屬性,即向用戶顯示提取活動需要一個(相對)便宜的查詢。
另一種選擇是隻保留主要活動表,並說類似查詢它:
select * from activity where source_user in (1, 2, 44, 2423, ... my friend list)
這有你查詢的用戶誰可能永遠不會被激活的缺點,併爲您的朋友列表增長,這個查詢可以變得越來越慢。
我看到雙方的優點和缺點,但我想知道如果一些SO人可能會幫助我衡量選項,並建議一種方式或他人。我也開放給其他解決方案,但我想保持簡單,不要安裝類似CouchDB等。
非常感謝!