解决百万用户量积分排名

前情提要:利用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名:
这个比较简单,存数据库或内存都可以

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • @synthesize和@dynamic分别有什么作用?@property有两个对应的词,一个是 @synthes...
    笔笔请求阅读 3,511评论 0 1
  • 【Aipm引导页】 https://58976235.wodemo.net/down/20170514/44034...
    Mr_洛寒阅读 7,722评论 3 5
  • 它,蛊惑众生的根源 源于它的扑朔迷离 它,惶惶人心的背后 来自它看似轻薄的黑纱 死,不可怕 亡,并不可惧 它来的疾...
    MINGAINI阅读 1,040评论 0 0
  • 今天情人节,一个充斥着爱与鲜花,洋溢着亲吻和情话的日子。 但没有了情人,这样的日子怎样过都毫无意义,顶多是看到别人...
    暖先森阅读 20,352评论 5 26