解决百万用户量积分排名
2017-07-06 本文已影响0人
RainingMan
前情提要:利用redis的zset数据类型可以解决少量用户实时积分排行的问题,但是用户量达到百万级后,内存会撑不住。
实时排名:
如果积分最大值不高,比如说最大5000积分左右,那么可以用桶排序,占用的内存不算大。
一个积分代表一个桶,每个桶里面装了一个计数的数字。比如(score-10000->10这种k-v键值对,表示10000积分的有10个人)
如果说积分最大值比较高,比如说一百万,桶排序也会很占内存。那么照这个思路,可以存数据库,0-50000一个表,分20个表,用聚合函数SUM()协助统计每个表的人数,以此统计排名。
http://www.cnblogs.com/skywang12345/p/3602737.html
非实时排名:
若非实时的话,可以每天跑一次数据库,做一张积分排名表。每个分数对应一个排名。
非实时且只需前10000名:
这个比较简单,存数据库或内存都可以