游戏服务器开发:简单排行榜功能问题,基于mysql

2 篇文章 0 订阅
2 篇文章 0 订阅

最近在找工作,本人还是希望回游戏行业的,投了半天抓到一个面试机会,面试题是一个游戏排行榜功能,其中只需要客户端id,分数这两个字段。
我看到这个题的时候心想简单的一批,就没细想可能会出现的一些问题, 查了一下django的文档就开始一把梭,建立一张表,客户端id,分数两个字段。
查询排行榜指定的位次段:

select id,score from user_score order by score desc limit %v1%,%v2%;

当然,当时是用django的orm写的

models.score.objects.all().order_by('-score')[rank_begin:rank_end]

问题来了:

问:如何获取到客户端本身的位次?
当时没用脑子的我想的是取出所有数据,排序后去遍历获得客户端的index

问:当数据量非常大的时候,怎么办?
答:建索引

然后问了一些mysql相关的知识

果不其然被拒了!!

现在想想,在查询客户端本身的位次时,我是有客户端的分数的,即我可以通过这个分数,来查出来比当前分数大的有多少客户端,再+1,就是客户端的排名了。

select count(*) from user_score where score >= %score%;

后来去github上找了找,发现其实好多的实现方式都是基于redis的有序列表来实现的,怪不得在面试的时候一直在问我redis的东西。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值