一种前后台数据库的同步方法及装置 【技术领域】
本发明涉及计算机领域,特别涉及一种前后台数据库的同步方法及装置。
背景技术
随着计算机技术的发展,用户对数据存储管理的要求越来越高,相应地,各种各样的数据存储服务也应运而生。其中,Oracle数据库技术便是被广泛应用的数据存储管理技术之一。Oracle数据库技术的异构服务是该技术的一大特点,所谓异构服务是指,存在两个数据库,一个为前台数据库,用于实时收集用户相关数据,一个为后台数据库,用于对收集的用户相关数据进行整理规划并保存。前台数据库和后台数据库所保存的数据要定期进行同步,以保持一致。
但是,现有技术下,前台数据库和后台数据库进行同步的流程存在以下问题:
1、在前后台数据库同步流程中,不存在独立执行的任务,所有任务都按照设定的顺序串行执行,即每一个任务都需要在其前一个任务执行完毕后才开始启动,这样,一但某个任务出现错误,那么,整个前后台数据库同步流程便会终止,需要人工对其进行维护后,再重新从头开始执行,显然,这严重降低了前后台数据库同步流程的执行效率,在很有程度上降低了用户体验。
2、整个前后台数据库同步流程的执行需要读取人开发的sql语句,这样,容易因为人为的错误而导致前后台数据库同步流程出现差错。
【发明内容】
本发明实施例提供一种前后台数据库的同步方法,用以提高前后台数据库同步流程的执行效率。
本发明实施例提供的具体技术方案如下:
一种同步前后台数据库的方法,包括:
获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;
对若干子任务进行分组,每组中包含至少一个子任务;
执行各分组中的子任务;其中,各分组任务并行执行。
一种服务器,包括:
存储单元,用于保存预设的任务内容;
确定单元,用于获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;
分组单元,用于对若干子任务进行分组,每组中包含至少一个子任务;
执行单元,用于执行各分组中的子任务;其中,各分组任务并行执行。
本发明实施例中,在执行前后台数据库同步流程时,服务器先获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;再对若干子任务进行分组,每组中包含至少一个子任务;接着,执行各分组中的子任务;其中,各分组任务并行执行。这样,相对于现有技术下各子任务串行执行的方式,本发明实施例中,归属于不同分组的子任务之间并行执行的方式使得各分组中的子任务相互独立,从而减少了子任务之间的依赖性,在一定程度上缩短了执行子任务所需的时间,进而有效地提高了前后台数据库同步流程的效率。
【附图说明】
图1A为本发明实施例中系统架构示意图;
图1B为本发明实施例中服务器功能结构示意图;
图2为本发明实施例中前后台数据库同步流程图;
图3为本发明实施例中子任务分组示意图。
【具体实施方式】
为了提高前后台数据库同步流程的执行效率,本发明实施例中,以Oracle数据库为例,在对前后台数据库保存的数据进行同步时,先获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;再对若干子任务进行分组,每组中包含至少一个子任务;接着,执行各分组中的子任务;其中,各分组任务并行执行。
下面结合附图对本发明优选的实施方式进行详细说明。
参阅图1A所示,本实施例中,需要同步的前后台数据库分别安装在前台数据库服务器和后台数据库服务器中,前后台数据库同步流程可以由后台数据库服务器执行,也可以由专门设置的服务器执行,本实施例中,以后一种情况为例进行介绍。
参阅图1B所示,本实施例中,用于执行前后台数据库同步流程的服务器包括存储单元100、确定单元101、分组单元102和执行单元103。
存储单元100,用于保存预设的任务内容;
确定单元101,用于获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;
分组单元102,用于对若干子任务进行分组,每组中包含至少一个子任务;
执行单元103,用于执行各分组中的子任务;其中,各分组任务并行执行。
基于上述服务器,参阅图2所示,本实施例中,针对Oracle数据库,服务器执行前后台数据同步更新的详细流程如下:
步骤200:获取预设的任务内容,即需要进行同步的数据内容。
本实施例中,任务内容由管理人员预先配置,并以数据库表的形式进行保存,根据任务内容的多少,可以设置一张或多张数据库表(以下称为任务表),例如,如表1所示,记录有任务内容地一张任务表包含了字段名称、字段类型和内容描述三类表项,其中,字段名称用于指示本次前后台数据库同步流程需要针对的数据内容,字段类型用于指示各数据内容的数据类型,而内容描述用于对各数据内容进行解释说明。
表1
字段名称 字段类型 内容描述 Table_name Varchar2(30) 需要同步表名称 Owner Varchar2(30) 用户名称 Dblink_owner Varchar2(30) 远程表用户名称 Dblink Varchar2(30) 需要同步的dblink名称 Sql_text Varchar2(3000) 特殊同步方式的sql语句存放 Status Number 状态:1为insert-truncate同步方式;2为人工 生成sql语句同步方式;3为无效;4为多个库 的truncate-insert同步方式;5为从多个库同步, 并需要人工插入sql语句的同步方式;6为该模 块完成后还需要进行附加处理的同步方式; Module_name Varchar2(30) 表1在原来的同步模块中的名称 Primary_key_value number 1为有主键,2为没有 Primary_index_value Number 1为有索引,2为无索引 Month Number 每月同步脚本,填入每个月同步的日期,没有 则填写0 Week Number 每周同步脚本,填写每周同步的星期,值为1-7, 没有则填0
步骤210:将预设的任务内容划分为若干子任务,并对各子任务进行分组。
通常情况下,预设的任务内容都会包含若干个如表1所示的任务表,本实施例中,将一张任务表设置对应一个原子级别的子任务,并根据每个任务表的名称和Oracle数据字典的功能,来动态生成执行对应的子任务所需要的执行语句;而所谓对若干子任务进行分组,即是将若干任务表划分至不同的组中。
参阅图3所示,本实施例中,假设服务器根据表1,确定需要执行n个子任务来完成前后台数据库同步流程,那么,服务器可以根据预设的规则对这n个子任务进行分组,如图3所示,本实施例中,将n个子任务分成了F组,其中,1组包括子任务1、子任务2和子任务3;2组包括子任务4、子任务5和子任务6;F组包括子任务n-2、子任务n-1和子任务n。
当然,每组中包含的子任务的数量可以根据实际情况而相应设置,另一方面,各组之间包含的子任务的数目可以相同,也可以不相同,本实施例仅以每组均包含3个子任务为例进行介绍,在此不再赘述。
步骤220:为每组子任务设置一个对应的完成状态标识,本实施例中,该完成状态标识用于指示归属于同一组的子任务是否均以完成。
本实施例中,当某分组的完成状态标识为“0”时,表示该分组中至少有一个子任务尚未完成,而当某分组的完成状态标识为“1”时,表示该分组中所有的子任务均已完成。
步骤230:开始并行执行各分组中的子任务。
本实施例中,归属于同一分组中的子任务是串行执行,例如,在1组中,子任务1执行完毕,才开始执行子任务2。子任务2执行完毕,才开始执行子任务3;同时,各分组包含的子任务是并行执行,例如,1组、2组......F组中各自当前执行的子任务是并行执行的。这样,便可以减少各子任务之间的依赖性,在一定程度上加快前后台数据库同步流程的执行效率,提高更新速度。
步骤240:对各组的完成状态标识进行检测,判断是否存在子任务均已执行成功的分组,若是,则进行步骤250;否则,进行步骤260。
步骤250:将子任务均已完成的分组的执行结束时间记录在预设的任务完成表中,已具有执行结束时间的分组,将不再对其完成状态标识进行检测;接着,进行步骤260。
参阅表2所示,假设在一轮检测中,获得的检测结果为:1组对应的完成状态标识为“0”,用于指示1组中至少有一个子任务尚未完成,而2组和F组对应的完成状态标识均为“1”,用于指示2组和F组中所有的子任务均已完成;则将2组和F组的执行结束时间记录在如表3所示的任务完成表中,在下一轮检测各组的完成状态标识时,任务完成表中记录有执行结束时间的各分组将不再进行检测。
表2
分组名称 完成状态标识 1组 0 2组 1 …… …… F组 1
表3
步骤260:进一步判断是否存在子任务尚未完成的分组,若是,则进行步骤270,否则,进行步骤280。
实际应用中,判断是否存在子任务尚未完成的分组的方法有很多种,本实施例中,采用以下方式进行判断:
判断任务完成表中记录的各分组所包含的子任务的总数目,是否等于在步骤210中根据表1记载的任务内容所确定的子任务的总数目,若相等,则表示不存在子任务尚未完成的分组,若不相等,则表示存在子任务尚未完成的分组。上述方式仅为一较佳的实施方式,其他方式不再赘述。
步骤270:等待设定时长,返回步骤240。
步骤280:结束当前流程,整个前后台数据库同步流程执行完毕。
基于上述实施例,为了加快整个前后台数据库同步流程的执行效率,较佳地,可以配置一张如表4所示的维表,其中,记录有由各个子任务所触发的后续流程,本实施例中,所谓后续流程是指前后台数据库同步流程后的聚合,汇总等处理流程;一旦某个分组中所有子任务执行完毕,即该分组的完成状态标识记为“1”,则由该分组中的各子任务所触发的后续流程便可以开始运作,而无需等待其他分组中的子任务执行完毕,这样,使得各分组包含的子任务之间相互独立,亦可在一定程度上加快整个前后台数据库同步流程的执行效率。
表4
字段名称 字段类型 描述 Module_name Varchar2(30) 同步模块名称 Table_name Varchar2(30) 需要执行的sql语句 Status Number 1为有效,2为无效 Mission_table Varchar2(30) 前置任务判断的任务表 Mission_owner Varchar2(30) 前置任务判断的任务表的用户 Mission_module Varchar2(30) 前置任务源判断的表的所属模块
另一方面,为了进一步加快整个前后台数据库同步流程的执行效率,还可以采用以下方式中的一种或任意组合:
一、若后台数据库中的某张维表记载的数据量较大,需要从前台数据库中的不同dblink获取同步数据,则可以配置一张用于指示从不同的dblink加载数据的维表,该维表的内容如表5所示:
表5
字段名称 字段类型 描述 Table_name Varchar2(30) 表名称 Dblink Varchar2(30) 需要同步数据的DBLINK Sql_text Varchar2(3000) 特殊同步语句的处理
二、在前后台数据库同步流程中,会出现子任务执行错误的状况,通常情况下,出现执行错误的子任务会被重新执行,但是,这些出现执行错误的子任务中存在一部分无需重新执行的子任务,也就是说,即使这部分子任务出现执行错误,也不会影响最终的任务执行结果,那么,可以配置如表6所示的一张维表,用于指示出现执行错误后无需重新执行的子任务,其内容如下:
表6
字段名称 字段类型 描述 Error_msg Number 可重复执行的错误代码 (如:oracle的错误信息代码) Status Number 状态,1为可重复执行,2为不可执行
在前后台数据库同步流程中,若服务器遇到出现执行错误的子任务,则遍历如表5所示的维表,若维表中记录有对应的子任务,则不再重新执行该子任务,而是直接进行后续流程;若维表中未记录有对应的子任务,则需要重新执行该子任务直到成功执行完毕。
三、可以将执行各子任务时所需要的全部或部分执行语句记录在如表7所示的维表中,一旦前后台数据库同步流程出现错误,可以直接根据表7所示的维表确定重新执行部分或整个流程所需要的执行语句,而无需通过人工进行纠错处理。
表7
字段名称 字段类型 描述 Gmt_create Date 任务生成日期 Mission_textl Varchar2(3000) 生成的sql语句
使用上述三种方式中的一种或者任意组合都可以实现提高前后台数据库同步流程执行效率的技术效果,并不限于其中的一种,在此不再赘述。
综上所述,本发明实施例中,在执行前后台数据库同步流程时,服务器先获取预设的用以完成前后台数据库同步的任务内容,并将该预设的任务内容划分为若干子任务;再对若干子任务进行分组,每组中包含至少一个子任务;接着,执行各分组中的子任务,其中,各分组任务并行执行。这样,相对于现有技术下各子任务串行执行的方式,本发明实施例中,归属于不同分组的子任务之间并行执行的方式使得各分组中的子任务相互独立,从而减少了子任务之间的依赖性,在一定程度上缩短了执行子任务所需的时间,进而有效地提高了前后台数据库同步流程的效率。
显然,本领域的技术人员可以对本发明中施例进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明实施例中的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明中的实施例也意图包含这些改动和变型在内。