一种事务型数据库之间巨大事务增量同步方法技术

技术编号:32199744 阅读:15 留言:0更新日期:2022-02-08 16:06
本发明专利技术提供了一种事务型数据库之间巨大事务增量同步方法,具体包括以下内容,通过日志流式挖掘模块解析业务系统数据库内的逻辑日志,将解析逻辑日志后得到的重做SQL发送至事务还原模块进行事务还原,还原过程中如果事务的长度超过设定长度阈值,需要对事务进行拆分,拆分后通过数据投递模块向目标数据库写入事务,若没有超过长度阈值则直接写入目标数据库。本发明专利技术所述的一种事务型数据库之间巨大事务增量同步方法,在数据保证数据一致性和内存可控的前提下实现源库巨大事务的增量同步。可控的前提下实现源库巨大事务的增量同步。可控的前提下实现源库巨大事务的增量同步。

【技术实现步骤摘要】
一种事务型数据库之间巨大事务增量同步方法


[0001]本专利技术属于OLTP数据库领域同构数据库或异构数据库之间增量同步
,尤其是涉及一种事务型数据库之间巨大事务增量同步方法。

技术介绍

[0002]随着国产数据库市场的发展与成熟,企业在信息化建设过程中交易系统的数据库选择更加丰富,在一个企业中不同的信息化系统往往存在多套不同的数据库。随着企业信息化系统的发展,这些数据库之间的数据逐渐产生相互之间同步需求。OLTP数据库都有逻辑日志,这类数据库的增量同步为了减少对用户应用系统的入侵往往都采用基于解析逻辑日志获取增量的方式实现两个数据库之间的数据的增量同步,逻辑日志中记录的源库发生所有的动作,这里面包含事务开始操作,数据操作,提交/回滚操作,而且源库的操作往往是多个用户并发操作,所以逻辑日志中记录的操作往往也是多个事务的交叉串行记录,解析逻辑日志的过程中,需要还原事务与在源库的所有操作集合以及最终的提交顺序,在遇到源库发生全表更新,或者批量插入,批量更新的的巨大事务的情况,一条简单的批量update或者全表update会被序列化为几十万甚至上千万的记录,这样的事务在同步过程中,解析逻辑日志还原事务的过程中就会耗费非常巨大的内存,即使有足够大的内存向目标库一次性写入也会存在断点续传代价高,效率等问题,本专利技术主要是解决该场景面临的内存和断点续传代价高以及效率问题。
[0003]本专利技术通过一种能够按照设定阈值在内存与外存透明切换的容器设计并且结合事务拆分等技术解决巨大事务同步过程中内存、断点续传代价高及效率问题。

技术实现思路

[0004]有鉴于此,本专利技术旨在提出一种事务型数据库之间巨大事务增量同步方法,以解决巨大事务同步过程中内存、断点续传代价高及效率问题。
[0005]为达到上述目的,本专利技术的技术方案是这样实现的:一种事务型数据库之间巨大事务增量同步方法,包括以下步骤:S1、日志流式挖掘模块将业务系统数据库中的逻辑日志进行流式解析,得到重做SQL,并将所述重做SQL交给事务还原模块进行事务还原;S2、初始化事务还原模块的事务缓存Map;S3、所述事务还原模块接收到重做SQL后放入到自身所属事务缓存列表容器中进行缓存,同时,需要判断所述事务缓存Map中是否有存在本重做SQL对应的自身所属事务的缓存列表容器,若有,则调用本列表容器的记录接口并存入,若没有,则新建列表容器并放入事务缓存Map后,把本重做SQL存入新建的列表容器;直到事务还原模块接收到丢弃或保存语句后,标识重做SQL的事务还原完毕;S4、设定拆分事务大小阈值,并判断步骤S3中所述事务还原模块中还原的重做SQL的事务是否需要拆分,重做SQL的事务达到设定阈值后,把重做SQL的事务拆分多个小事务,
并对每个小事务进行重新计算,发送给数据投递模块;若未达到阈值则直接发送给数据投递模块;S5、数据投递模块将接收的事务重做SQL至目标数据库,目标数据库每执行每一个事务的重做SQL后,并记在目标库成功执行的事务对应的逻辑日志点,如果是拆分的小事务并记录当前小事务对应逻辑日志点,以及最后一条重做SQL对应的全局唯一的sequence号。
[0006]进一步的,步骤S1中日志流式挖掘模块进行逻辑日志解析时,需要先检查断点续传信息存储模块是否记录了断点续传信息;断点续传信息包括:最后一次成功同步的对应逻辑日志点,以及最后一条重做SQL对应的全局唯一的sequence号;若存储有;使断点续传信息存储模块记录的逻辑日志点作为起始点开始逻辑日志的解析;若存储没有,则从业务系统数据库中逻辑日志的初始位置开始解析日志。
[0007]进一步的,所述步骤S2中事务还原缓存Map为内存与外存透明切换的列表容器;内存与外存透明切换的列表容器的设计方法如下:S21、根据用户设定的内存与外存透明切换的列表容器最大占用内存大小或者记录条数,初始化一个列表容器,并设置当前条数为0,大小为0,并初始化列表内存区域;S22、内存与外存透明切换的列表容器添加记录接口,当添加记录接口被调用时,内存与外存透明切换的列表容器检查本容器内已经存储的元数据条数和占用内存大小是否超过初始化时设定的阈值,如果没有超过阈值则存放在内存中;如果超过了阈值,本条记录按照规定格式存储到外存中;并更新内存与外存透明切换的列表容器缓存的记录条数和占用内存大小;S23、内存与外存透明切换的列表容器获取并记录接口,当获取记录接口被调用时,根据传入的偏移量,先判断改偏移量对应的记录是在内存还是在外存中,如果在内存中则直接返回数据,如果在外存,则把根据偏移量在外存中数据读取对应的记录到内存中,并返回记录;S24、内存与外存透明切换的列表容器具备获取元数据信息方法,本方法可以提供容器总记录条数,占用内存大小;S25、内存与外存透明切换的列表容器具备容器销毁方法,本方法被调用时,检查被销毁容器是否使用到外部存储,如果使用到,则删除外存的缓存文件;释放内存,并返回。
[0008]进一步的,步骤S3中,判断所述事务缓存Map中是否有存在本次重做SQL的事务的容器的具体过程如下:S31、根据接收的重做SQL的事务ID,判断事务缓存Map中是否有存在本次重做SQL的事务的列表;如果不存在,则在事务还原缓存Map中初始化一个列表容器,并放入将本次重做SQL的事务;S32、如果存在,则从事务还原缓存Map”中获取本次重做SQL的事务的列表容器,并调用本列表容器的容器添加记录接口,把本次重做SQL的事务添加至列表容器中;S33、如果接收重做SQL的事务为commit,本次重做SQL的事务的所有重做SQL已经解析完毕,进入到事务拆分模块;S34、如果接收重做SQL的事务为rollback,本次重做SQL的事务在源库已经撤回,不需要向目标库同步,根据rollback的事务id,从缓存区获取改事务对应的内存与外存透
明切换的列表容器,调用容器销毁方法,释放内存和外存。
[0009]进一步的,步骤S4中判断事务还原模块中还原的重做SQL的事务是否需要拆分的具体过程如下:S41、根据重做SQL的事务id获取对应列表容器内的重做SQL的事务总SQL条数;S42、根据重做SQL的事务总SQL条数,判断是否达到设定的拆分事务大小阈值,如果没有达到拆分事务大小阈值,直接发送给数据投递模块,通过数据投递模块将重做SQL的事务写入到目标数据库;S43、如果达到拆分事务大小阈值,根据设定的拆分事务大小阈值将重做SQL的事务拆分成多个小事务;多个小事务的个数=本次重做SQL的事务的总条数/拆分事务大小阈值;其中,多个小事务个数带有小数位,则自动进位;断点续传信息存储模块记录本事务的元数据信息。
[0010]进一步的,元数据信息包括:小事务包含的SQL条数、小事务中最后一条重做SQL对应的全局唯一的sequence号、原始大事务对应的逻辑日志开始点。
[0011]进一步的,步骤S5中数据投递模块向目标数据库写入事务的过程如下:S51、启动刚开始向目标数据库写入事务时,检查断点续传信息存储模块中是否存储了最后一次成功同步的对应本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种事务型数据库之间巨大事务增量同步方法,其特征在于包括以下步骤:S1、日志流式挖掘模块将业务系统数据库中的逻辑日志进行流式解析,得到重做SQL,并将所述重做SQL交给事务还原模块进行事务还原;S2、初始化事务还原模块的事务缓存Map;S3、所述事务还原模块接收到重做SQL后放入到自身所属事务缓存列表容器中进行缓存,同时,需要判断所述事务缓存Map中是否有存在本重做SQL对应的自身所属事务的缓存列表容器,若有,则调用本列表容器的记录接口并存入,若没有,则新建列表容器并放入事务缓存Map后,把本重做SQL存入新建的列表容器;直到事务还原模块接收到丢弃或保存语句后,标识重做SQL的事务还原完毕;S4、设定拆分事务大小阈值,并判断步骤S3中所述事务还原模块中还原的重做SQL的事务是否需要拆分,事务的重做SQL条数或者占用空间大小达到设定阈值后,把重做SQL的事务拆分多个小事务,并对每个小事务进行重新计算,发送给数据投递模块;若未达到阈值则直接发送给数据投递模块;S5、数据投递模块将接收的事务重做SQL至目标数据库,目标数据库每执行每一个事务的重做SQL后,并记在目标库成功执行的事务对应的逻辑日志点,如果是拆分的小事务并记录当前小事务对应逻辑日志点,以及最后一条重做SQL对应的全局唯一的sequence号。2.根据权利要求1所述的一种事务型数据库之间巨大事务增量同步方法,其特征在于:步骤S1中日志流式挖掘模块进行逻辑日志解析时,需要先检查断点续传信息存储模块是否记录了断点续传信息;断点续传信息包括:最后一次成功同步的对应逻辑日志点,以及最后一条重做SQL对应的全局唯一的sequence号;若存储有;使断点续传信息存储模块记录的逻辑日志点作为起始点开始逻辑日志的解析;若存储没有,则从业务系统数据库中逻辑日志的初始位置开始解析日志。3.根据权利要求2所述的一种事务型数据库之间巨大事务增量同步方法,其特征在于:所述步骤S2中事务还原缓存Map为内存与外存透明切换的列表容器;内存与外存透明切换的列表容器的设计方法如下:S21、根据用户设定的内存与外存透明切换的列表容器最大占用内存大小或者记录条数,初始化一个列表容器,并设置当前条数为0,大小为0,并初始化列表内存区域;S22、内存与外存透明切换的列表容器添加记录接口,当添加记录接口被调用时,内存与外存透明切换的列表容器检查本容器内已经存储的元数据条数和占用内存大小是否超过初始化时设定的阈值,如果没有超过阈值则存放在内存中;如果超过了阈值,本条记录按照规定格式存储到外存中;并更新内存与外存透明切换的列表容器缓存的记录条数和占用内存大小;S23、内存与外存透明切换的列表容器获取并记录接口,当获取记录接口被调用时,根据传入的偏移量,先判断改偏移量对应的记录是在内存还是在外存中,如果在内存中则直接返回数据,如果在外存,则把根据偏移量在外存中数据读取对应的记录到内存中,并返回记录;S24、内存与外存透明切换的列表容器具备获取元数据信息方法,本方法可以提供容器总记录条数,占用内存大小;
S25、内存与外存透明切换的列表容器具备容器销毁方法,本方法被调用时,检查被销毁容器是否使用到外部存储,如果使用到,则删除...

【专利技术属性】
技术研发人员:赵伟田志敏
申请(专利权)人:天津南大通用数据技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1