电商千万用户 mysql设计_千万用户排名设计

在游戏中有大量的排名需求,比如联盟活跃度排名,战斗场积分排名,互赞排名,游戏金币排名等。本文要讲述是如何设计查看top n的排名,查看某一用户的具体排名。这里的排名参数很简单:一个用户score,score值越大排名越靠前。讲述使用Redis和MySQL两种数据库的存储设计一个满足千万级别用户排名系统。

Redis sorted set 排名

千万用户排名

使用Redis排名非常简单对于百万级别的用户不用耗费太多内存即可实现高效快速的排名,对于用户只有百万的产品,基本设计一个简单的排名基本够用。但大多数游戏不会只有一个排名,都会有多个排名,战斗力排名,消耗金币排名,副本打怪次数都可能成一个榜单,所以使用Redis需要维护大量的排名榜单。现在情景假设你的单节点Redis资源不是很充沛,但允许你搭建Redis集群。上千万用户,仅靠一个sorted set不能够满足你的快速需要。

分桶排名

当用户足够多时,我们需要对排行榜的score依据你的系统用户已有的排名得分数据进行直方图统计,统计出每个score用户数量,然后对score进行合理范围拆分,比如score在0~100万范围,根据直方图统计后 0~10w, 10w~25w, 25w~30w,... ,50w~100w ,10个区间能将一千万用户拆成100w用户一个分桶范围,将对应得分用户分别储存在响应范围的分桶sorted set中。排名时简单缓存每个分桶sorted set的用户总数。对于查询top 排名时,只要查看最高分区桶sorted set排名即可, 对于查询个体用户的排名,需要外加一份用户得分记录存储于MySQL等数据库中,用于查询到单用户的得分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值