我正在尝试编写一个插件,用于bbPress(开源论坛软件),其工作原理类似于Hacker News (http://news.ycombinator.com/)。
具体而言,我想使用以下算法对论坛主题(bbPress称之为“话题”)的顺序进行排序:
这个还有待商议,但我认为会有另一个表格来存储用户的个人投票,这样我们就可以知道某个用户是否已经投票。另一个表格将存储每个主题的当前投票总数。也许在该表格中会有另一个字段来存储最新计算的sort_value?
为了保证100%的准确性,每次新投票后都应更新sort_value。但是,这会给数据库服务器增加太多负载,尤其是如果我们试图更新所有主题的话。如果必要,我们可以通过仅计算最近X个主题的sort_value来限制数据集。我们还可以通过定期更新sort_value(例如,通过cron作业每5分钟更新一次)来降低负载。
这些快捷方式可能使负载可接受,但我更喜欢能够扩展得更好的更优雅的解决方案。
你会如何构建它? :-)
具体而言,我想使用以下算法对论坛主题(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分钟更新一次)来降低负载。
这些快捷方式可能使负载可接受,但我更喜欢能够扩展得更好的更优雅的解决方案。
你会如何构建它? :-)