我们的游戏上个星期经历了第一个数据合服。简单说,就是把2个数据库合并在一个数据库,让2个服务器的玩家一起玩。

过程简直是惊心动魄,最终还是安全完成任务。

本文就分享下合服的各种技术细节。

需求说明:

--------------------------

要把2个服务器玩家合并,首先外部对玩家而言是不变的,包括了登陆游戏的URL,游戏中的角色等;但是物理上,确是一台服务器一个数据库。

简单的说,一服的玩家用一服入口登陆,玩一服账号;二服的玩家用二服入口登陆,玩二服账号;

即使我只有1个账号,但是不同入口登陆,依然能使用不同游戏账号进行游戏。

数据库设计

--------------------------

要实现合服,首先表主键必须全部使用代码生成,并用服务器编码作为前缀。

例如我的一服表主键就是 001GMxxxxxxxxxxxxxxxx。 二服就是002GMxxxxxxxxxxxxxxxx。这样合服的时候,就不需要对数据进行预处理了。直接导入。

其次,使用平台用户使用一个账号,登陆不同服,要获得不同账号,因此在游戏的玩家表,要通过服务器编码进行区分,例如:

Usr_Profile

:usercode 主键

:username 平台账号

:servercode 服务器编码

这样,根据传入的username+servercode就知道应该获取什么服务器账号了。

游戏中,玩家通过昵称识别对方,因此合服的时候,必须对昵称进行修正,防止重复,因此所有昵称都要添加后缀。我们最终方案就是添加 .x服 这个后缀。

有了这3方面保证,合服就变得简单了。(简单个屁。。。)

合服流程

--------------------------------

1. 数据库分析准备

做事前都要先准备。因此首先要对数据库表结构进行分析,判断什么表结构需要合服,什么可以忽略。

我们游戏有60多张表,其中仅仅27张表需要合并,其他的都是配置表、日志表,都不需要合并。

2. 数据备份

这部不用说了,首先要对数据库全备份,防止操作失误,导致数据丢失了。一般就在本机MySQL新建一个backup数据库, 然后使用bult insert进行复制,速度很快。当然,备份的时候,对于体积很大的日志表,可以跳过了。

3. 数据删减

这部分很重要,一个网页游戏有接近80%的账号是死号,因此合服的时候必须先过滤掉死号。规则如下:等级小于10级、没有充值、最近登录时间大于30天的,全部清除。

然后,就是上文提到的27张表中,与被淘汰账号相关的数据,也清除。

这个清除量实际上非常大的,我有张数据表接近30W数据,结果一清就清了20W,超级舒服。

4. 数据检测

这部分也很重要,因为我们第二个服务器当时配置错了,没有使用服务器编码作为主键,导致与一服数据存在冲突的可能,因此需要对27张表的主键进行检测,判断前缀是否002,如果不是,就要进行手动修正了。

5. 数据修正

这块主要针对存在主键冲突的数据进行修正,一般用SQL即可,大概耗时30~60分钟,我就用个SQL,例如 update xxx set pk = concat('001',substring(pk,4)),进行数据修复。

当然,修复前,需要对表结构进行分析,不能出现遗漏,特别是外键关联。

6. 数据导出

不要尝试使用代码等方式进行合服,速度太慢了。我使用SQLYog,对所有表进行导出,其中插入配置为Bult Insert,导入速度非常快。

7. 数据导入测试

最终导入的时候,要测试,看看导出的SQL是否存在问题。

8. 导入。

这部完成,合服成功了。

貌似非常简单的步骤,实际上却问题多多。接下来我将说明实际部署中存在的陷阱。

合服 生存大考验

------------------------------

1. 合服的表结构不匹配

当时我合服的时候,发现表总是导不进去,提示主键重复。不可能的啊。。从一个不重复主键的表导入会提示重复?

检查了很久发现,服1的主键是21位,服2的主键是22位,结果导入的时候22位的主键自动省略了最后一位,自然会产生了主键重复。。。

2. SQLYog该死的bug

SQLYog改表结构竟然和实际表结构不对应。我明明修改了char(100),可是数据库一看,还是char(21). 最终只好用命令行修改。。

嗨。关键时候,这些工具总是找麻烦。

3.  SQLYog导入出错竟然没有提示

也是该死的工具问题,最后我使用navicat配合SQLYog进行操作。

4. 部分动态生成的数据,无法批量导入

例如竞技场排名,不允许出现相同排名。所以这块数据需要在玩家登陆的时候自动生成。此类型数据都是动态生成的,无法通过批量修正,都需要通过游戏逻辑进行补全。

因此,合服的时候,这块数据将不参与合并。

合服历险记

------------------------------

说了这么多理论知识,接下来就说说那天我合服的经过。本来在测试机上一切顺利的,不到2个小时就合并了。可是真正操作起来, 却用了8个小时。。。。

开始还顺利,3个多小时就做好了数据备份、删除、修正。可是导入的时候发现总是提示主键冲突,于是不断找原因,1个小时过去,才发现原来表结构不匹配。晕死。

接下来导完数据,4个小时过去了,开服。一运行,玩家就投诉了,说中文乱码、丢失装备、丢失武将。

丢失装备、武将问题,我又花了1个小时检查,原来是潜在部分主键仍然丢失最后1位,导致找不到。这个时候,我不能停机,因此我对比2个数据库有差异的表,生成一堆update的SQL,然后手动操作。可是发现SQL多了,SQLYog会卡死,游戏也会卡死。我只好开了10多个SQLYog,采用并行方法,把SQL拆分成50一组,进行手动操作。。累死了。

对于武将名字乱码,是当时生成SQL文件的时候,编码格式错误了。可是武将数据接近有3W条,不可能进行手动更新了,因此我写了个更新程序,进行后台更新。这块就花了1小时。

终于游戏Exception少了,本来可以歇口气了,结果运营说,玩家充值失败!我检查代码,原来充值接口没有使用servercode去区分玩家账号,又是疏忽。

第二天,运营又投诉说,商会采集资源失败,回去检查,才发现原来漏了对账号中商会主键进行修正,又是疏忽。

小结

----------------------------

本来已经提前预演了2天,没有问题,可是上到战场还是错漏百出。

如果准备过于详细,会导致发展缓慢。如果准备不充分,又会很多问题。这个是个进退两难的情况。最终,我偏向了迅速准备,快速修正的方案。

毕竟,预演的时候找不到的问题,给再多的时间也不一定找到。还不如直接上战场,随机应变。

一个游戏大量合服代表什么_网页游戏 合服技术分享相关推荐

  1. 一个游戏大量合服代表什么_浅谈滚服游戏如果实现一键合服

    背景 近几年的游戏行业中,出现了各种各样的滚服游戏,包括页游,手游,H5游戏等等.滚服游戏和大服游戏的区别在于同时游戏人数,大服游戏是有很多用户在一起玩,甚至几十上百万玩家.而滚服游戏则一般会设计游戏 ...

  2. 一个游戏大量合服代表什么_网游合服对于这个网游意味着什么?

    展开全部 合服意味着这两个服务区人数不多啊62616964757a686964616fe58685e5aeb931333365643662,这个应该谁多知道啊!当一个老区开了太久了玩家流失严重,让继续 ...

  3. 网页游戏怎么修改数据_2014一周网页游戏数据报告(10.6—10.12)

    一.运营平台开服排行 点评:本周一线共开服4149组,共入驻新游22款,其中7款新游目前仍在测试中:9377<MU奇迹来了>:37游戏<权倾天下>,此游为战争策略型的页游由37 ...

  4. 一个游戏大量合服代表什么_[游戏服务器从入门到关门]4.分区分服、连服、合服...

    相信大家都玩过分区分服的游戏,输入账号,选择区服(或是先选择区服,再登录账号,这两个逻辑不同),进入游戏,一刀999. 游戏中的每个区就相当于一个独立世界,每个区的玩家都是隔离开的,大家互不可见,每个 ...

  5. 一个游戏大量合服代表什么_逆水寒大量服务器合并说明游戏凉了吗

    要说今年的现象级游戏,逆水寒一定是当之无愧的,如今这个游戏也是渐渐的再走下坡路也是引发了网友们的热议,那么这个游戏的大量服务器合并是要凉了吗? <逆水寒>可以说是今年下半年最火爆的mmor ...

  6. 大话西游手游有双系统服务器吗,大话西游手游有几个版本_大话西游手游官服和混服怎么区分_玩游戏网...

    <大话西游>手游时间服点卡是互通的吗 点卡有两种,一种是大话西游手游内部的点卡,这种点数是在游戏里面购买道具或者计时用的,分为绑定点和交易点,这种是不能通用的,比如我在时间服有两个号,一个 ...

  7. 紫禁繁花服务器维护,紫禁繁花跨服活动内容一览_紫禁繁花跨服活动详情_玩游戏网...

    <紫禁繁花>11月云闲捕梦活动 <紫禁繁花>11月云闲捕梦活动都有什么内容呢?相关的活动介绍小编已经为大家准备好了.那么接下来,就跟随玩游戏网的小编一起继续往下看,感兴趣的小伙 ...

  8. 不禁网页的浏览器_网页游戏兴衰史:「农场」没有菜,「渣渣辉」不贪玩

    本文经授权转载自 | 国家人文历史 ID |gjrwls 作者 |巴里安 200X年某月某日凌晨2点50,小明悄悄打开房门,蹑手蹑脚地走进存放笔记本电脑的房间,将拔下电源的电脑抱紧在怀里,悄悄地回了房 ...

  9. 复星金服微服务_复星金服以区块链技术解决行业痛点 “中招公信链”项目正式启动...

    近日,中国招标投标公共服务平台在北京召开协同推进"互联网+"招标采购行动技术创新成果推广运用交流会,包括复星金融服务集团(以下简称"复星金服")在内的113家单 ...

最新文章

  1. 台式电脑计算机无法启动 启动修复,Win10启动修复无法修复你的电脑解决方法
  2. 清理系统垃圾文件的常用脚本
  3. weblogic概览下的上下文根配置_weblogic创建域
  4. windows安装pygame(python3.6)_当我试图安装PyGameforPython3.6时,Pip不起作用[过时]
  5. C#学习(6)——LINQ学习
  6. Waymo无人卡车高调重返凤凰城,重点路测高速和主干道,但货运先机已失
  7. C++中#和##的特殊使用
  8. 数据挖掘 姓名用字特点 目录 1. 姓名用字特点 1 2. 男性姓名专用字210个(三字词,双字词都适用) 1 2.1. 男性姓名专用字 双字词适用317个 1 3. 女人姓名用字 2 3.1.
  9. Mysql中类似于oracle中nvl()函数的ifnull()函数
  10. java速成课程_极*Java速成教程 - (5)
  11. 【随笔】我的两年 ACM 回(心)忆(酸)录(路) 【多图预警】
  12. 配置管理基本概念、配置管理计划、配置管理主要活动
  13. 热烈庆祝阳光网驿-行业软件交流平台与北京汉邦极通科技有限公司成功合作
  14. 【分享】GIS领域论坛社区
  15. echarts地图边界数据的实时获取与应用,省市区县多级联动【附最新geoJson文件下载】
  16. 洛谷1146 硬币翻转
  17. vue3.0初体验(例子解读reactive响应式)
  18. 巴西龟饲养日志----七月底巴西龟状况
  19. 如何用python编程能实现输入诗句的上句显示下句_Python爬虫之诗歌接龙
  20. C++年月日时分秒与秒数互相转换

热门文章

  1. “超融合”元年,你准备好了吗?
  2. 阿里巴巴是最好的客户关系管理实践者
  3. vue项目中引入插件
  4. flexslider轮播demo
  5. Antlr4入门(六)实战之JSON
  6. 论文笔记《Learning Deep Correspondence through Prior and Posterior Feature Constancy》
  7. 条令考试小程序辅助器_条令条例app软件-条令条例app考试技巧1.0官方版_骑士下载...
  8. 十八、R语言特征工程实战
  9. Unity SKFramework框架(十九)、POI 兴趣点/信息点
  10. 好几天没女友的音讯了