2014-02-26 81 views
0

我正在創建論壇。我需要統計每個用戶的全部討論。所以,我正在考慮兩種方法使用如下統計用戶總討論次數的最佳方法是什麼?

假設表calleduser_forum_profile

存在以下字段

http://i.imgur.com/qxZgL0v.png

1方法 每次用戶創建新的討論或評論其他討論更新相關總計數user_forum_profile

優點

總的討論很容易搶,因爲CountDiscussions價值將等於總討論

缺點

需要更新,每次當用戶創建新的討論或添加評論

2的方法

假設表格稱爲討論

已存在稱爲用戶ID的字段。當計算總討論,使用計數(用戶ID)查詢找到全部討論

所以我的問題是哪種方法是最好的方法?哪種方法使用更少的服務器資源

+0

第2個是正常形式。觸發器可以更好地實現第一個目標。我會和第二個一起去。 –

+0

我想第一個會更好,更不用說你可以緩存查詢,所以它不會每次都重新運行。 – Prix

+0

第二是更好,我相信,沒有必要每次都做額外的工作,直到你需要讀數。有道理:) – avisheks

回答

0

從2方法我更喜歡第一個。

我的想法:

3. Method: 

如果您的論壇將是高流量,可以可以使用集合來處理數據。 您創建1-2個新表,例如:

user_comment_aggregate (user_discuss_aggregate same table structure) 
fields: 

uca_id 
uca_user_id 
uca_datetime 

值的示例:

1, 123, '2014-02-26 07:08:09' 
2, 123, '2014-02-26 07:11:22' 
3, 123, '2014-02-26 07:22:33' 
4, 456, '2014-02-26 07:33:44' 

你只要把快速插入到這個表user_ID的,現在();

腳本處理此表中的所有行。 例如如何爲用戶123和更新簡檔更新後:

UPDATE user_forum_profile SET CountComments= CountComments +3 WHERE user_id= 123 

然後從該聚集的表中刪除所有處理的數據。

優勢:

  • 也許少user_forum_profile更新,因爲只有1所有新的崗位數

,您可以通過服務器的cron腳本每天處理此表倍。 如果你在午夜處理此或更高版本和更新CountDiscussions和CountComments

也許這可以使一個最低的服務器的負載,但是...... 缺點: 職位數量達不到最新的每一秒,只是每天(或者當你運行這個腳本時)。此外,您可以在每小時或每15分鐘等運行此腳本...

+0

這將是個好主意:) 但我喜歡實時更新數據....我想用第一種方法...因爲在主頁上我需要顯示最新的論壇主題總數答案,當我使用第二種方法時,它會產生很多查詢 –

相關問題