周排行榜如何实现可查看历史数据的功能

说一下背景和需求

一个小游戏项目,用户玩游戏会获得积分,排行榜是用玩家单局最高游戏积分进行排名的。每周结算一次,需要实现的功能是玩家可以看到他在每一周的排名。比如第一周他排名105,第二周排名57.
注:玩家的分数是不清零的,比如第一周玩家A最高分是500,第二周没刷新记录的话,那么玩家A的最高分还是500,并且还是用500进行排名

目前的方案

目前我采用的方法是分表存储每一周的排名,然后写了一个结算的脚本。在每周日的零点执行结算。(结算脚本就是把本周排行榜玩家的分数迁移复制到下周的排行榜表里,如果玩家最大分数变化了会自动更新排行榜表里的分数)

我的疑问

采用分表感觉不是很好的方案,因为周期越多,意味着表的数量也越多。项目运行个一年就得四五十张表(还只是排行榜)所以特别想知道有没有好的方案,大家都是怎么做的呢?如果能提供一些思路的话,不胜感激!!!

补充

第一次提问,虽然已经看过了《提问的智慧》,但还是可能会有疏忽的地方,如果您愿意回答我的问题,并且需要我提供些什么。请留言,我看到会第一时间回复。

陈先生
最佳答案

大致就是一个可查看历史的消费排行榜的功能。这点东西就分库分表也太看不起 MySQL 了。 按照最简单的设计,用户的消费额是一个字段,那也就是说 一共需要两张表

  1. 用户表, 主要包含 用户id ,当前积分数
  2. 记录表,主要包含 用户id ,结算期数 ,排行。

排序的问题不要去算,直接丢进redis 做一个 有序列表。 去redis 里面拿出来后去你用户表里面查不就知道了, 有一个注意事项就是当用户的积分变动的时候记得更新 redis。 每周去算一下排名,更新一下redis ,写一下当前的记录。就连论坛里面的 @MArtian 都能做出来的东西。

大致看了下 没发现什么问题。你可以先按照这个方式试试

2周前 评论
bneglect (楼主) 2周前
zhaojjiang 2周前
MArtian 2周前
陈先生 (作者) 2周前
MArtian 2周前
wxf666 1周前
讨论数量: 9
陈先生

大致就是一个可查看历史的消费排行榜的功能。这点东西就分库分表也太看不起 MySQL 了。 按照最简单的设计,用户的消费额是一个字段,那也就是说 一共需要两张表

  1. 用户表, 主要包含 用户id ,当前积分数
  2. 记录表,主要包含 用户id ,结算期数 ,排行。

排序的问题不要去算,直接丢进redis 做一个 有序列表。 去redis 里面拿出来后去你用户表里面查不就知道了, 有一个注意事项就是当用户的积分变动的时候记得更新 redis。 每周去算一下排名,更新一下redis ,写一下当前的记录。就连论坛里面的 @MArtian 都能做出来的东西。

大致看了下 没发现什么问题。你可以先按照这个方式试试

2周前 评论
bneglect (楼主) 2周前
zhaojjiang 2周前
MArtian 2周前
陈先生 (作者) 2周前
MArtian 2周前
wxf666 1周前

一直请求数据库,不会影响效率吗?用redis做排行榜不好吗

1周前 评论
bneglect (楼主) 1周前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!