游戏排行榜系统设计 -- 有感

随心而作 2020-02-21

需求:
1、玩家在点击穿/脱装备需要重新计算战斗力
2、玩家可以查看自己的战斗力及排名
3、战斗力前100名的玩家名称以及战斗力大小随时可以查询,且准确性100%
4、为了准确性,任意两个玩家同时查看自己的战斗力时,战斗力高的玩家排名必须高
5、玩家数量庞大,可能达到百万级别

需求解析:
1、战斗力就是个优先级
2、优先级经常会变化
3、每个玩家的排名都要可查
4、前100名的查询频率很高
5、排名不能太离谱,会很容易穿帮
6、数据量较大

一个节点的信息应该至少包含:
1、玩家名称
2、玩家ID(唯一)
2、战斗力

数据结构初选:
1、平衡二叉树
2、跳跃表
3、红黑树

对于数据结构的选型,都是为了维护节点有序的,这样可以轻易计算出排名,也要能保证插/删节点的效率。

如果再增加一点难度,总玩家数量达到百亿级别,其中的在线用户是百万级别。这时就需要区分冷热数据了,对于那些离线的玩家,是没有查询需求的,除了前100名。

这样的话,前100名的玩家数据要放在内存中,在线玩家的数据也要放在内存中,离线玩家的数据要存盘。待我再好好思考思考。

相关推荐