[英]Optimal MySQL design for user-specific activity feeds
我正在建立一個網站,該網站可以構建網站范圍和特定於用戶的活動供稿。 希望您能看到下面的結構,並分享您對我的解決方案是否正在完成工作的見解。 我有多種類型的用戶現在不存儲在一個主表中,這使情況變得復雜。 這是因為用戶的類型完全不同,為用戶元數據構造多個不同的表會給我帶來太多麻煩。 此外,可以采取多種類型的內容,並進行多種類型的活動(跟蹤,提交,評論等)。
構建一個站點范圍的活動提要很簡單,因為所有內容都記錄到了主提要表中,而我只是建立了一個列表。 我在MySQL中有一個主供稿表,其中包含簡單的日志:
(這只是一個很大的參考表,該表將生成提要的腳本指向每個提要條目的適當表)。
在生成特定於用戶的提要時,我試圖找出某種方法將關系表與提要表結合在一起,並使用該方法來解析結果。 我有一個關系表,由“以下”關系組成,類似於供稿表。 盡管b / c僅允許一種類型的用戶關注其他內容類型/用戶,這更簡單。
提要和關注表中的第2列和第3列是相同的,我一直在嘗試使用各種JOIN方法進行匹配,然后通過用戶在關注表中的任何關系來限制它們。 這不是很成功。
我正在使用的基本查詢是:
SELECT *
FROM (`feed` as fe) LEFT OUTER JOIN `follow` as fo
ON `fe`.`feed_target_type` = `fo`.`follow_e_type`
AND fo.follow_e_id = fe.feed_target_id
WHERE `fo`.`follow_u_id` = 1 OR fe.feed_e_id = 1
AND fe.feed_e_type = 'user'
ORDER BY `fe`.`feed_timestamp` desc LIMIT 10
該查詢還嘗試獲取用戶創建的任何內容(默認情況下,實際上是用戶創建的內容(數據記錄在提要表中)。
該查詢似乎有效,但是花了我一些時間才能確定,但是我肯定我錯過了一個更優雅的解決方案。 有任何想法嗎?
我使用活動供稿創建的第一個站點有一個通知表,其中記錄了活動,然后從中提取了朋友的動作。 但是幾個月后,這創下了數百萬條記錄。
我正在編程的解決方案現在從單獨的表中提取最新的“朋友”活動,然后按日期排序。 查詢在家里,如有興趣可以稍后發布示例嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.