春节后的第一篇文章,咱们来一些不一样的干货!对于大型游戏来讲,合服是经常会用到的,不仅可以节省资源而还可以使不同服的玩家集合在一起来增强游戏的趣味性。
合服原理
简单来说,将两个或多个数据库中的合并在在一起,选取主服然后将另一服的数据合并至主服,两个或多个服的玩家一起玩游戏。
合服后表现
一个游戏账号,在不同的入口登录后也可以使用不同的区服进行游戏,可以和不同区服的玩家PK。
合服流程
step1:将要合服的服务器关闭(选取的主服和主服以外的数据)
Step2:数据库分析(我们需要在最开始对数据库的表结构进行分析,判断哪些表结构需要合服,哪些不需要合服。一般原则就是一些配置表、日志表是不需要合并的)
Step3:清理数据(无用数据、合服时无需用到的日志记录;在一款游戏中是定会存在无效帐号的,所以在合服过程中首先过滤筛选掉死号;过滤筛选时遵循一定的规则,比如说玩家帐号等级、VIP等级、最近登录时间等条件)
Step4:对重要数据进行备份(必须将主服以外的数据进行备份,主服为首次合服则也需要进行备份;备份的目的就是防止在合服的过程中由于操作的失误而出现数据丢失的现象;对于一些占用内存非常大、体积很大的日志表可以不备份)
Step5:完成数据检查(检查原则:主服的最大id与其他服的最大id是一致的;需要对合并表的主键进行检查,判断前缀是否是正确的;还要查看合服的数据是否有冲突)
Step6:数据更新(数据更新过程中防止出现数据重名的情况,一般将区服的编号作为备注进行数据更新;主要是针对主键冲突的数据进行修正的;修复冲突之前要对表结构进行分析,不能出现外键关联遗漏的问题)
Step7:导入导出(将主服以外服导出数据导入到主服中完成数据导入)
合服操作
1)外网导取数据库;
2)内网建立新的数据库;
3)将数据导入数据库(准备两个以上要合的数据库);
4)操作合服脚本(下载安装包--进入merge argetconf目录--打开Application.properties--根据主服和从服修改IP、id、name、password--r 点击start.bat程序进行合服--等待出现success则合服成功);
5)合服结束后需要重新启动服务器;
合服过程测试点
在合服过程中,我能需要做的测试工作也有很多。具体的测试思路如下图所示
在合服过程中可能出现的问题
1)两个服的表结构不一致: 合服时表总是导不进去,会有主键重复的提示信息;原因是服1的主键是21位,服2的主键是22位,在导入数据时会自动识别到服2的前21位忽略第22数而出现主键重复的情况。
2)部分动态生成的数据,无法批量导入;原因是动态生成的数据类型不能通过批量导入,是需要游戏逻辑才能补全,所以动态的数据是不参与合并的。
3)合服后出现装备丢失的情况:原因可能是因为主键丢失,可通过手动或者SQL对数据库进行修改,不用重启服务器。
4)合服后功能不能正常使用:打开功能时显示系统异常、功能不能正常使用、数据不能正常显示;原因是没有将功能表进行合并(解决:关服重新合并)或者合并之后主键出现错误(不关服手动改表或者SQL改表)。
注意
游戏初次合服时要对文档中给出的数据清除内容进行测试,还要对游戏功能进行测试检查,测试重点功能是否正常使用、显示是否正常、功能进度保存是否正常,游戏中具体数据不需要作为合服的测试点。