所有信徒的活動日誌有潛力對於大量的記錄,因爲它通常混合了當前用戶的活動和他們的所有朋友。如果您加入各種表格,並且用戶有100多個朋友,那麼可能會有很多數據被抽出。
一種方法是denormalise數據,把它作爲一個大的日誌,其中應該出現在用戶的活動日誌網頁上的所有條目存儲在針對該用戶活動日誌表。例如,如果用戶A有兩個朋友,用戶B和用戶C,當用戶A確實是創造了一種3活動日誌記錄:
record 1: "I did this" log for user A
record 2: "My friend did this" log for user B
record 3: "My friend did this" log for user C
你會得到重複,但它其實並不重要。選擇速度很快,因爲它來自一個表格,並僅根據用戶ID進行索引。而且很可能你會保存一個活動日誌表(即刪除超過1個月的條目)。
活動日誌表可以是這樣的:
-id
-user_id (user who's activity log this is)
-action_user_id (user who took the action, or null if same as user_id)
-activity_type
-date
要選擇所有最近的活動日誌,爲單個用戶是那麼容易:
SELECT * from activity_log WHERE user_id = ? ORDER by date DESC LIMIT 0,50
爲了使這種方法確實有效,你需要在單個活動日誌表中有足夠的信息不需要進一步選擇。例如,您可以存儲原始日誌消息,而不是實時構建它。
我認爲日期的概念非常重要,但也許這只是Josh的遺漏。 – Wookai 2009-08-11 07:11:29