掌桥专利:专业的专利平台
掌桥专利
首页

游戏服务器的合并方法及装置、存储介质、电子装置

文献发布时间:2023-06-19 09:43:16


游戏服务器的合并方法及装置、存储介质、电子装置

技术领域

本发明涉及数据处理技术领域,具体而言,涉及一种游戏服务器的合并方法及装置、存储介质、电子装置。

背景技术

相关技术中,为了游戏运营的需求,需要对多个游戏服务器的数据库进行合服处理,合服是指网络游戏,根据运营需求,将几个服务器的数据库数据,合并到一个服务器上。玩家的所有数据会被转移到新的服务器上,下次登入的时候从服的玩家登入到主服的服务器上进行游戏。主服指其他服务器的数据库数据合并到的目标服务器,最终以主服的服务器作为所有合并过来的服务器的游戏服。从服是指某需要合服的服务器,数据库数据合并到主服。原服指玩家通过选服界面选定的某个服务器,登入后在上面进行游戏,玩家的数据保存在原服上。跨服指一组原服组成的一个服务器组,这个服务器组公共的服务器,不同服务器的玩家可以在跨服组上进行游戏。

相关技术中,主要是通过手动配置数据库代码或者手动创建表格来升级服务器,技术方案一包括:服务器代码中需要增加新的表或者字段,需要写对应的MySQL脚本,生成新的表或者增加字段。版本维护的时候需要手动执行脚本,需确保正确增加了新的表或者字段。技术方案二包括:服务器每次合服的时候,需要整理新版本的服务器增加了哪些表和字段,根据需求确定表或者字段合服的策略,来手写相应的合服脚本。技术方案一的缺陷在于:每次服务器代码中的数据储存中增加新的表或者字段,需要有专人维护MySQL脚本生成工具,并且对于不同分支的版本,需要维护不同的生成脚本。在项目开发过程中,需要频繁与对应开发程序沟通,设计存储表格式,字段类型,大小等。对于项目开发来说,是一个沉重的负担,对于维护人员来说需要小心谨慎的维护生成工具,否则一旦漏了新增的表或者字段,将会导致严重的线上事故。技术方案二的缺陷在于:每次合服前都需要写大量的合服脚本,不能遗漏所有的表和字段,并且需要与所有新增表对应的程序进行沟通,来确保这个新增的表,主库和从库是否需要删除,是否需要保留主库,从库数据是否合并到主库,是否合服后有需要生成新数据的特殊需求等等。繁杂的沟通和开发流程,一旦沟通出现问题,可能会导致合服后数据丢失,覆盖等问题,将会是线上严重的事故。以至于每次合服对于程序,测试,甚至运维将会是沉重的负担。在一些项目中几百个服务器合服时效率极其低下,给服务器维护带来了很大的成本和压力。

针对相关技术中存在的上述问题,目前尚未发现有效的解决方案。

发明内容

本发明实施例提供了一种游戏服务器的合并方法及装置、存储介质、电子装置。

根据本发明的一个实施例,提供了一种游戏服务器的合并方法,包括:获取数据库代码的注解信息,其中,所述数据库代码运行在主游戏服务器和从游戏服务器中,所述注解信息用于指示主游戏数据库和从游戏数据库的合并类型,所述主游戏数据库存储在主游戏服务器中,所述从游戏数据库存储在从游戏服务器中;根据所述注解信息生成目标游戏数据库的中间表结构;在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库。

可选的,获取数据库代码的注解信息包括:遍历数据库代码中的所有类,查找包含实体注解的类文件;读取所述类文件中的注解参数,其中,所述注解参数包括:表标识和字段属性,所述表标识用于指示所述主游戏数据库和所述从游戏数据库的合并类型,所述字段属性用于指示所述主游戏数据库和所述从游戏数据库中对应字段的约束条件。

可选的,根据所述注解信息生成目标游戏数据库的中间表结构包括:解析所述注解信息的第一注解参数,基于所述第一注解参数确定游戏数据库的合并类型为新增表格或更新表格;若合并类型为新增表格,解析所述注解信息的第二注解参数,基于所述第二注解参数获取代码字段的字段约束条件,并使用所述字段约束条件生成第一MySQL语句;若合并类型为更新表格,使用新增字段属性生成第二MySQL语句;基于所述第一MySQL语句或所述第二MySQL语句在目标游戏数据库中生成中间表结构。

可选的,使用字段约束条件生成第一MySQL语句包括:遍历所述数据库代码的类中的所有枚举字段;通过所述注解信息来获取所述枚举字段的约束条件;通过所述约束条件生成第一MySQL语句,其中,所述第一MySQL语句用于在所述目标游戏数据库创建新的表结构。

可选的,所述约束条件包括以下至少之一:字段类型,字段长度,字段是否为索引,字段是否为空,字段默认值,字段的注释信息。

可选的,使用新增字段属性生成第二MySQL语句包括:在所述主游戏数据库查找目标表格的第一字段列表,获取所述目标表格在所述从游戏数据库的第二字段列表;对比所述第一字段列表和所述第二字段列表是否相同;若所述第一字段列表和所述第二字段列表相同,基于所述主游戏数据库和所述从游戏数据库的属性差异生成第二MySQL语句,其中,所述属性差异用于表征以下至少之一:字段是否新增索引、字段长度是否变化、字段类型是否变化;若所述第一字段列表和所述第二字段列表不相同,使用主游戏数据库和所述从游戏数据库的差异字段拼接生成第二MySQL语句,其中,所述第二MySQL语句用于在所述目标游戏数据库中更新所述目标表格的表结构。

可选的,在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库之前,所述方法还包括:判断所述中间表结构中是否存在重复的游戏元素,其中,所述游戏元素包括以下至少之一:游戏玩家标识、游戏帮会标识;若所述中间表结构中存在重复的游戏元素,在所述游戏元素上添加重名标记,并为对应的游戏账号分配改名卡。

可选的,在根据所述注解信息生成目标游戏数据库的中间表结构之前,所述方法还包括:在所述主游戏数据库和从游戏数据库中删除指定账号的游戏数据,其中,所述指定账号用于表征玩家的游戏活跃度低于指定阈值。

根据本发明的另一个实施例,提供了一种游戏服务器的合并装置,包括:获取模块,用于获取数据库代码的注解信息,其中,所述数据库代码运行在主游戏服务器和从游戏服务器中,所述注解信息用于指示主游戏数据库和从游戏数据库的合并类型,所述主游戏数据库存储在主游戏服务器中,所述从游戏数据库存储在从游戏服务器中;生成模块,用于根据所述注解信息生成目标游戏数据库的中间表结构;合并模块,用于在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库。

可选的,所述获取模块包括:查找单元,用于遍历数据库代码中的所有类,查找包含实体注解的类文件;读取单元,用于读取所述类文件中的注解参数,其中,所述注解参数包括:表标识和字段属性,所述表标识用于指示所述主游戏数据库和所述从游戏数据库的合并类型,所述字段属性用于指示所述主游戏数据库和所述从游戏数据库中对应字段的约束条件。

可选的,所述生成模块包括:解析单元,用于解析所述注解信息的第一注解参数,基于所述第一注解参数确定游戏数据库的合并类型为新增表格或更新表格;第一生成单元,用于若合并类型为新增表格,解析所述注解信息的第二注解参数,基于所述第二注解参数获取代码字段的字段约束条件,并使用所述字段约束条件生成第一MySQL语句;若合并类型为更新表格,使用新增字段属性生成第二MySQL语句;第二生成单元,用于基于所述第一MySQL语句或所述第二MySQL语句在目标游戏数据库中生成中间表结构。

可选的,所述第一生成单元包括:遍历子单元,用于遍历所述数据库代码的类中的所有枚举字段;获取子单元,用于通过所述注解信息来获取所述枚举字段的约束条件;第一生成子单元,用于通过所述约束条件生成第一MySQL语句,其中,所述第一MySQL语句用于在所述目标游戏数据库创建新的表结构。

可选的,所述约束条件包括以下至少之一:字段类型,字段长度,字段是否为索引,字段是否为空,字段默认值,字段的注释信息。

可选的,所述第一生成单元包括:获取子单元,用于在所述主游戏数据库查找目标表格的第一字段列表,获取所述目标表格在所述从游戏数据库的第二字段列表;对比子单元,用于对比所述第一字段列表和所述第二字段列表是否相同;第二生成子单元,用于若所述第一字段列表和所述第二字段列表相同,基于所述主游戏数据库和所述从游戏数据库的属性差异生成第二MySQL语句,其中,所述属性差异用于表征以下至少之一:字段是否新增索引、字段长度是否变化、字段类型是否变化;若所述第一字段列表和所述第二字段列表不相同,使用主游戏数据库和所述从游戏数据库的差异字段拼接生成第二MySQL语句,其中,所述第二MySQL语句用于在所述目标游戏数据库中更新所述目标表格的表结构。

可选的,所述装置还包括:判断模块,用于在所述合并模块在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库之前,判断所述中间表结构中是否存在重复的游戏元素,其中,所述游戏元素包括以下至少之一:游戏玩家标识、游戏帮会标识;处理模块,用于若所述中间表结构中存在重复的游戏元素,在所述游戏元素上添加重名标记,并为对应的游戏账号分配改名卡。

可选的,所述装置还包括:删除模块,用于在所述生成模块根据所述注解信息生成目标游戏数据库的中间表结构之前,在所述主游戏数据库和从游戏数据库中删除指定账号的游戏数据,其中,所述指定账号用于表征玩家的游戏活跃度低于指定阈值。

根据本发明的又一个实施例,还提供了一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。

根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。

通过本发明,获取数据库代码的注解信息,根据注解信息生成目标游戏数据库的中间表结构,在目标游戏数据库中根据中间表结构合并从游戏数据库和主游戏数据库,通过使用待合并的从游戏数据库和主游戏数据库的数据库代码的注解信息自动生成目标游戏数据库的中间表结构,可以自动合并游戏服务器,无需开发合服脚本,解决了相关技术中合服效率低的技术问题,减少了对数据库升级和合服的维护工作,避免了因手动升级数据库而导致的线上事故,节省了维护游戏服务器的时间,提高了合服效率。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1是本发明实施例的一种游戏服务器的合并硬件结构框图;

图2是根据本发明实施例的一种游戏服务器的合并方法的流程图;

图3是本发明实施例自动升级数据的流程图;

图4是本发明实施例中数据库自动合服的流程图;

图5是根据本发明实施例的一种游戏服务器的合并装置的结构框图;

图6是本发明实施例的一种电子装置的结构图。

具体实施方式

为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

实施例1

本申请实施例一所提供的方法实施例可以在服务器、计算机或者类似的电子装置中执行。以运行在服务器上为例,图1是本发明实施例的一种游戏服务器的合并硬件结构框图。如图1所示,服务器10可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,可选地,上述服务器还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述服务器的结构造成限定。例如,服务器10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。

存储器104可用于存储服务器程序,例如,应用软件的软件程序以及模块,如本发明实施例中的一种游戏服务器的合并方法对应的服务器程序,处理器102通过运行存储在存储器104内的服务器程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至服务器10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。在本实施例中,处理器104用于响应人机交互指令和游戏策略,控制目标虚拟角色执行指定操作以完成游戏任务。存储器104用于存储电子游戏的程序脚本,配置信息,虚拟角色的属性信息等。

传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。

可选的,输入输出设备108还包括人机交互屏幕用于通过人机交互接口获取人机交互指令;

在本实施例中提供了一种游戏服务器的合并方法,图2是根据本发明实施例的一种游戏服务器的合并方法的流程图,如图2所示,该流程包括如下步骤:

步骤S202,获取数据库代码的注解信息,其中,数据库代码运行在主游戏服务器和从游戏服务器中,注解信息用于指示主游戏数据库和从游戏数据库的合并类型,主游戏数据库存储在主游戏服务器中,从游戏数据库存储在从游戏服务器中;

本实施例的注解信息是在配置数据库代码时添加的,用于在执行服务器合并时,指示主游戏数据库和从游戏数据库的合并类型,生成不同类型的MySQL语句,由于注解信息还可以解释代码中各个实体的属性信息(如类型、长度、是否为索引等),因为可以根据注解信息自动生成数据库的SQL语句。

步骤S204,根据注解信息生成目标游戏数据库的中间表结构;

本实施例的中间表结构是基于注解信息对应的合并类型,以及数据库代码中的字段属性新创建的表结构,或者是在主游戏数据库的表结构的基础上更新得到的表结构;

步骤S206,在目标游戏数据库中根据中间表结构合并从游戏数据库和主游戏数据库;

在合并过程中,从主游戏数据库和从游戏数据库中读取数据中读取表项内容,并基于中间表结构的数据格式填充每个表项的游戏数据,最终将主游戏服务器和从游戏服务器的两个游戏数据库合并为一个游戏数据库,实现自动合服。

通过上述步骤,获取数据库代码的注解信息,根据注解信息生成目标游戏数据库的中间表结构,在目标游戏数据库中根据中间表结构合并从游戏数据库和主游戏数据库,通过使用待合并的从游戏数据库和主游戏数据库的数据库代码的注解信息自动生成目标游戏数据库的中间表结构,可以自动合并游戏服务器,无需开发合服脚本,解决了相关技术中合服效率低的技术问题,减少了对数据库升级和合服的维护工作,避免了因手动升级数据库而导致的线上事故,节省了维护游戏服务器的时间,提高了合服效率。

在本实施例的实施方式中,获取数据库代码的注解信息包括:

S11,遍历数据库代码中的所有类,查找包含实体注解的类文件;

在本实施例的一个实例中,通过数据库代码转换为抽象语法树(Abstract SyntaxTree,AST)来遍历代码中的所有类,包括,解析数据库代码的源代码文件,生成对应的抽象语法树;在本实施例中的抽象语法树可以适用所有类型的编程语言,用于抽象表达源代码语法结构的逻辑关系。然后遍历AST中各个树节点;根据树节点的节点类型在预设模板文档的描述块中填充树节点的节点内容,以生成描述文档,其中,描述文档用于记录数据库代码中各个对象的属性信息和交互关系。

在本实施例中,解析源代码文件,生成对应的AST,包括:读取源代码文件中的字符串;本实施例可以通过递归的方式读取源代码文件中的字符串。识别字符串的字符特征;本实施例的字符特征用于描述字符串的属性信息和关联信息,识别字符串的字符特征可以但不限于为:识别字符串的props属性,props属性用于描述父组件与子组件之间的数据传递方向;识别字符串的字符标识;识别字符串的注释信息;识别字符串的类型;根据字符串和字符特征生成AST。

本实施例可以通过多种方式来生成AST,在本实施例的一个实施方式中,根据字符串和字符特征生成AST包括:基于字符特征生成Token序列,其中,Token序列包括源代码文件中的多个字符串;根据Token序列自顶向下构建源代码文件的AST,其中,Token序列中的每个字符串对应一个树节点。本实施例的token是把源代码的语句进行类似分词得到的单词,Token序列即由多个单词组成的单词序列,单词是一个字符串,是构成源代码的最小单位。

S12,读取类文件中的注解参数,其中,注解参数包括:表标识和字段属性,表标识用于指示主游戏数据库和从游戏数据库的合并类型,字段属性用于指示主游戏数据库和从游戏数据库中对应字段的约束条件。

在本实施例中,注解@Entity用于表示对实体注释,注解@Column用于声明该属性与数据库字段的映射关系。在一个示例中,注解信息如下:

@Entlty(entityNlame="ServerDB8",tablelNlame="demo-serven",

isCross=true,mergeType=2)public enum EntityServer{

@Column(type-int.class,comment="开启服务器的阶段,0:默认1:测试阶段2:已开服“)type,

@CoLumn(type=long.class,comment="类型”

startTime,

@Comment(type=int.class,comment="组队试炼当前场景sn")

teamExercisestageSn,

@Column(type=long.class,comment="最近一次合服时间“)

mergeTme,

@Column(type=boolean.class,comment="发送跨服领地战邮件“)crossLandlarMaiL,

}

对于代码中标记有@Entity类的文件,其中参数mergeType用来决定表的合并策略,通过预定义配置,示例如下:-1:未指定合并方式,合服工具会报错;0:两个库直接合并;1:清空;2:已主库的为准;3:自定义合并方式(需要自定义合服脚本)。

在本实施例的一个实施方式中,根据注解信息生成目标游戏数据库的中间表结构包括:

S21,解析注解信息的第一注解参数,基于第一注解参数确定游戏数据库的合并类型为新增表格或更新表格;

S22,若合并类型为新增表格,解析注解信息的第二注解参数,基于第二注解参数获取代码字段的字段约束条件,并使用字段约束条件生成第一MySQL语句;若合并类型为更新表格,使用新增字段属性生成第二MySQL语句;

在其中一个实例中,使用字段约束条件生成第一MySQL语句包括:遍历数据库代码的类中的所有枚举字段;通过注解信息来获取枚举字段的约束条件;通过约束条件生成第一MySQL语句,其中,第一MySQL语句用于在目标游戏数据库创建新的表结构。

可选的,约束条件可以但不限于为:字段类型,字段长度,字段是否为索引,字段是否为空,字段默认值,字段的注释信息。

在生成第一MySQL语句后,在目标服务器中根据约束条件创建新的表结构,目标服务器执行第一MySQL语句,从从游戏服务器获取游戏数据,如用户标识,帮会标识,游戏资产,游戏等级等信息,并按照约束条件填充至新创建的表结构中,形成新的数据库项。

在其中一个实例中,使用新增字段属性生成第二MySQL语句包括:在主游戏数据库查找目标表格的第一字段列表,获取目标表格在从游戏数据库的第二字段列表;对比第一字段列表和第二字段列表是否相同;若第一字段列表和第二字段列表相同,基于主游戏数据库和从游戏数据库的属性差异生成第二MySQL语句,其中,属性差异用于表征以下至少之一:字段是否新增索引、字段长度是否变化、字段类型是否变化;若第一字段列表和第二字段列表不相同,使用主游戏数据库和从游戏数据库的差异字段拼接生成第二MySQL语句,其中,第二MySQL语句用于在目标游戏数据库中更新目标表格的表结构。

在生成第二MySQL语句后,在目标服务器中根据属性差异修改原始表的表结构,原始表即主游戏数据库的表结构,将原始表的表结构更新为新的表结构,然后从从游戏服务器获取游戏数据,如用户标识,帮会标识,游戏资产,游戏等级等信息,并按照新的表结构的规则进行填充,形成新的数据库项。

S23,基于第一MySQL语句或第二MySQL语句在目标游戏数据库中生成中间表结构。

图3是本发明实施例自动升级数据的流程图,通过在代码中,对某个模块中的代码增加注解,当服务器启动时,数据库升级代码遍历工程中所有类,找出含有注解@Entity的类文件,获取注解中的参数,参数中包括表名等数据,根据表名去MySql数据中判断,是否为新增表还是更新已有表。

如果是新增表,则去遍历这个类中所有枚举字段,然后通过注解@Column来获取该字段的约束条件,比如字段类型,长度,是否为索引,是否为空,默认值,注释等信息,通过上面所有信息生成一条创建新表的MySQL语句,如果表中有索引,则创建生成索引的MySql语句。最后,与MySQL数据库通信,创建新的表结构。

如果是更新表,首先去MySQL数据中找到这个表当前所有的字段ASet,再获取类中所有字段BSet,对比Aset和Bset,如果相同,则判断是否新增了索引,是否有字段长度变化,是否有类型变化等,生成对应的MySql语句,并执行语句。如果两个集合中有不同的部分,则将新的字段拼接成MySQL语句,增加到数据库的表中,执行更新表操作,最后关闭数据库连接,至此数据库自动升级工作完成。

在本实施例的一个实施方式中,在目标游戏数据库中根据中间表结构合并从游戏数据库和主游戏数据库之前,还包括:判断中间表结构中是否存在重复的游戏元素,其中,游戏元素包括以下至少之一:游戏玩家标识、游戏帮会标识;若中间表结构中存在重复的游戏元素,在游戏元素上添加重名标记,并为对应的游戏账号分配改名卡。

由于两个服务器合并后,可能存在重名的可能,可以对重名的游戏元素(如玩家账号,帮会名等)对应的游戏账号分配改名卡,或者直接将其中一个进行改名,以提高用户体验,避免重复主键导致的游戏数据混乱。

在本实施例的一个实施方式中,在根据注解信息生成目标游戏数据库的中间表结构之前,还包括:在主游戏数据库和从游戏数据库中删除指定账号的游戏数据,其中,指定账号用于表征玩家的游戏活跃度低于指定阈值。

通过删减游戏活跃度低的用户数据,可以减轻合服后主服务器的数据量,提高主服务器的处理效率和处理速度,减轻对无用数据的维护负担。

图4是本发明实施例中数据库自动合服的流程图,在执行合服工具进行合服时,需传递主从服的数据库名称,数据库地址,密码。接着工具会遍历指定包下的类,找出带有@Entity注解的类文件,根据运营策略删除不活跃用户(目的是为了减小合服后库的大小)以及不活跃用户所有关联的表的数据。假定主库A,从库B,合并过程中并不修改A,B两个库,用于可能的合服失败,恢复A,B库的数据,所以先新建立一个新的目标库C。然后遍历所有的数据库表,根据每个表中的mergeType来生成不同的MySQL语句,并执行操作。其中mergeType等于3自定义合服策略的有一些特殊处理,比如玩家,帮会名字重复,会根据策略在其中一个重名的数据上加上标记,玩家上线后会送一张改名卡,等自定义处理。

每次合服的时候,只需要将工具提供给运维人员,负责传递主从库的库名,地址,密码。可同时并行执行几百组服务器同时运行,大大提高了合服效率,简化了合服流程,有效地减少了服务器维护成本。

通过本实施例的方案,解决了程序代码中每次新增表或字段,需要手动维护MySQL脚本的问题。本实施例根据程序代码需求的表或字段,自动升级数据库,不需要专人维护,开发人员根据各自功能的需求,只需要对表或者字段在代码中标注上注解即可。服务器进程在每次开启的时候,会自动检测新增了哪些表或字段,并进行自动升级。解决了维护数据库人员可能会漏增表或字段的问题,大大减少了因数据库问题每次维护服务器导致的问题。解决了合服需要写大量脚本的技术问题。程序代码中通过注解标记所有数据库表的合并规则,比如直接合并两个库的表,删除主从库的表,清空主从库的表,以主库表为主,自定义合并方式等。程序开发人员可根据自己的功能,定制合服的规则,不再需要一名专门负责维护数据库合服的人员,只需要运维人员简单的配置几个参数即可操作合服,大大减少了合服的流程,避免了一些可能会出现的事故,实现了同时并行多组服务器同时合服。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

实施例2

在本实施例中还提供了一种游戏服务器的合并装置,用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图5是根据本发明实施例的一种游戏服务器的合并装置的结构框图,如图5所示,该装置包括:获取模块50,生成模块52,合并模块54,其中,

获取模块50,用于获取数据库代码的注解信息,其中,所述数据库代码运行在主游戏服务器和从游戏服务器中,所述注解信息用于指示主游戏数据库和从游戏数据库的合并类型,所述主游戏数据库存储在主游戏服务器中,所述从游戏数据库存储在从游戏服务器中;

生成模块52,用于根据所述注解信息生成目标游戏数据库的中间表结构;

合并模块54,用于在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库。

可选的,所述获取模块包括:查找单元,用于遍历数据库代码中的所有类,查找包含实体注解的类文件;读取单元,用于读取所述类文件中的注解参数,其中,所述注解参数包括:表标识和字段属性,所述表标识用于指示所述主游戏数据库和所述从游戏数据库的合并类型,所述字段属性用于指示所述主游戏数据库和所述从游戏数据库中对应字段的约束条件。

可选的,所述生成模块包括:解析单元,用于解析所述注解信息的第一注解参数,基于所述第一注解参数确定游戏数据库的合并类型为新增表格或更新表格;第一生成单元,用于若合并类型为新增表格,解析所述注解信息的第二注解参数,基于所述第二注解参数获取代码字段的字段约束条件,并使用所述字段约束条件生成第一MySQL语句;若合并类型为更新表格,使用新增字段属性生成第二MySQL语句;第二生成单元,用于基于所述第一MySQL语句或所述第二MySQL语句在目标游戏数据库中生成中间表结构。

可选的,所述第一生成单元包括:遍历子单元,用于遍历所述数据库代码的类中的所有枚举字段;获取子单元,用于通过所述注解信息来获取所述枚举字段的约束条件;第一生成子单元,用于通过所述约束条件生成第一MySQL语句,其中,所述第一MySQL语句用于在所述目标游戏数据库创建新的表结构。

可选的,所述约束条件包括以下至少之一:字段类型,字段长度,字段是否为索引,字段是否为空,字段默认值,字段的注释信息。

可选的,所述第一生成单元包括:获取子单元,用于在所述主游戏数据库查找目标表格的第一字段列表,获取所述目标表格在所述从游戏数据库的第二字段列表;对比子单元,用于对比所述第一字段列表和所述第二字段列表是否相同;第二生成子单元,用于若所述第一字段列表和所述第二字段列表相同,基于所述主游戏数据库和所述从游戏数据库的属性差异生成第二MySQL语句,其中,所述属性差异用于表征以下至少之一:字段是否新增索引、字段长度是否变化、字段类型是否变化;若所述第一字段列表和所述第二字段列表不相同,使用主游戏数据库和所述从游戏数据库的差异字段拼接生成第二MySQL语句,其中,所述第二MySQL语句用于在所述目标游戏数据库中更新所述目标表格的表结构。

可选的,所述装置还包括:判断模块,用于在所述合并模块在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库之前,判断所述中间表结构中是否存在重复的游戏元素,其中,所述游戏元素包括以下至少之一:游戏玩家标识、游戏帮会标识;处理模块,用于若所述中间表结构中存在重复的游戏元素,在所述游戏元素上添加重名标记,并为对应的游戏账号分配改名卡。

可选的,所述装置还包括:删除模块,用于在所述生成模块根据所述注解信息生成目标游戏数据库的中间表结构之前,在所述主游戏数据库和从游戏数据库中删除指定账号的游戏数据,其中,所述指定账号用于表征玩家的游戏活跃度低于指定阈值。

需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。

实施例3

本申请实施例还提供了一种电子装置,图6是本发明实施例的一种电子装置的结构图,如图6所示,包括处理器61、通信接口62、存储器63和通信总线64,其中,处理器61,通信接口62,存储器63通过通信总线64完成相互间的通信,存储器63,用于存放计算机程序;

处理器61,用于执行存储器63上所存放的程序时,实现如下步骤:

获取数据库代码的注解信息,其中,所述数据库代码运行在主游戏服务器和从游戏服务器中,所述注解信息用于指示主游戏数据库和从游戏数据库的合并类型,所述主游戏数据库存储在主游戏服务器中,所述从游戏数据库存储在从游戏服务器中;根据所述注解信息生成目标游戏数据库的中间表结构;在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库。

可选的,获取数据库代码的注解信息包括:遍历数据库代码中的所有类,查找包含实体注解的类文件;读取所述类文件中的注解参数,其中,所述注解参数包括:表标识和字段属性,所述表标识用于指示所述主游戏数据库和所述从游戏数据库的合并类型,所述字段属性用于指示所述主游戏数据库和所述从游戏数据库中对应字段的约束条件。

可选的,根据所述注解信息生成目标游戏数据库的中间表结构包括:解析所述注解信息的第一注解参数,基于所述第一注解参数确定游戏数据库的合并类型为新增表格或更新表格;若合并类型为新增表格,解析所述注解信息的第二注解参数,基于所述第二注解参数获取代码字段的字段约束条件,并使用所述字段约束条件生成第一MySQL语句;若合并类型为更新表格,使用新增字段属性生成第二MySQL语句;基于所述第一MySQL语句或所述第二MySQL语句在目标游戏数据库中生成中间表结构。

可选的,使用字段约束条件生成第一MySQL语句包括:遍历所述数据库代码的类中的所有枚举字段;通过所述注解信息来获取所述枚举字段的约束条件;通过所述约束条件生成第一MySQL语句,其中,所述第一MySQL语句用于在所述目标游戏数据库创建新的表结构。

可选的,所述约束条件包括以下至少之一:字段类型,字段长度,字段是否为索引,字段是否为空,字段默认值,字段的注释信息。

可选的,使用新增字段属性生成第二MySQL语句包括:在所述主游戏数据库查找目标表格的第一字段列表,获取所述目标表格在所述从游戏数据库的第二字段列表;对比所述第一字段列表和所述第二字段列表是否相同;若所述第一字段列表和所述第二字段列表相同,基于所述主游戏数据库和所述从游戏数据库的属性差异生成第二MySQL语句,其中,所述属性差异用于表征以下至少之一:字段是否新增索引、字段长度是否变化、字段类型是否变化;若所述第一字段列表和所述第二字段列表不相同,使用主游戏数据库和所述从游戏数据库的差异字段拼接生成第二MySQL语句,其中,所述第二MySQL语句用于在所述目标游戏数据库中更新所述目标表格的表结构。

可选的,在所述目标游戏数据库中根据所述中间表结构合并所述从游戏数据库和所述主游戏数据库之前,所述方法还包括:判断所述中间表结构中是否存在重复的游戏元素,其中,所述游戏元素包括以下至少之一:游戏玩家标识、游戏帮会标识;若所述中间表结构中存在重复的游戏元素,在所述游戏元素上添加重名标记,并为对应的游戏账号分配改名卡。

可选的,在根据所述注解信息生成目标游戏数据库的中间表结构之前,所述方法还包括:在所述主游戏数据库和从游戏数据库中删除指定账号的游戏数据,其中,所述指定账号用于表征玩家的游戏活跃度低于指定阈值。

上述终端提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

通信接口用于上述终端与其他设备之间的通信。

存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。

上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processing,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。

在本申请提供的又一实施例中,还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的风险等级的数据处理方法。

在本申请提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的风险等级的数据处理方法。

在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。

上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。

在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。

在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。

相关技术
  • 游戏服务器的合并方法及装置、存储介质、电子装置
  • 网络合并方法和装置、存储介质及电子装置
技术分类

06120112274522