游戏排行榜实现

_浪子 2014-09-30 11:39:46
假设一个游戏有日、周、月、top100榜。我现在要根据玩家的战力进行排行

日就是每小时更新一次,周月都是周期更新一次
我使用定时器周期性(每小时,每周,每月)定时压入数据,就是对他们的当前的战力进行还有id等等一些数据进行压入
比如用户点击月榜时。我就返回表中的上个月榜数据给他,并且对月榜中所有的玩家进行战力排行。然后我返回 排在前100的玩家对象回去,单时同时我也要返回当前玩家所在排行榜排第几行。

用户每次点击时候,都会返回1W+数据,然后我再根据用户当前id进行1W+数据遍历,找到他排第几行。然后再截取前100和用户id的排行回去,这样效率很低。应该如何改变?

TOP100比较麻烦。因为实时数据,最新数据,所以不存入表中,每次点击我都要从多张表中查找数据,并且封装入排行榜对象。然后再对他进行遍历查找出当前玩家所在排行,再截取前100和当前玩家排行返回去?怎么优化呢?
...全文
705 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
AndersZhuo123 2014-10-13
  • 打赏
  • 举报
回复
引用 7 楼 wojiaolinaaa 的回复:
[quote=引用 4 楼 Anders_Zhuo 的回复:] 关于游戏排行,我们之前的方式也是定时跑一个小程序来更新 不过现在改用redis Sorted Set, 能达到实时排行的效果,而且性能也不慢 至于redis的负载,我们游戏差不多几w人的在线,十几w的活跃用户吧,没有任何的压力
能说下你们的大体逻辑吗?redis的 如何保证实时排行等[/quote] 你看一下redis的Sorted Set, 怎么使用就知道怎么实时排行了
_浪子 2014-10-13
  • 打赏
  • 举报
回复
引用 5 楼 Onelee 的回复:
1楼的和4楼的方案我们都在综合使用中, 都可以!!
我使用memcached可以吗?
_浪子 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 Anders_Zhuo 的回复:
关于游戏排行,我们之前的方式也是定时跑一个小程序来更新 不过现在改用redis Sorted Set, 能达到实时排行的效果,而且性能也不慢 至于redis的负载,我们游戏差不多几w人的在线,十几w的活跃用户吧,没有任何的压力
能说下你们的大体逻辑吗?redis的 如何保证实时排行等
_浪子 2014-10-13
  • 打赏
  • 举报
回复
嗯。真心谢谢各位了。
Onelee 2014-10-11
  • 打赏
  • 举报
回复
1楼的和4楼的方案我们都在综合使用中, 都可以!!
AndersZhuo123 2014-10-09
  • 打赏
  • 举报
回复
关于游戏排行,我们之前的方式也是定时跑一个小程序来更新 不过现在改用redis Sorted Set, 能达到实时排行的效果,而且性能也不慢 至于redis的负载,我们游戏差不多几w人的在线,十几w的活跃用户吧,没有任何的压力
MiceRice 2014-10-08
  • 打赏
  • 举报
回复
引用 1 楼 chen_ya_ping 的回复:
定时器,查询数据,对于排行榜的数据插入到一个新的表中,以后查询就从这个新表中拿数据
应该用1楼方案。 这种排行榜,后台用定时任务去定期生成,生成后的数据进行保存;以后查询都直接查这些结果,就不用每次排序计算啥的了。 保存方式一般有三种: 1、数据库直接存储明细数据,比如某周Top100,数据库中就是100行记录; 2、数据库直接存信息,比如某周Top100,数据库中就是一行记录,一个大文本字段,存放JSON或XML结果; 3、磁盘文件直接存信息,比如某周Top100,磁盘文件直接就是一个文件,里面可以是JSON也可以直接就是HTML。
yanghongjy 2014-10-03
  • 打赏
  • 举报
回复
1. 1楼说的查询数据放入新表,用定时器,日,周,月都可以解决,这个表只负责查询。 2. 用户每次点击时候,都会返回1W+数据, 这个应该不会这样,你只查询这个表,每次 limit 100 就行了,返回100行。 3. select index 可以取到他在哪行,不需要遍历。两条 sql 返回数据 101 行。 4. TOP100比较麻烦,你不去更新数据的表取数据,就在这个表取就行了,老去那里去影响性能。
chen_ya_ping 2014-09-30
  • 打赏
  • 举报
回复
定时器,查询数据,对于排行榜的数据插入到一个新的表中,以后查询就从这个新表中拿数据

25,980

社区成员

发帖
与我相关
我的任务
社区描述
高性能WEB开发
社区管理员
  • 高性能WEB开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧