如何使用类似于stackoverflow/digg/reddit的推荐系统实现网站?即,用户提交内容,并且网站需要根据项目的受欢迎程度来计算某种"热度".流程如下:
用户提交内容
其他用户查看内容并对其投票(假设90%的用户仅查看内容,10%的用户主动对内容进行投票或投票)
不断提交新内容
如何实现计算提交项目"热度"的算法,最好是实时计算?是否有最佳实践或设计模式?
我会假设算法考虑以下因素:
提交项目时
每次投票时
查看该项目时
例如,获得持续涓涓细流的项目将持续保持某种程度的"热",而在首次提交时获得一票选票的项目将跳到"热点"列表的顶部但随后随着投票而下降停止进来
(我使用的是MySQL + PHP,但我对一般设计模式感兴趣).
您可以使用类似于Reddit算法的东西- 其基本原理是根据发布时间和分数计算帖子的值.关于Reddit算法的简洁之处在于,只需要在帖子得分发生变化时重新计算该值.当您想要显示首页时,您只需根据该分数从数据库中获得前n个帖子.随着时间的推移,分数自然会增加,因此您无需进行任何特殊处理即可从首页中删除项目.