我正在创建讨论论坛。在哪里我需要计算每个用户的总讨论。所以我在考虑使用两种方法
假设表格called
user_forum_profile
有以下字段
1方法
每次用户创建新讨论或评论其他讨论时,都会更新user_forum_profile
表
优势
总讨论可以轻松获取,因为CountDiscussions
值将等于总讨论
缺点
每次用户创建新讨论或添加评论时都需要更新
2方法
假设表讨论
已提交称为用户ID的文件。在计算总讨论时,使用count(用户ID)查询来查找总讨论
所以我的问题是哪种方法是最好的方法?哪种方法使用较少的服务器资源
答案 0 :(得分: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和now();
快速插入此表脚本处理此表中的所有行。 例如,如何更新123用户和更新配置文件的帖子:
UPDATE user_forum_profile SET CountComments= CountComments +3 WHERE user_id= 123
然后从该聚合表中删除所有已处理的数据。
<强>优势:强>
您可以每天通过服务器的cron脚本处理此表。 如果您在午夜或更晚的时候处理此问题并更新CountDiscussions和CountComments
也许这可以降低服务器负载,但...... 的缺点:强> 每隔一秒,每天(或运行此脚本时)的帖子计数不是最新的。此外,您可以每小时或每15分钟运行此脚本等...