一种基于行变更的面向大事务的分片执行方法和装置制造方法及图纸

技术编号:24251460 阅读:31 留言:0更新日期:2020-05-22 23:31
本公开公开了一种基于行变更的面向大事务的分片执行方法和装置,包括:获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中分片执行,第二数据库同步更新行变更数据。通过将多条行变更对象合并为一条大事务对象,对大事务对象进行分片,解析成sql语句分片执行;并且行变更推送、事务推送、事务执行并行处理,保证行变更数据同步的实时性,提高同步效率。

A partition execution method and device for large transaction based on row change

【技术实现步骤摘要】
一种基于行变更的面向大事务的分片执行方法和装置
本公开涉及计算机
,具体涉及一种基于行变更的面向大事务的分片执行方法和装置。
技术介绍
本部分的陈述仅仅是提供了与本公开相关的
技术介绍
信息,不必然构成在先技术。行变更,即数据库事务执行引起的数据行变化,一条行变更包括行所属用户、行所属表、变更类型(删除,新增或者更新)以及变更前后的行数据等。通过读取被同步数据库的所有行变更,然后将行变更转化为相应的sql语句在另一个数据库上执行的方式实现了两个数据库之间的数据同步;同时为了保证事务的完整性,选择一次性读入一个事务的所有行变更,然后将基于行变更转化得到的所有sql语句在一个事务中执行,最后一次性提交。但当遇到大事务时,大事务即引起了大量的行变更的事务,例如一个事务更改了上千万或者上亿行数据,此时如果一次性读入所有行变更,运行环境需要有非常高的内存配置,但是通常情况下,运行环境没有那么高的内存配置,即使有条件配置那么高的内存,但是大事务发生的概率是非常小的,这种情况下就会造成资源的浪费。如何在不修改运行环境的内存配置的前提下,基于行变更实现大事务的同步,同时保证事务的完整性是目前需要解决的问题。
技术实现思路
为了解决上述问题,本公开提出了一种基于行变更的面向大事务的分片执行方法和装置,通过对大事务对象进行分片,解析成sql语句分片执行;并且行变更推送、事务推送、事务执行并行处理,保证行变更数据同步的实时性,提高同步效率。为了实现上述目的,本公开采用如下技术方案:r>第一方面,本公开提供一种基于行变更的面向大事务的分片执行方法,包括:获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中分片执行,第二数据库同步更新行变更数据。作为可能的一些实现方式,所述将多条行变更对象转化为一条事务对象推送到事务队列包括:初始化行变更列表,从行变更队列中提取行变更对象,存储到行变更列表中;从行变更队列获取头部行变更对象,并将该行变更对象从行变更队列中删除,判断该行变更对象是否为空;若该行变更对象为空,则将行变更列表中所有行变更对象组成一个事务对象,并推送到事务列表中,且事务对象占用内存大小设置为所包含所有行变更对象内存大小之和,清空行变更列表;若该行变更数据不为空,将其添加到行变更列表中,返回继续操作从行变更队列中删除头部行变更对象,判断该行变更对象是否为空。作为可能的一些实现方式,所述第二数据库同步更新行变更数据包括:将大事务对象划多个分片事务对象,从事务队列中删除头部分片事务对象,判断该分片事务对象是否为空;若为空,则结束;若不为空,将该分片事务对象中所有行变更转化为sql语句并在第二数据库中执行;执行成功后,判断该分片事务对象是否是大事务对象的最后一个分片,若是,提交当前事务;否则,返回继续操作从事务队列中删除头部分片事务对象,判断该分片事务对象是否为空。第二方面,本公开提供一种基于行变更的面向大事务的分片执行装置,包括:行变更推送模块,其用于获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;事务推送模块,其用于从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;事务执行模块,其用于对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中分片执行,第二数据库同步更新行变更数据。第三方面,本公开提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现一种基于行变更的面向大事务的分片执行方法所述的步骤。第四方面,本公开提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现一种基于行变更的面向大事务的分片执行方法所述的步骤。与现有技术相比,本公开的有益效果为:通过将大事务对象进行分片,对分片事务对象解析成sql语句并分片执行,降低对运行环境的内存配置要求,避免高内存的资源浪费;对大事务对象分片处理,即保证了行变更数据同步的速度,同时也保证了事务对象的完整性;行变更推送、事务推送、事务执行并行处理,同样保证行变更数据同步的实时性,提高同步效率。附图说明构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。图1是一种基于行变更的面向大事务的分片执行方法的流程示意图;图2是一种基于行变更的面向大事务的分片执行装置的结构示意图;图3为行变更推送模块的执行流程图;图4为事务推送模块的执行流程图;图5为事务执行模块的执行流程图。具体实施方式:下面结合附图与实施例对本公开做进一步说明。应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属
的普通技术人员通常理解的相同含义。需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。实施例1本公开提供一种基于行变更的面向大事务的分片执行方法,本实施例包括如下步骤:S1:获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;S2:从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;S3:对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中执行,第二数据库同步更新行变更数据。如图2-5所示,图中的名词含义解释如下:CURRENT_MEM_SIZE:运行环境中所有未执行的行变更内存占用总量;MAX_MEM_SIZE:运行环境中允许存储的所有未执行行变更的内存占用量最大值,该值可根据具体的运行环境动态设定;Row:行变更对象,包括行变更所属用户、所属表、变更类型(insert、update、delete)以及变更前后的行数据;Transaction:事务对象,包括多个行变更对象数据,存在的意义是为了一次批量执行多个行变更。步骤S1中包括:S101:读取行变更数据到运行环境中,并设置未执行的行变更内存占用总量;对目前系统运行环境中读取的所有未被执行的行变更数据总的内存占用量的一个记录本文档来自技高网...

【技术保护点】
1.一种基于行变更的面向大事务的分片执行方法,其特征在于,包括:/n获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;/n从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;/n对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中分片执行,第二数据库同步更新行变更数据。/n

【技术特征摘要】
1.一种基于行变更的面向大事务的分片执行方法,其特征在于,包括:
获取被同步数据库的行变更数据,将其转化为行变更对象推送到行变更队列中;
从行变更队列中提取行变更对象,将多条行变更对象转化为一条事务对象推送到事务队列;
对大事务对象进行分片,从事务队列中获取分片事务对象,将其解析成相应的sql语句在第二数据库中分片执行,第二数据库同步更新行变更数据。


2.如权利要求1所述的一种基于行变更的面向大事务的分片执行方法,其特征在于,
所述推送到行变更队列中包括:
读取行变更数据,并设置未执行的行变更内存占用总量;
将行变更数据转化为行变更对象推送到行变更队列中;
比较未执行的行变更内存占用总量与预先设定的允许存储的未执行行变更的内存占用量最大值,若前者大于后者,则结束;否则重新设置未执行的行变更内存占用总量。


3.如权利要求1所述的一种基于行变更的面向大事务的分片执行方法,其特征在于,
所述将多条行变更对象转化为一条事务对象推送到事务队列包括:
初始化行变更列表,从行变更队列中提取行变更对象,存储到行变更列表中;
从行变更队列获取头部行变更对象,并将该行变更对象从行变更队列中删除,判断该行变更对象是否为空;
若该行变更对象为空,则将行变更列表中所有行变更对象组成一个事务对象,并推送到事务列表中,且事务对象占用内存大小设置为所包含所有行变更对象内存大小之和,清空行变更列表;
若该行变更数据不为空,将其添加到行变更列表中,返回继续操作从行变更队列中删除头部行变更对象,判断该行变更对象是否为空。


4.如权利要求3所述的一种基于行变更的面向大事务的分片执行方法,其特征在于,
所述若该行变更对象为空,在组成一个事务对象之前包括:
比较未执行的行变更内存占用总量与预先设定的允许存储的未执行行变更的内存占用量最大值,若前者大于后者,则将行变更列表中所有行变更对象组成一个事务对象,并推送到事务列表中,且事务对象占用内存大小设置为所包含所有行变更对象内存大小之和,清空行变更列表;
否则,返回继续操作从行变更队列中删除头部行变更对象,判断该行变更对象是否为空。


5.如权利要求3所述的一种基于行变更的面向大事务的分片执行方法,其特征在于,
所述若该行变更数据不为...

【专利技术属性】
技术研发人员:钱进张世栋于秋波徐喆郭斌赵永光巫双果宋婷婷张雪卫
申请(专利权)人:山大地纬软件股份有限公司
类型:发明
国别省市:山东;37

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

1