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

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

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

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

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

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

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

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

原文地址:https://www.cnblogs.com/xcw0754/p/12343694.html

时间: 2024-08-09 11:07:57

游戏排行榜系统设计 -- 有感的相关文章

游戏排行榜的一种实现

游戏排行榜的一种实现 我是游戏公司小猿一只,做游戏服务器开发.最近公司准备招新的 C++ 程序员,我一般都会问到一个常见的功能,一万人排行榜怎么实现. 得到的答案很多,比如 “1.直接从数据库中读取:2.用 hash 表:3.用一个环形数组:4.这个问题我要仔细考虑一下.” 对于这些答案我是不满意的,因为从事游戏逻辑开发的人,排行榜功能是一个基础功能,出于“优秀”C++ 程序员的本能,应该细想怎样实现之.对这个功能如果仅仅停留在表面,心理大概推测用什么数据结构,在关键性问题上支支吾吾,我可能不大

放松一下】北美小游戏排行榜TOP10——“点击英雄”

大家平时工作都比较忙,在这里推荐一款游戏让大家放松一下,让你体验到指数爆炸般挣钱的快感. 北美小游戏排行榜TOP10--"点击英雄" 简要说明: 游戏可以挂机,关闭电脑,游戏也会自动赚钱(游戏金币) 操作简单,鼠标点击怪物,升级即可 全球点到爆根本停不下来! 游戏地址:http://bbs.phpthinking.com/forum.php?mod=viewthread&tid=135 游戏截图: 快来一起玩到爆吧!

基于Laya游戏引擎实现微信小游戏排行榜

我们都知道,微信小游戏和小程序目前风头十足,很多公司都逐渐增加了相关业务线来迅速推广自己的产品和抢占用户群.说到微信小游戏,就不得不提到排行榜这个功能,就目前游戏行业,似乎都离不开排行榜这个重要功能,用户很大一部分留存都是依仗这个看似不起眼的模块.那么,微信小游戏中具体该如何借助laya引擎实现排行榜这个功能呢?我们先来看一下最终的效果图: 按照微信官方的说法,如果我们要使用微信官方提供的好友关系链的数据,我们就不能直接在项目中绘制排行榜,我们需要借助于开放域来绘制排行榜: ? 如果想要展示通过

【Redis+PHP】利用redis的zset实现游戏排行榜功能

1.需求:①完成游戏排行榜实时刷新 ②查看当前用户的排名.积分 2.参考文章:https://www.cnblogs.com/clubs/p/11691580.html (博主强推) https://www.cnblogs.com/anny-1980/p/4583806.html  (Redis的ZSET有序集合常用语法) 3.实现原理:不使用MySQL进行存储,改用redis的zset实现,单机支持百万级并发,数据热更新 4.附录我自己封装好的一个laravel5的Redis排行榜类: <?p

游戏排行榜算法设计实现比较

以前在音乐做过一些实时投票,积分排名:单曲.专辑等排行榜:游戏中也有类似的战斗力排行:SNS的游戏又有好友排行等,对于此类的排行算法在此做个总结. 需求背景: 查看前top N的排名用户 查看自己的排名 用户积分变更后,排名及时更新 方案一: 利用MySQL来实现,存放一张用户积分表user_score,结构如下: 取前top N,自己的排名都可以通过简单的sql语句搞定. 算法简单,利用sql的功能,不需要其他复杂逻辑,对于数据量比较少.性能要求不高,可以使用.但是对于海量数据,性能是无法接受

google play SDK 游戏排行榜的接入分享

1.第一步 添加配置文件  <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@strin

ARPG游戏技能系统设计

ARPG游戏的技能的前端表现, 主要指的是人物动作和特效表现, 从普遍意义上讲,大致可以分为三个阶段:起手.飞行.碰撞(爆炸). [特效可见性判断] 1.[attacker & victim] 在observer在的视野内, 特效可见. 2.victim在observer的视野内, 可以接收到victim的受攻击协议,但是因为attacker不在视野内, 所以无法接收到技能释放协议, 因此特效不可见. 3.attacker在observer的视野内, 虽然victim不在视野内, 依然可以接收到

豌豆荚游戏排行榜爬虫源码

var configs = { domains: ["apps.wandoujia.com"], scanUrls: ["http://apps.wandoujia.com/api/v1/apps?type=weeklytopgame&max=12&start=0"], contentUrlRegexes: ["http://www\\.wandoujia\\.com/apps/.*"], helperUrlRegexes: [&

用跳表实现游戏排行榜

排行榜有很多种设计方案: 比如数组,排序树,Redis的sort set等,还有这里说的跳表. 先科普一下跳表以及分析一下跳表优劣: 跳表:在普通链表中,给一些节点增加额外的指针,使得这些节点能够一次跨越更多的中间节点,提高了效率. 优点:相比普通链表,由于跳跃的特性,可以节省便利次数,时间复杂度上是O(logN).相比平衡二叉树,在插入和删除操作上,不需要再进行树的平衡等操作. 缺点:有额外指针的空间消耗,在数据量超大的情况下,性能还是会下降. 跳表结构如下: 每个框框表示一个Node,里面存