美文网首页
解决百万用户量积分排名

解决百万用户量积分排名

作者: RainingMan | 来源:发表于2017-07-06 22:26 被阅读0次

    前情提要:利用redis的zset数据类型可以解决少量用户实时积分排行的问题,但是用户量达到百万级后,内存会撑不住。

    实时排名:
    如果积分最大值不高,比如说最大5000积分左右,那么可以用桶排序,占用的内存不算大。
    一个积分代表一个桶,每个桶里面装了一个计数的数字。比如(score-10000->10这种k-v键值对,表示10000积分的有10个人)

    如果说积分最大值比较高,比如说一百万,桶排序也会很占内存。那么照这个思路,可以存数据库,0-50000一个表,分20个表,用聚合函数SUM()协助统计每个表的人数,以此统计排名。

    桶排序参考:http://novoland.github.io/%E7%AE%97%E6%B3%95/2014/07/26/%E6%A1%B6%E6%8E%92%E5%BA%8F%E5%9C%A8%E6%8E%92%E8%A1%8C%E6%A6%9C%E9%97%AE%E9%A2%98%E4%B8%AD%E7%9A%84%E5%BA%94%E7%94%A8.html

    http://www.cnblogs.com/skywang12345/p/3602737.html

    非实时排名:
    若非实时的话,可以每天跑一次数据库,做一张积分排名表。每个分数对应一个排名。

    非实时且只需前10000名:
    这个比较简单,存数据库或内存都可以

    相关文章

      网友评论

          本文标题:解决百万用户量积分排名

          本文链接:https://www.haomeiwen.com/subject/qdohhxtx.html