计算用户总讨论的最佳方法是什么?

时间:2014-02-26 05:41:50

标签: php mysql codeigniter

我正在创建讨论论坛。在哪里我需要计算每个用户的总讨论。所以我在考虑使用两种方法

假设表格called user_forum_profile

有以下字段

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

1方法  每次用户创建新讨论或评论其他讨论时,都会更新user_forum_profile

上的相关总计数

优势

总讨论可以轻松获取,因为CountDiscussions值将等于总讨论

缺点

每次用户创建新讨论或添加评论时都需要更新

2方法

假设表讨论

已提交称为用户ID的文件。在计算总讨论时,使用count(用户ID)查询来查找总讨论

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

1 个答案:

答案 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

然后从该聚合表中删除所有已处理的数据。

<强>优势:

  • 可能是较少的user_forum_profile更新,因为所有新帖子数只有1次

您可以每天通过服务器的cron脚本处理此表。 如果您在午夜或更晚的时候处理此问题并更新CountDiscussions和CountComments

也许这可以降低服务器负载,但...... 的缺点: 每隔一秒,每天(或运行此脚本时)的帖子计数不是最新的。此外,您可以每小时或每15分钟运行此脚本等...