游戏服务器中实时显示的全服排名是怎么实现的?

shiter
人工智能领域优质创作者
博客专家认证
2018-05-15 11:11:58
加精
游戏服务器中实时显示的全服排名是怎么实现的?

排名算的是综合攻击力,血条,防御,人气,4个值加起来,100w-10w人同时在线

请问用什么数据结构和算法实现,求各位大神前辈指点

zookeeper这种东西能行吗
...全文
5796 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
yiyefangzhou24 2018-06-07
  • 打赏
  • 举报
回复
个人觉得这明显的是后端数据库的事情,不是c端程序本身的事情,难道有什么玄机?????
smwhotjay 2018-06-06
  • 打赏
  • 举报
回复
以前面试广州某个游戏公司,问的就是这个问题
smwhotjay 2018-06-06
  • 打赏
  • 举报
回复
一个ranking server 定时排序即可。比如每个服的ranking server 定时10分钟排个排行,写入本服的排行表。这样全服的,只需要把所有服的排行查询排序就是全服排名了
CyberLogix 2018-06-05
  • 打赏
  • 举报
回复
设计一个排名算法,实时更新,放到内存数据库中,比如Redis等
ntjixiaofei 2018-06-03
  • 打赏
  • 举报
回复
有数据库查询吧
热血打工人 2018-05-24
  • 打赏
  • 举报
回复
查询数据库时使用count
  • 打赏
  • 举报
回复
时时其实不需要 一小时一次统数据库查一次就可以了
CalvinR 2018-05-22
  • 打赏
  • 举报
回复
坐等大神回复
半雨微凉丶 2018-05-22
  • 打赏
  • 举报
回复
redis+monggo+mqtt
yiyefangzhou24 2018-05-18
  • 打赏
  • 举报
回复
直接用数据库吧?100万的数据连mysql都不会觉得吃力,定期取最大数据后存储,游戏中只做查询就行了
bright47 2018-05-18
  • 打赏
  • 举报
回复
看看..........
风吹腚腚凉 2018-05-17
  • 打赏
  • 举报
回复
引用 楼主 wangyaninglm 的回复:
游戏服务器中实时显示的全服排名是怎么实现的? 排名算的是综合攻击力,血条,防御,人气,4个值加起来,100w-10w人同时在线 请问用什么数据结构和算法实现,求各位大神前辈指点 zookeeper这种东西能行吗
每过一段时间,同步一下缓存就好了。 这个地方肯定要用缓存的
狐狸小十 2018-05-17
  • 打赏
  • 举报
回复
100万峰值,注册可能几千万甚至过亿了吧 没接触过这么大的数,以前听人说过亿只能用桶排序,就是楼上说的,没验证过 给大佬递茶
zilaishuichina 2018-05-17
  • 打赏
  • 举报
回复
1、全服排名 也有不同的情况的,看是不是每个人都要知道自己的具体名次 2、全服排名 跟 同时在线人数没有什么必然的联系,应该是跟数据库里面总的玩家记录数有关 比如有的游戏是只有top100才显示具体名次,100名之后的只提示 您超过了 XX% 的玩家 如果所有人都要给具体名次的话,就比较蛋疼一点,做一个 玩家id <-> 排名 的双向映射表,开服load一遍数据库,把这个表初始化好,然后当要排名的那个数值变动的时候, 增加则向前搜超过了哪些人,逐个交换名次;减少则向后搜落后于哪些人,逐个交换名次 另外一种替代方案是,比如我有100W玩家,我就固定有100w个名次,刚开服一开始都是机器人,就是让玩家自己pvp去打排名(而不是服务器主动排名),你能赢了前一个人,你就和前一个人的名次交换,你能直接赢第一名,你就和第一名进行名次交换,被交换下去的玩家,自己去重新打排名 如果不是每个玩家都要给具体名次,比如只需要top100,就好办一点,前100个人,就事实排就好, 新来一个人,就判断能不能进前100,能进,再计算具体名次; 不能进,就是100名之后的。 然后对于所有100名之后的玩家,按数值区间建立若干个桶,比如我们预计要排名的那一个数据的最大值能到1W。我建立0-10, 10-100,100-1000, 1000-2000, 2000-5000, 5000-10000 这样6个桶,每个桶里面记录分值在这个桶对应的区间内,有多少个玩家。 比如 0-10, 10人 10-100,20人 100-1000,30人 1000-2000, 40人 2000-5000, 50人 5000-10000, 60人 那么如果一个玩家 是 1234分,那么他的排名就超过了 (10 + 20 + 30)/ (10 + 20 + 30 + 40 + 50 + 60)这个百分比的玩家(所以桶分的越细,后面的排名越精确)
赵4老师 2018-05-16
  • 打赏
  • 举报
回复
百度搜相关关键字。
  • 打赏
  • 举报
回复
才100万记录,用数据库就可以了,建立一个排名视图(view)
paschen 版主 2018-05-15
  • 打赏
  • 举报
回复

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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