随心而作 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名的玩家数据要放在内存中,在线玩家的数据也要放在内存中,离线玩家的数据要存盘。待我再好好思考思考。