统计用户总讨论次数的最佳方法是什么?

问题描述:

我正在创建论坛。我需要统计每个用户的全部讨论。所以,我正在考虑两种方法使用如下统计用户总讨论次数的最佳方法是什么?

假设表calleduser_forum_profile

存在以下字段

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

1方法 每次用户创建新的讨论或评论其他讨论更新相关总计数user_forum_profile

优点

总的讨论很容易抢,因为CountDiscussions价值将等于总讨论

缺点

需要更新,每次当用户创建新的讨论或添加评论

2的方法

假设表格称为讨论

已存在称为用户ID的字段。当计算总讨论,使用计数(用户ID)查询找到全部讨论

所以我的问题是哪种方法是最好的方法?哪种方法使用更少的服务器资源

+0

第2个是正常形式。触发器可以更好地实现第一个目标。我会和第二个一起去。 –

+0

我想第一个会更好,更不用说你可以缓存查询,所以它不会每次都重新运行。 – Prix

+0

第二是更好,我相信,没有必要每次都做额外的工作,直到你需要读数。有道理:) – avisheks

从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

这将是个好主意:) 但我喜欢实时更新数据....我想用第一种方法...因为在主页上我需要显示最新的论坛主题总数答案,当我使用第二种方法时,它会产生很多查询 –