mysql 排行榜怎么实现?

需要实现文章排行榜的效果。
比如有张文章表,里面记录了每篇文章的阅读量,评论数,收藏数。我想基于某种算法,通过阅读量,评论数,收藏数,以及其他关联表所对应的某些数据,最后可以得出一个权重,根据这个权重,最后确定排名。

现在的问题就是:因为阅读量,评论数,收藏数都是会变化的,难道需要我用数据库先把每篇文章都查询出来,然后给每篇文章都计算一下权重,最后得出排行顺序?那么如果文章数量非常多,效率不是非常低?

阅读 4.8k
3 个回答
  1. 起新服务在后端进行离线计算;

  2. 分页获取文章的各个属性(点击量,评论数,收藏数);

  3. 设置打分模型,例如文章评分score = 点击量0.2 + 评论数1 + 收藏数+1.5;

  4. 分页获取计算完后永远只保留score最大前n条文章记录;

  5. 更新结果到cache中;

  6. 定时执行该任务;

计算文章评分用消息队列;
文章排名用redis中的sorted set

使用redis的有序集合,可以以文章id做键,最后计算的权重作为分值,将数据写入有序集合中,有序集合的长度保持一定,意思是写入有序集合,排序,然后剪除排名很低的元素,先有个初始的排行榜,后期再定时更新排行榜的redis数据即可,排行榜也不会需要太多的条目数据

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题