bob*_*byh 6 mysql database database-design
我正在尝试编写一个插件来bbPress(开源论坛软件),它的工作方式类似于Hacker News(http://news.ycombinator.com/).
具体来说,我想使用以下算法对论坛 - 线程(bbPress称之为"主题")的顺序进行排序:
sort_value = (p - 1) / (t + 2)^1.5
where p = total votes for each topic from users
t = time since submission of each topic in hours
我希望能够使用MySQL通过这个计算的sort_value对主题进行排序.
topics表中的相关字段如下所示:
topic_id            bigint(20)
topic_start_time    datetime
这是悬而未决,但我认为将有另一个表存储用户的个人投票,因此我们将能够知道用户是否已经投票.另一个表格将存储每个主题的当前投票总数.也许该表中会有另一个字段存储最新计算的sort_Value?
为了100%准确,每次新投票后都应更新sort_value .但是,这会给数据库服务器增加太多负载,特别是如果我们尝试更新所有主题.如果必须,我们可以通过仅计算最后X#个主题的sort_value来限制数据集.我们还可以通过仅定期更新sort_value来限制负载(例如,通过cron作业每5分钟更新一次).
这些快捷方式可能会使负载可以接受,但我更喜欢更优雅的解决方案.
你会如何构建这个?:-)
好吧,这是我的想法。我将首先创建一个old_table包含 X 行带有 sort_value 字段的主题。
我想避免在单个表上出现大量 UPDATE 语句,因此我会定期用新计算的表替换旧表。据我所知,MySQL 不支持“替换表”语法,因此每隔 Y 分钟,我将通过 cron 创建该表的更新版本,名为new_sort_value. 然后我将执行以下命令序列:
old_tablenew_table为old_table这看起来是一个有效的方法吗?