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

一种基于日志解析的同步方法和同步系统

文献发布时间:2023-06-19 09:46:20


一种基于日志解析的同步方法和同步系统

技术领域

本发明属于同步技术领域,更具体地,涉及一种基于日志解析的同步方法和同步系统。

背景技术

数据库数据实时同步是提高信息系统可用性,保证业务连续性的一种技术方案。通过数据实时同步,目标数据库和源数据库的业务数据保持实时一致,当源数据库出现故障中断服务后,应用系统可快速切换至目标数据库,保证业务连续性的要求。

基于日志分析的数据库数据实时复制技术,具有对源数据库的性能和数据模式影响小、支持异构操作系统和数据库平台、数据复制性能高等特点,在应急灾备、多业务中心、异构资源整合、数据迁移等领域得到广泛应用。这种技术通过源端的日志捕获进程捕获源数据库的在线日志或归档日志,然后分析出数据库的INSERT(插入)、UPDATE(更新)以及DELETE(删除)操作转换为内部特定格式的消息包,再将消息包通过TCP/IP(TransmissionControl Protocol/Internet Protocol,简写为TCP/IP)网络发送到复制系统的目的端,目的端接收消息包后,进行拆包处理,将源端的事务信息恢复成相应的SQL(StructuredQuery Language,简写为SQL)语句,通过本地数据库接口在目标数据库执行实时复制,以实现数据库数据同步。

在数据同步系统中,源端数据同步服务按照数据库日志生成的顺序来捕获数据库的操作,目的端数据同步服务则按照源端发送操作的先后顺序来接收管理事务,事务在目的端按事务ID分类管理,当收到某个事务的提交消息后,该事务才会被执行,因此事务在没有收到提交消息前该事务所有的操作都需要被缓存。而事务的操作数量规模是无上限的,如果把事务的操作都缓存在内存中那么势必会造成内存资源的紧张,严重的将会引起操作系统宕机。所以采取使用磁盘来缓存事务操作是目前数据同步软件常用的手段,但是由于事务操作的特殊性,事务操作在缓存到磁盘以后有可能会发生部分回滚的动作,这时就需要清理已经被缓存到磁盘中的操作,目前常用的清理方式是逆向定位操作后截断文件或是给相应回滚的操作上打标记等,如果采用多个操作批量压缩打包缓存的方式还需要对压缩的数据包解压等更加复杂的过程,上述这些清理方式运行过程中会产生随机IO,如果发生大规模的部分回滚,那么就会挤占IO资源,影响所在服务器上的其它程序的性能。

鉴于此,克服该现有技术产品所存在的不足是本技术领域亟待解决的问题。

发明内容

针对现有技术的以上缺陷或改进需求,本发明提供了一种基于日志解析的同步方法和同步系统,其目的在于,根据操作编号构成部分回滚操作区间,部分回滚的动作将被收集在部分回滚链表中,对已经打包缓存的操作不作处理,虽然浪费了磁盘空间但是省去了部分回滚删除或标记的IO开销。

为实现上述目的,按照本发明的一个方面,提供了一种基于日志解析的同步方法,所述同步方法应用于目的端数据同步系统,所述目的端数据同步系统配套设置有日志接收线程和执行线程,在磁盘空间为每一事务上设置事务缓存文件,其中,所述事务缓存文件配套设置有变量y,所述事务缓存文件包括部分回滚链表和存盘LSN;所述同步方法包括:

所述日志接收线程判断操作的类型;

当为DML操作时,获取DML操作的操作编号和所述DML操作所属的事务ID,根据所述事务ID确定相应事务缓存文件;

将所述DML操作和所述操作编号添加到相应的事务缓存文件中,更新变量y等于当前DML操作的操作编号,更新存盘LSN等于当前DML操作的日志序列号;

当为部分回滚操作时,获取所述部分回滚操作所属的事务ID和回滚的目标操作编号x,根据事务ID确定相应的事务缓存文件,以得到目标变量y;

采用所述目标操作编号x和所述目标变量y构造部分回滚区间[x,y],并将部分回滚区间[x,y]添加在部分回滚链表中,更新存盘LSN等于当前部分回滚操作的日志序列号;

当为提交操作时,将相应的事务分发给所述执行线程,所述执行线程根据待执行操作的操作编号和相应的部分回滚链表进行数据同步。

优选地,所述采用所述目标操作编号x和所述目标变量y构造部分回滚区间[x,y],并将部分回滚区间[x,y]添加在部分回滚链表中包括:

采用所述目标操作编号x和所述目标变量y构造部分回滚区间[x,y];

依据所述目标操作编号x从小到大的顺序,将部分回滚区间[x,y]添加在部分回滚链表中;

判断新增的部分回滚区间[x,y]与已有的部分回滚区间[x,y]是否为相邻区间;

若为相邻区间,则将新增的部分回滚区间[x,y]与已有的部分回滚区间[x,y]进行合并,以得到合并后的部分回滚区间;

以合并后的部分回滚区间的起始值x减1后得到的值,更新变量y;

若不为相邻区间,以新增的部分回滚区间的起始值x减1后得到的值,更新变量y。

优选地,相邻区间指的是前一个区间的y值加1后和后一个区间的x值相等。

优选地,所述同步方法还包括:

当为回滚操作时,删除所述回滚操作所对应的事务缓存文件,并释放内存中缓存的所有操作。

优选地,将所述DML操作和所述操作编号添加到相应的事务缓存文件中,更新变量y等于当前DML操作的操作编号,更新存盘LSN等于当前DML操作的日志序列号包括:

先将所述DML操作和所述操作编号存储在相应的内存中;

判断是否达到缓存临界点;

若达到缓存临界点,则将内存中的全部DML操作进行压缩,得到压缩后的数据,将压缩后的数据连同部分回滚链表区间信息添加到相应的事务缓存文件中;

更新变量y等于当前DML操作的操作编号,更新存盘LSN等于当前DML操作的日志序列号。

优选地,所述执行线程根据待执行操作的操作编号和相应的部分回滚链表进行数据同步包括:

所述执行线程在接收到待执行事务后,从相应的事务缓存文件中取出一个待执行操作,并获取所述待执行操作的操作编号z;

从部分回滚链表中依次提取部分回滚区间[x,y];

根据所述操作编号z和部分回滚区间[x,y]的相对关系,确定是否进行部分回滚操作,以进行数据同步。

优选地,根据所述操作编号z和部分回滚区间[x,y]的相对关系,确定是否进行部分回滚操作包括:

判断所述操作编号z是否小于区间起始值x;

若所述操作编号z小于区间起始值x,则执行所述待执行操作,并取出下一个待执行操作;

若所述操作编号z不小于区间起始值x,则判断所述操作编号z是否大于区间终止值y;

若所述操作编号z不大于区间终止值y,所述待执行操作属于部分回滚区间内的操作,丢弃所述待执行操作,并取出下一个待执行操作。

优选地,所述同步方法还包括:

若所述操作编号z大于区间终止值y,则取出下一个部分回滚区间[x,y],根据所述操作编号z和下一个部分回滚区间[x,y]的相对关系,确定是否进行部分回滚操作,直至完成所有部分回滚区间的遍历。

优选地,所述同步方法还包括:

若所述操作编号z大于最后一个部分回滚区间的区间终止值y,则执行所述待执行操作;

在取出下一个待执行操作后,直接执行所述待执行操作。

为实现上述目的,按照本发明的另一个方面,提供了一种同步系统,所述同步系统包括至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被程序设置为执行本发明所述的同步方法。

总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有如下有益效果:在本发明中,每一个DML操作均具有递增的操作编号,当事务产生部分回滚时,根据操作编号构成部分回滚操作区间,部分回滚的动作将被收集在部分回滚链表中,对已经打包缓存的操作不作处理,虽然浪费了磁盘空间但是省去了部分回滚删除或标记的IO开销。并且在缓存的过程中,将部分回滚链表保存到缓存文件来提升同步异常恢复的速度,避免重复的缓存故障前的事务操作。

附图说明

图1是本发明实施例提供的一种基于日志解析的同步方法的流程示意图;

图2是本发明实施例提供的日志接收线程的执行过程示意图;

图3是本发明实施例提供的执行线程的执行过程示意图;

图4是本发明实施例提供的一种事务缓存文件的数据结构示意图;

图5是本发明实施例提供的另一种事务缓存文件的数据结构示意图;

图6是本发明实施例提供的又一种事务缓存文件的数据结构示意图;

图7是本发明实施例提供的一种同步系统的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

在本发明的描述中,术语“内”、“外”、“纵向”、“横向”、“上”、“下”、“顶”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明而不是要求本发明必须以特定的方位构造和操作,因此不应当理解为对本发明的限制。

此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。

实施例1:

缓存数据到磁盘文件中本是一种简单的针对文件的顺序写操作,但是在基于日志解析同步的环境中,由于事务存在部分回滚的可能(部分回滚是指某个事务中只回滚一部分操作,而不是回滚全部操作),前期大量的操作被缓存到磁盘文件中以后如果进行部分回滚则要一个一个回退从而增加了缓存事务的复杂度。

为解决前述问题,本发明采用了空间换性能的策略来缓存事务,事务操作在缓存时采用多个操作打包压缩的方式顺序写到缓存文件中,文件的顺序写操作有助于提升IO性能,而多个操作打包压缩可以提升操作数据的压缩比从而节省磁盘开销。当事务产生部分回滚时,部分回滚的动作将被收集在部分回滚链表中,对已经打包缓存的操作不作处理,虽然浪费了磁盘空间但是省去了部分回滚删除或标记的IO开销。当接收到多个部分回滚动作时,合并相邻的部分回滚动作,采用范围区间的方式来表述需要回滚的动作可以有效的缩减部分回滚链表的长度。检查点线程配合定时在每个存贮事务的文件头部固定区域处记录部分回滚链表信息,还可以进一步的实现事务数据的持久缓存功能,防止故障恢复时需要重新收集全部的数据,加快恢复的速度。

本实施例提供一种基于日志解析的同步方法,所述同步方法应用于目的端数据同步系统,所述目的端数据同步系统配套设置有日志接收线程和执行线程。具体地,目的端数据同步系统在启动后需要创建日志接收线程和执行线程。日志接收线程负责接收源端发过来的操作;执行线程负责把确认提交的事务入库。

其中,以事务为单位,在磁盘空间为每一事务上设置事务缓存文件,其中,所述事务缓存文件配套设置有变量y,所述事务缓存文件包括部分回滚链表、存盘LSN、事务信息和文件末尾的偏移。

目的端数据同步系统在故障后启动时,先加载故障之前的事务缓存文件,并读取事务缓存文件中的事务信息、存盘LSN、文件末尾的偏移和部分回滚链表信息,以恢复上次故障或停止时目的端数据同步系统的内部接收的事务状态,以便对接源端的断点续传功能,保障同步过程中事务的一致性。

下面参阅图1,所述同步方法包括如下步骤:

步骤101:所述日志接收线程判断操作的类型。

在源端数据库及目的端数据库部署同步系统,源端数据同步系统从源端数据库读取日志,而目的端数据库同步系统则是负责把源端发过来的同步操作应用到目的端数据库。

结合图2,目的端的日志接收线程对日志进行解析得到操作,判断操作的类型,当为DML操作时,执行步骤102;当为部分回滚操作时,执行步骤104;当为提交操作时,执行步骤106。

当为回滚操作时,删除所述回滚操作所对应的事务缓存文件,并释放内存中缓存的所有操作。

步骤102:当为DML操作时,获取DML操作的操作编号和所述DML操作所属的事务ID,根据所述事务ID确定相应事务缓存文件。

源端在发送事务中的操作时,需要把操作编号信息填入到操作中,以便目的端能够通过操作编号来实现部分回滚操作。具体地,数据库日志流中的每个操作在它所在的事务内部都有一个独立的操作编号,并且操作编号是从1开始递增的。有些数据库(例如,ORACLE)在操作的日志中没有编号,但是在源端日志解析过程中可以通过其它技术手段来为每个操作实现模拟的操作编号。

步骤103:将所述DML操作和所述操作编号添加到相应的事务缓存文件中,更新变量y等于当前DML操作的操作编号,更新存盘LSN等于当前DML操作的日志序列号。

在本实施例中,按操作中事务ID来进行分类管理,先将操作添加到内存中,当达到缓存临界点后,再将内存中的操作添加到事务缓存文件中,并记录下当前操作的操作编号到该事务专属的变量y中。

具体地,先将所述DML操作和所述操作编号存储在相应的内存中;判断是否达到缓存临界点;若达到缓存临界点,则将内存中的全部DML操作进行压缩,得到压缩后的数据,将压缩后的数据连同部分回滚链表区间信息添加到相应的事务缓存文件中;更新变量y等于当前DML操作的操作编号,更新存盘LSN等于当前DML操作的日志序列号。

其中,缓存临界点可以为操作数量是否达到设定值N,当内存中缓存的操作数量达到设定值N时,把该N个操作打包压缩后追加到对应的事务缓存文件中,并记录下文件末尾的偏移,把当前操作的LSN保存为该事务的存盘LSN,然后继续接收下一个操作。当内存中缓存的操作数量没有达到设定值N时,把当前操作的LSN作为该事务的存盘LSN,继续接收下一个操作。

上述方案采用了设置每个事务缓存操作数临界点N来控制事务刷盘的规模,在实际实施过程中可以针对不同的使用场景来调整N值,例如在内存足够的情况下把N设置的大一些,可以减少目标端数据同步系统产生IO的机率,防止因为IO的瓶颈影响同步的性能。

在本实施例中,按照事务为单位来缓存操作数据,每个事务都缓存在独立的一个事务缓存文件中,并且文件命名以事务ID来命名方便管理和定位,在事务缓存文件创建时,文件前面空出4K空间来存放部分回滚链表信息,也就是文件缓存的起始偏移为4096。

由于操作系统在操作文件时是以扇区为单位的,在事务缓存文件中每次缓存的数据按扇区字节数来对齐,有利于降低缓存操作的复杂度,提升IO性能。

步骤104:当为部分回滚操作时,获取所述部分回滚操作所属的事务ID和回滚的目标操作编号x,根据事务ID确定相应的事务缓存文件,以得到目标变量y。

其中,部分回滚操作中除了有操作针对的事务ID以外,还会包含回滚操作指向的操作编号(目标操作编号x),意义为该事务从当前操作编号位置向前回退,一直回退到指定的操作编号为止(包括操作编号所在的操作)。

步骤105:采用所述目标操作编号x和所述目标变量y构造部分回滚区间[x,y],并将部分回滚区间[x,y]添加在部分回滚链表中,更新存盘LSN等于当前部分回滚操作的日志序列号。

在本实施例中,当前操作为部分回滚操作,提取操作中的事务ID和回滚的目标操作编号x,根据事务ID定位到所属事务,以确定相应的事务缓存文件,从而得到目标变量y。

然后使用目标操作编号x和目标变量y构造一个部分回滚区间[x,y],并添加到部分回滚链表中,添加时要按区间的起始编号x排序,保证部分回滚链表中区间是从小到大的顺序。

在优选的实施例中,每次添加完部分回滚区间以后,判断添加的部分回滚区间是否和前面或后面的区间相邻,如果相邻则进行前后区间的合并,形成更大的区间来替代原来链表中小范围的区间。

具体实现方式为:采用所述目标操作编号x和所述目标变量y构造部分回滚区间[x,y]。

依据所述目标操作编号x从小到大的顺序,将部分回滚区间[x,y]添加在部分回滚链表中;判断新增的部分回滚区间[x,y]与已有的部分回滚区间[x,y]是否为相邻区间;若为相邻区间,则将新增的部分回滚区间[x,y]与已有的部分回滚区间[x,y]进行合并,以得到合并后的部分回滚区间;以合并后的部分回滚区间的起始值x减1后得到的值,更新变量y,具体来说,将合并后的部分回滚区间的起始值x减1得到新值x’,将所述新值x’赋值给变量y,从而更新变量y的值;若不为相邻区间,以新增的部分回滚区间的起始值x减1后得到的值,更新变量y,具体来说,将新增的部分回滚区间的起始值x减1得到新值x”,将所述新值x”赋值给变量y,从而更新变量y的值。其中,相邻区间指的是前一个区间的y值加1后和后一个区间的x值相等。

步骤106:当为提交操作时,将相应的事务分发给所述执行线程,所述执行线程根据待执行操作的操作编号和相应的部分回滚链表进行数据同步。

当前操作为提交操作,根据操作的事务ID找到对应的事务,把它分发给执行线程执行入库。

此外,所述目的端数据同步系统配套设置检查点线程,检查点线程定时保存目的端数据同步系统接收到的事务信息,设置故障时的恢复点。在本实施例中,检查点线程每隔S秒为事务更新部分回滚链信息到对应的事务文件中,遍历当前缓存的事务信息,执行下面操作。通过设置检查点线程间隔S,可以调剂故障恢复的时间,在业务频繁的环境中,缩短间隔时间有利于故障时的快速恢复。

判断当前事务上一次检查点的存盘LSN和当前存盘LSN的大小,如果上次检查点的存盘LSN小于等于当前存盘LSN,则说明该事务自从上次检查点以后就再未收到新的操作,直接跳过,不进行存盘操作,取下一个事务;否则,进行存盘操作,先把该事务内存缓存的操作打包压缩后追加到事务对应的事务缓存文件中,并记录下文件末尾的偏移,再把该事务的存盘LSN、文件末尾偏移和部分回滚链表中的区间信息存放事务缓存文件的头部预留的4K空间中,完成后取下一个事务。

在本实施例中,检查点线程的意义在于目标端在接收源端操作过程中,需要定时的设置故障时的恢复点。在设置恢复点前要保存恢复点之前要保存当前的活动事务中的数据,这样在源端在故障恢复以后就可以从恢复点开始分析日志,实现断点续传的功能。

在本实施例中,每一个DML操作均具有递增的操作编号,根据操作编号构成部分回滚操作区间,对已经缓存的需要回滚的操作不作删除或标记处理来减少部分回滚操作对缓存事务影响,采用空间换性能的策略来实现事务缓存功能。并且在缓存的过程中,将部分回滚链表保存到缓存文件来提升同步异常恢复的速度,避免重复的缓存故障前的事务操作。

下面结合图3,具体说明步骤106的具体实现过程:

首先,所述执行线程在接收到待执行事务后,从相应的事务缓存文件中取出一个待执行操作,并获取所述待执行操作的操作编号z。

从部分回滚链表中依次提取部分回滚区间[x,y];根据所述操作编号z和部分回滚区间[x,y]的相对关系,确定是否进行部分回滚操作,以进行数据同步。

具体地,判断所述操作编号z是否小于区间起始值x,若所述操作编号z小于区间起始值x,即,z

若所述操作编号z不小于区间起始值x,则判断所述操作编号z是否大于区间终止值y,若所述操作编号z不大于区间终止值y,即,z>=x并且z<=y时,所述待执行操作属于部分回滚区间内的操作,丢弃所述待执行操作,并取出下一个待执行操作。

若所述操作编号z大于区间终止值y,即,z>y时,则取出下一个部分回滚区间[x,y],根据所述操作编号z和下一个部分回滚区间[x,y]的相对关系,确定是否进行部分回滚操作,直至完成所有部分回滚区间的遍历。

在实际应用场景下,若所述操作编号z大于最后一个部分回滚区间的区间终止值y,则执行所述待执行操作;在取出下一个待执行操作后,直接执行所述待执行操作。若所述操作编号z大于最后一个部分回滚区间的区间终止值y,则说明部分回滚区间已经提取完,所以该操作编号以后的操作都需要执行,无需回滚。

上述实施例的基本步骤,可以解释如下:

首先,本发明在处理事务部分回滚操作时不需要在缓存文件中删除需要回滚的操作(防止回退时产生随机IO),也不需要在已缓存的操作记录上添加删除标记(也就是缓存的操作不需要以明文存贮),整个事务缓存一直保持顺序写入的特点,那么就可以在写入文件时采用打包多个操作并压缩以后再存贮的方式,这样可以有效节省磁盘空间的开销,并且减轻IO的压力。

其次,针对事务部分回滚的操作采用了链表的形式来管理,并且采用合并相邻的部分回滚区间来合并多个连续的部分回滚操作,有效的减少了部分回滚链表的长度,便于在检查点线程刷盘时存贮部分回滚操作。在事务执行期间,利用操作编号在部分回滚链表中的区间进行定位,丢弃掉落在回滚区间中的操作,从而实现部分回滚的功能,这种策略虽然浪费了部分磁盘空间,但是保证了事务缓存到文件是顺序写的特性,提升了事务缓存的性能,同时也间接的减轻了同步系统对当前环境中其它服务程序的影响。

实施例2:

为便于理解前述实施例1的方案,下面进行举例说明。上述方案举例如下:

源数据库和目的端数据库现都有表T1(ID INT),源端应用有个事务对表T1进行如下操作:

INSERT INTO T1(ID)VALUES('1');

SAVEPOINT SP2;

INSERT INTO T1(ID)VALUES('2');

SAVEPOINT SP3;

INSERT INTO T1(ID)VALUES('3');

ROLLBACK TO SAVEPOINT SP3;

ROLLBACK TO SAVEPOINT SP2;

INSERT INTO T1(ID)VALUES('4');

SAVEPOINT SP5;

INSERT INTO T1(ID)VALUES('5');

ROLLBACK TO SAVEPOINT SP5;

INSERT INTO T1(ID)VALUES('6');

COMMIT;

上述操作会形成下面的日志操作:

事务缓存过程如下:

目的端同步系统启动,假设事务缓存操作数量临界值为3,当前操作系统扇区大小为512字节,接收三个INSERT操作,编号分别为1、2和3的操作,把上述三个操作打包压缩存贮,形成如图4所示的文件格式:

上述操作完成以后,变量y中的操作编号为3。

接收到部分回滚操作,它需要回滚到操作编号3,根据规则,把它和变量y中的编号构造一个回滚区间添加到部分回滚链表中,形成{[3,3]}。

把上述区间起始编号x减1以后赋给y,此时y的操作编号为2。

接收到部分回滚操作,它需要回滚到操作编号2,根据规则,把它和变量y中的编号构造一个回滚区间添加到部分回滚链表中,形成{[2,2],[3,3]}。

检查发现,添加以后的部分回滚链表中存在相邻的回滚区间,需要合并,合并以后形成新的区间{[2,3]}。

把上述区间起始编号x减1以后赋给y,此时y的操作编号为1。

接收两个INSERT操作,编号分别为4和5的操作,此时y的操作编号为5。

接收到部分回滚操作,它需要回滚到操作编号5,根据规则,把它和变量y中的编号构造一个回滚区间添加到部分回滚链表中,形成{[2,3],[5,5]}。

接收一个INSERT操作,编号为6的操作,把内存中缓存的编号为4、5和6的三个操作打包压缩存贮,形成如图5所示的文件格式:

如果这时碰到检查点线程对该事务存盘,那么该事务的当前文件末尾偏移、存盘LSN和部分回滚链表就会存放到事务文件的前4K空间中,形成如图6所示的文件格式:

接收到COMMIT操作,分配到执行线程执行。

执行线程提取第一个INSERT(ID=1)操作,它的操作编号为1。

提取第一个部分回滚区间[2,3]。

根据规则,操作编号1小于区间起始值2,需要执行该操作,执行:

INSERT INTO T(ID)VALUES(1);

提取第二个INSERT(ID=2)操作,它的操作编号为2,根据规则,操作编号2落在了部分回滚区间[2,3]之中,直接丢弃该操作,不用执行。

提取第三个INSERT(ID=3)操作,它的操作编号为3,根据规则,操作编号3落在了部分回滚区间[2,3]之中,直接丢弃该操作,不用执行。

提取第四个INSERT(ID=4)操作,它的操作编号为4,根据规则,操作编号4大于部分回滚区间[2,3]。

提取下一个部分回滚区间[5,5]。

继续判断第四个操作,操作编号4小于区间起始值5,需要执行该操作,执行:

INSERT INTO T(ID)VALUES(4);

提取第五个INSERT(ID=5)操作,它的操作编号为5,根据规则,操作编号5落在了部分回滚区间[5,5]之中,直接丢弃该操作,不用执行。

提取第六个INSERT(ID=6)操作,它的操作编号为6,根据规则,操作编号5大于部分回滚区间[5,5]。

此时部分回滚区间已经提取完,所以该编号以后的操作都需要执行:

INSERT INTO T(ID)VALUES(6);

执行COMMIT,完成同步。

上述过程中采用遍历缓存文件中的操作,然后结合部分回滚链表中记录的回滚操作编号区间来识别需要丢弃的操作,实现了事务的部分回滚功能。

实施例3:

请参阅图7,图7是本发明实施例提供的一种同步系统的结构示意图。本实施例的同步系统包括一个或多个处理器41以及存储器42。其中,图7中以一个处理器41为例。

处理器41和存储器42可以通过总线或者其他方式连接,图7中以通过总线连接为例。

存储器42作为一种基于同步方法的非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块,上述实施例的方法以及对应的程序指令。处理器41通过运行存储在存储器42中的非易失性软件程序、指令以及模块,从而执行各种功能应用以及数据处理,实现前述实施例的方法。

其中,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

值得说明的是,上述装置和系统内的模块、单元之间的信息交互、执行过程等内容,由于与本发明的处理方法实施例基于同一构思,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。

本领域普通技术人员可以理解实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(Read Only Memory,简写为ROM)、随机存取存储器(Random AccessMemory,简写为RAM)、磁盘或光盘等。

本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

相关技术
  • 一种基于日志解析的DDL操作的同步方法和同步系统
  • 一种基于日志解析的数据同步方法和数据同步系统
技术分类

06120112291751