基于异步提交的数据库数据同步并行执行方法及设备
技术领域
本发明实施例涉及数据库数据处理技术领域,尤其涉及一种基于异步提交的数据库数据同步并行执行方法及设备。
背景技术
传统的基于数据库自身的主备机制实现数据库数据的实时复制,是进行数据容灾备份,保障数据安全的重要的解决方案。目前如ORACLE公司的DataGuard、达梦数据库的DM7主备产品都是实现这种解决方案的成熟的商业化产品。数据库主备机制下,一般备机作为备份节点,通常只提供只读访问,可以在备机上做一些报表分析、数据挖掘等只读访问的应用,而不能像主机一样提供读写访问。另外,数据库主备机制要求备机数据库系统和主机一致,对于异构数据库系统环境,则不能利用数据库自身的主备机制实现有效的数据实时复制。
针对数据库主备机制实现数据复制的不足,目前基于软件的异构数据库复制技术应用广泛。这种技术在源端捕获出数据库的增量数据,然后发送到目标端,在目标端通过通用的数据库访问接口,将增量数据应用到目标数据库,实现数据复制。这种技术因为使用到通用数据库接口,因此支持异构数据库系统复制,支持异构操作系统环境,并且目标端备机数据库系统可读写,是一种“双活”系统。
有多种技术方式实现获取源端数据库的增量数据,其中基于数据库日志捕获分析的数据实时同步技术,因其对源数据库侵入性小,捕获分析性能高,得到较大发展及研究。这种技术通过分析源数据库归档或联机日志,捕获出数据库的INSERT、UPDATE、DELETE操作日志,然后发送到目标端,目标端对日志信息进行逆向生成,恢复成SQL语句方式,然后使用数据库通用接口,应用到目标数据库,实现数据复制。因此,在数据库实时复制过程中,目标端的执行效率是影响数据同步性能的重要因素。
源端数据库上并发执行的各个事务,数据库系统都会根据并发控制机制去执行,并且在日志文件中顺序的记录下各个事务的操作日志。如果目标端数据复制软件严格按照源端日志流中的事务操作日志顺序进行复制执行,则能够有效保证数据复制的一致性,但是复制效率将会非常低下,因为提交操作需要数据库把事务的操作日志刷盘到日志文件中以后才能返回,大量的IO会拖慢同步的数据。要提高数据复制效率,则要求目的端提高复制任务的执行效率。因此,如何在保证数据复制一致性的前提下,提高目标端数据复制的执行效率,就成为业界亟待解决的重要技术问题。
发明内容
针对现有技术存在的上述问题,本发明实施例提供了一种基于异步提交的数据库数据同步并行执行方法及设备。
第一方面,本发明的实施例提供了一种基于异步提交的数据库数据同步并行执行方法,包括:在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行已经提交的其它事务操作;在执行完所述内部消息格式的事务操作后,采用数据库异步提交方法,将事务进行异步提交,唤醒等待异步提交的事务提交的其余事务,让所述其余事务继续执行,最后执行刷盘提交将事务操作日志刷盘至日志文件中,完成数据库数据同步事务的并行执行异步提交;其中,源端数据库与目标端数据库互为异构数据库或同构数据库。
进一步地,所述并行执行所述已经提交的其它事务操作,还包括:若存在另一内部消息格式的事务日志需要并行执行,则按照源端数据库事务的提交先后顺序串行提交。
进一步地,所述则按照源端数据库事务的提交先后顺序串行提交,包括:根据源端数据库提交事务的LSN值的大小,按照由小到大的顺序串行执行。
进一步地,所述采用数据库异步提交方法,将所述事务的操作在目的端数据库中提交,包括:执行commit write nowait操作语句,释放所述事务占据的系统资源,释放事务在目标端数据库中上的行锁和表锁;唤醒等待它提交的其它事务让其继续执行;执行commit write immediate操作语句,将所述事务操作的操作日志刷新至日志文件中,保证同步数据的一致性。
进一步地,所述源端数据库的事务日志的内容,包括:事务ID、事务操作LSN、事务操作类型和/或事务操作数据。
进一步地,所述内部消息格式的事务日志,包括:消息头和事务日志。
第二方面,本发明的实施例提供了一种基于异步提交的数据库数据同步并行执行装置,包括:
源端数据库事务日志捕获分析模块,用于在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;
事务日志并行执行模块,用于在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行所述已经提交的其它事务操作;
异步提交方法用于在执行完所述将所述内部消息格式的事务进行异步提交,然后唤醒等待它提交的其它事务让其继续执行,最后执行刷盘提交,将该事务操作日志刷盘至日志文件中,完成数据库数据同步事务的并行执行异步提交;
其中,所述源端数据库与所述目标端数据库互为异构数据库也可以是同构数据库。
第三方面,本发明的实施例提供了一种电子设备,包括:
至少一个处理器;以及
与处理器通信连接的至少一个存储器,其中:
存储器存储有可被处理器执行的程序指令,处理器调用程序指令能够执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的基于异步提交的数据库数据同步并行执行方法。
第四方面,本发明的实施例提供了一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行第一方面的各种可能的实现方式中任一种可能的实现方式所提供的基于异步提交的数据库数据同步并行执行方法。
本发明实施例提供的基于异步提交的数据库数据同步并行执行方法及设备,通过在目标端数据同步服务中采用多线程并行执行转化为内部消息格式的事务日志,然后结合数据库异步提交方法将操作日志刷新至日志文件中,可以在异构数据库之间并行执行异构数据的同步操作。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做一简单的介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的基于异步提交的数据库数据同步并行执行方法流程图;
图2为本发明实施例提供的异构数据库复制系统结构示意图;
图3为本发明实施例提供的数据库异步提交方法原理示意图;
图4为本发明实施例提供的事务A及事务B的并行执行样例示意图;
图5为本发明实施例提供的基于异步提交的数据库数据同步并行执行装置结构示意图;
图6为本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。另外,本发明提供的各个实施例或单个实施例中的技术特征可以相互任意结合,以形成可行的技术方案,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时,应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
本发明实施例提供了一种基于异步提交的数据库数据同步并行执行方法,参见图1,该方法包括:
101、在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;
102、在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行所述已经提交的其它事务操作;
103、在执行完所述内部消息格式的事务操作后,采用数据库异步提交方法,将事务进行异步提交,唤醒等待异步提交的事务提交的其余事务,让所述其余事务继续执行,最后执行刷盘提交将事务操作日志刷盘至日志文件中,完成数据库数据同步事务的并行执行异步提交。
需要说明的是,数据同步服务中具备一个复制系统,该系统在源端及目标端的数据库中均布设有复制进程。处于源端数据库的复制进程包含捕获分析线程模块,可以用来捕获分析数据库的事务日志;处于目标端数据库的复制进程包含日志接收线程模块,可以用来接收源端数据库发送过来的事务日志,并进行缓存。
其中,源端数据库与目标端数据库互为异构数据库或同构数据库。数据库的复制系统可以参见图2,图2中源端数据库提交事务日志,源端复制进程的日志捕获线程捕获日志,分析后由日志发送线程通过网络(TCP/IP)发送至目标端复制进程。目标端复制进程的日志接收线程接收日志后,将日志分类为事务1至事务N,分别由日志执行线程1到日志执行线程N执行,然后排队发送至目标端数据同步服务。异步提交方法可以参见图3,图3中事务A采用相关语句(update test1set c2=2及where c1=1)先进行执行,执行结果显示为成功。事务B此时采用相关语句(update test1set c2=3及where c1=1)进行等待,执行结果显示为阻塞,要等A提交后才能执行。接着事务A执行commit write nowait语句,执行结果显示为执行成功并唤醒其他事务。此时,事务B执行与前述相同的语句,执行结果显示为被唤醒,执行成功。最后,事务A执行commit write immediate语句,执行结果显示为执行成功(即刷盘成功)。事务B同时执行commit write nowait及commit write immediate语句,执行结果显示为执行成功(即刷盘成功)。
在上述实施例的基础上,本发明实施例中提供的基于异步提交的数据库数据同步并行执行方法,所述并行执行所述已经提交的其它事务操作,还包括:若存在另一内部消息格式的事务操作需要并行执行,则按照源端数据库事务的提交先后顺序串行提交。
在上述实施例的基础上,本发明实施例中提供的基于异步提交的数据库数据同步并行执行方法,所述则按照源端数据库事务的提交先后顺序串行提交,包括:根据源端数据库提交事务的LSN值的大小,按照由小到大的顺序串行执行。具体地,当日志执行线程执行的事务与其他正在执行的事务存在关联时,按照源端数据库事务提交的先后顺序进行串行提交。如果当前执行事务的提交日志时间点大于其他正在执行事务的提交日志时间点,则本事务需要等待其他事务执行异步提交后才能开始执行,事务执行线程进入阻塞等待状态。
在上述实施例的基础上,本发明实施例中提供的基于异步提交的数据库数据同步并行执行方法,所述采用数据库异步提交方法,将所述事务的操作日志刷盘至日志文件中,包括:执行commit write nowait操作语句,释放所述内部消息格式的事务日志占据的系统资源,释放事务在目标端数据库中上的行锁和表锁;唤醒等待它提交的其它事务让其继续执行;执行commit write immediate操作语句,将所述事务的操作日志刷新至日志文件中。其中,执行完commit write nowait操作语句后,并释放系统资源后,还唤醒了其他等待提交的其它事务进行执行。在刷盘完成后,将返回成功结果。日志执行线程接收到刷新成功结果后,标识本事务执行成功。
在上述实施例的基础上,本发明实施例中提供的基于异步提交的数据库数据同步并行执行方法,所述源端数据库的事务日志的内容,包括:事务ID、事务操作LSN、事务操作类型和/或事务操作数据。具体地,请参见表1中的数据库事务日志主要内容。
表1
在上述实施例的基础上,本发明实施例中提供的基于异步提交的数据库数据同步并行执行方法,所述内部消息格式的事务日志,包括:消息头和事务日志。具体地,请参见表2中的内部消息格式的事务日志。
表2
本发明实施例提供的基于异步提交的数据库数据同步并行执行方法,通过在目标端数据同步服务中采用多线程并行执行转化为内部消息格式的事务日志,然后结合数据库异步提交方法将操作日志刷新至日志文件中,可以在异构数据库之间并行执行异构数据的同步操作。
为了更加清晰的展示本发明实施例中技术方案的精神实质,下面以实际操作中的一个具体例子展开进行说明。需要理解的是,该例子仅仅是为了清晰阐述本专利的技术本质,并非对本发明的技术方案进行了限制,凡是符合本发明各个实施例的技术本质的技术方案,均在本专利的保护范围之内。具体请参见图4,假定目标端日志接收线程,接收到的源端日志序列为:A1,A2,B1,B2,A_COMMIT_NOWAIT,A_COMMIT_IMMEDIATE,B3,B4,B_COMMIT_NOWAIT,B_COMMIT_IMMEDIATE。
其中,上述Ai表示事务A对于在日志流中的操作顺序,A_COMMIT或B_COMMIT表示某个事务的提交操作。
上述日志序列的执行步骤如下:
(1)日志执行线程收到事务A的提交操作后,将A事务的日志序列A1A2A_COMMIT投递给一个空闲执行线程;同理,当收到事务B的提交日志时,将B事务的日志序列投递给一个空闲执行线程。根据日志序列,共唤醒2个空闲执行线程。
(2)当事务A开始执行事务日志时,A事务所有的操作LSN都小于其它事务的提交LSN,因此事务A立即进行执行,无需等待。
(3)当事务B开始执行事务日志时,发现事务B的两个操作B1和B2的LSN小于所有事务的提交LSN,因此这两个操作可以和其它事务并行执行,无需等待,但B3和B4操作的LSN大于A事务的提交LSN,因此这两个操作的执行需要等待事务A的提交完成以后才能开始。
(4)事务A开始执行提交操作时,先执行异步提交操作,然后,唤醒等待该提交的其它事务(B事务),让其它事务开始执行,最后再执行提交刷盘操作。
本发明各个实施例的实现基础是通过具有处理器功能的设备进行程序化的处理实现的。因此在工程实际中,可以将本发明各个实施例的技术方案及其功能封装成各种模块。基于这种现实情况,在上述各实施例的基础上,本发明的实施例提供了一种基于异步提交的数据库数据同步并行执行装置,该装置用于执行上述方法实施例中的基于异步提交的数据库数据同步并行执行方法。参见图5,该装置包括:
源端数据库事务日志捕获分析模块501,用于在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;
事务日志并行执行模块502,用于在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行所述已经提交的其它事务操作;
操作日志刷盘模块503,用于在执行完所述内部消息格式的事务日志后,采用数据库异步提交方法,将所述内部消息格式的事务日志的操作日志刷盘至日志文件中,完成数据库数据同步的并行执行;
其中,所述源端数据库中的数据与所述目标端数据同步服务中的数据互为异构数据。
本发明实施例提供的基于异步提交的数据库数据同步并行执行装置,采用源端数据库事务日志捕获分析模块、事务日志并行执行模块和异步提交方法通过在目标端数据同步服务中采用多线程并行执行转化为内部消息格式的事务日志,然后结合数据库异步提交方法将操作日志刷新至日志文件中,可以在异构数据库之间并行执行异构数据的同步操作。
本发明实施例的方法是依托电子设备实现的,因此对相关的电子设备有必要做一下介绍。基于此目的,本发明的实施例提供了一种电子设备,如图6所示,该电子设备包括:至少一个处理器(processor)601、通信接口(Communications Interface)604、至少一个存储器(memory)602和通信总线603,其中,至少一个处理器601,通信接口604,至少一个存储器602通过通信总线603完成相互间的通信。至少一个处理器601可以调用至少一个存储器602中的逻辑指令,以执行如下方法:在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行所述已经提交的其它事务操作;在执行完所述内部消息格式的事务日志后,采用数据库异步提交方法,将所述内部消息格式的事务日志的操作日志刷盘至日志文件中,完成数据库数据同步的并行执行;其中,所述源端数据库中的数据与所述目标端数据同步服务中的数据互为异构数据。
此外,上述的至少一个存储器602中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。例如包括:在源端数据库中捕获源端数据库的事务日志并进行分析,将分析后的源端数据库的事务日志转换为内部消息格式的事务日志,并发送至目标端数据同步服务;在目标端数据同步服务接收内部消息格式的事务日志并缓存,若接收到事务的commit操作日志,则激活日志执行线程,并行执行所述已经提交的其它事务操作;在执行完所述内部消息格式的事务日志后,采用数据库异步提交方法,将所述内部消息格式的事务日志的操作日志刷盘至日志文件中,完成数据库数据同步的并行执行;其中,所述源端数据库与所述目标端数据库互为异构数据库或同构数据库。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。