簡體   English   中英

針對特定於用戶的活動提要的最佳MySQL設計

[英]Optimal MySQL design for user-specific activity feeds

我正在建立一個網站,該網站可以構建網站范圍和特定於用戶的活動供稿。 希望您能看到下面的結構,並分享您對我的解決方案是否正在完成工作的見解。 我有多種類型的用戶現在不存儲在一個主表中,這使情況變得復雜。 這是因為用戶的類型完全不同,為用戶元數據構造多個不同的表會給我帶來太多麻煩。 此外,可以采取多種類型的內容,並進行多種類型的活動(跟蹤,提交,評論等)。

構建一個站點范圍的活動提要很簡單,因為所有內容都記錄到了主提要表中,而我只是建立了一個列表。 我在MySQL中有一個主供稿表,其中包含簡單的日志:

  1. 活動類型;
  2. 目標實體的類型;
  3. 目標實體的ID;
  4. 源實體的類型(即用戶或組織);
  5. 源實體的ID。

(這只是一個很大的參考表,該表將生成提要的腳本指向每個提要條目的適當表)。

在生成特定於用戶的提要時,我試圖找出某種方法將關系表與提要表結合在一起,並使用該方法來解析結果。 我有一個關系表,由“以下”關系組成,類似於供稿表。 盡管b / c僅允許一種類型的用戶關注其他內容類型/用戶,這更簡單。

  1. 用戶/源ID;
  2. 目標實體的類型;
  3. 目標實體的ID。

提要和關注表中的第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM