Hack News:
Reddit:
从数学角度两者相差不大,但是从实际开发角度,第二种(reddit)模型要远远优于第一种模型。
第一种算法的分数是一个动态值,如果想排序有两种途径:
select * from problems order by f(current_time, othor_value) desc limit 20;
很显然,上面的排序无法利用索引。
还有一种办法是每隔一段时间去计算一次所有条目的score值,这样是可以利用索引排序的,但是排名不够平滑。
Reddit的算法就完美解决了这个问题,无论什么时间,score都是一个定植,只需要在相关因素有变动的时候去更新一下对应的score值。既可以利用索引,排序又平滑,并且简单。
select * from problems order by rank desc limit 20;
转载于:https://blog.51cto.com/5941840/1372145