CN113139017A - 一种数据同步方法、装置、电子设备及存储介质 - Google Patents
一种数据同步方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113139017A CN113139017A CN202110440993.4A CN202110440993A CN113139017A CN 113139017 A CN113139017 A CN 113139017A CN 202110440993 A CN202110440993 A CN 202110440993A CN 113139017 A CN113139017 A CN 113139017A
- Authority
- CN
- China
- Prior art keywords
- data
- batch
- target table
- statement
- write
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 59
- 238000012545 processing Methods 0.000 claims abstract description 51
- 238000013507 mapping Methods 0.000 claims abstract description 20
- 238000003780 insertion Methods 0.000 claims abstract description 13
- 230000037431 insertion Effects 0.000 claims abstract description 13
- 238000004590 computer program Methods 0.000 claims description 9
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 230000005540 biological transmission Effects 0.000 abstract description 8
- 230000008569 process Effects 0.000 description 9
- 230000003247 decreasing effect Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 238000004891 communication Methods 0.000 description 5
- 230000007423 decrease Effects 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000005856 abnormality Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种数据同步方法、装置、电子设备及存储介质,属于数据处理技术领域,所述方法包括:建立源数据库中源表的数据与目标库中目标表的字段映射;将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。本发明通过匹配源表的数据和目标表的字段映射,避免人工配置的繁琐,并且通过切换插入语句和更新语句,可同时满足一次性全量数据传输和增量同步,通过动态调整批量处理条数,在海量数据的大表传输中也能实现批量处理功能。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种数据同步方法、装置、电子设备及存储介质。
背景技术
中国专利(CN109492018A)公开了一种数据同步系统自适应动态调整方法和装置,通过提供了一种数据同步系统自适应动态调整内存缓存的方法以提高数据同步性能。其内存缓存只是用于数据的中转,将数据放入缓存中,可以在当前读取的数据还没有向目标表写完的情况下,可以继续从源数据库中读取数据,调整缓存大小,可以改善读的性能,但是不能改善写的性能。
因此,有必要提供一种数据同步方法,能够兼顾自动化字段配置、支持全量抽取和增量同步的同时,又提供较好的批量处理性能,满足多表大量数据自动化同步的需求。
发明内容
本发明提供一种数据同步方法、装置、电子设备及存储介质,用以解决现有技术中通过调整内存缓存的方法只可改善读的性能而不能改善写的性能的问题。
本发明提供一种数据同步方法,包括:
建立源数据库中源表的数据与目标库中目标表的字段映射;
将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
根据本发明提供的一种数据同步方法,所述根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表,包括:
若所述初始参数的写入模式是执行插入语句,并且所述初始参数的最大批量提交条数为第一预设值;
获取从所述源表读取数据的当前批量提交条数,设所述当前批量提交条数等于所述第一预设值;
向所述目标表执行插入语句,当处理的插入语句的数量等于所述第一预设值时,则请求一次性批量写入所述目标表。
根据本发明提供的一种数据同步方法,所述请求一次性批量写入所述目标表,包括:
判断写入操作是否违反主键约束;
如果是,则将所述写入模式由插入语句切换为更新语句,从当前执行失败的位置继续向所述目标表执行更新语句,以及降低当前批量提交条数以写入所述目标表。
根据本发明提供的一种数据同步方法,所述降低当前批量提交条数,包括:
如果当前批次执行更新语句的执行结果在所述目标表中的条数小于所述当前批次提交的条数,则表示有部分记录未写入所述目标表中,则从所述当前批次将所述写入模式由更新语句切换为插入语句,以及降低当前批量提交条数以继续执行将数据写入所述目标表的操作。
根据本发明提供的一种数据同步方法,所述降低当前批量提交条数以继续执行将数据写入所述目标表的操作,包括:
如果所述当前批次的插入语句全部执行成功,或者所述当前批次的更新语句的执行结果在所述目标表中的条数等于提交的条数,则记下成功写入的记录条数,如果连续成功写入,则连续累计成功写入的记录条数;
当所述累计成功写入的记录条数大于当前批量提交条数时,则调高当前批量提交条数并继续执行将数据写入所述目标表的操作,直到所述源表中的全部记录同步至所述目标表为止。
根据本发明提供的一种数据同步方法,所述从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表,包括:
将从所述源表中读取的数据进行缓存;
从缓存中读取数据,根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表;
如果当前批次数据写入失败,则将所述当前批次的数据存入队列,并降低当前批量提交条数;
基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入。
根据本发明提供的一种数据同步方法,所述基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入之后,包括:
如果所述已降低的批量提交条数继续写入失败,则继续将所述已降低的批量提交条数的数据存入队列,并降低当前批量提交条数;
依次类推,如果一直写入失败,则最后批处理条数会降为1,将单条数据写入所述目标表。
本发明还提供了一种数据同步装置,包括:
字段映射模块,用于建立源数据库中源表的数据与目标库中目标表的字段映射;
语句生成模块,将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
批量处理模块,用于从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述数据同步方法的步骤。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述数据同步方法的步骤。
本发明提供的一种数据同步方法、装置、电子设备及存储介质,通过匹配源表的数据和目标表的字段映射,避免人工配置的繁琐,并且通过切换插入语句和更新语句,可同时满足一次性全量数据传输和增量同步,通过动态调整批量处理条数,在海量数据的大表传输中也能实现批量处理功能。
附图说明
为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的数据同步方法的流程示意图;
图2是本发明提供的一次性批量写入目标表的流程示意图;
图3是本发明提供的违反主键约束的流程示意图;
图4是本发明提供的降低批量提交条数的流程示意图;
图5是本发明提供的写入失败的流程示意图之一;
图6是本发明提供的写入失败的流程示意图之二;
图7是本发明提供的数据同步装置的结构示意图;
图8是本发明提供的一实施例的模块功能结构示意图;
图9是图8的业务流程示意图;
图10是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
本发明提供一种数据同步方法、装置、电子设备及存储介质,能够自动识别和匹配字段映射,能够自动判断和切换插入(insert)、更新(update),并自动动态调整批量处理条数以改善处理速度。
下面结合图1-图10描述本发明所述数据同步方法、装置、电子设备及存储介质。
图1是本发明提供的数据同步方法的流程示意图,如图1所示。一种数据同步方法,包括:
步骤101,建立源数据库中源表的数据与目标库中目标表的字段映射。
其中,所述源表包括:关系型数据库的实体表、视图、SQL查询结果集,以及支持SQL的非关系型数据库的实体表、SQL查询结果集。
其中,所述目标表包括:关系型数据库的实体表,以及支持SQL的非关系型数据库的实体表。
字段映射是为了使得源数据库中源表单数据的表单名称与目标表的字段名称一致,否则在创建数据对象时,会导致数据插入异常。
通过自动匹配源数据库中源表的数据和目标中的字段映射,可避免人工配置的繁琐,并且在多表批量同步的工作中,可极大地减轻了工作量。
步骤102,将目标表的主键字段和目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句。
插入数据库记录是使用INSERT关键字,可将一条语句插入数据库,可以组合SELECT关键字实现插入查询的结果集,插入整张表。比如:INSERT INTO`user`(id,`name`,telephone)VALUES('2','zszxz','1327'),表示插入数据user表字段分别是id,name,telephone;值分别是2,zszxz,1327。
更新数据库记录使用UPDATE关键字。比如:UPDATE student_copy set age=Null,表示更新student_copy表,设置字段age值为null,则可以看见表中所有的学生年龄都是Null。
又如:UPDATE student_copy set age=Null where id=2,表示更新student_copy表,当id=2时,设置字段age值为null,则可以看见表中id为2的学生年龄是Null。
通常在数据库同步过程中,UPDATE语句使用主键字段做WHERE条件,以便准确更新目标表中的唯一一条记录。
需要说明的是,上述所述生成的更新语句(update sql)是根据目标表生成的,所以与源表是实体表还是视图或者是SQL结果集没有关系。
步骤103,从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入目标表。
比如通过源数据库的游标从源表中读取数据。所述系统预设的初始参数,比如系统默认SQL模式为mode1,设置mode1的初始值=“insert”,并且设定mode1的取值只能为“insert”或“update”;动态SQL模型为mode2,设置mode2的初始值=mode1。
现有技术实现数据同步方法包括:
第一种,利用数据库支持的upsert语法的SQL(例如MySQL提供的INSERT...ONDUPLICATE KEY UPDATE)实现一条SQL语句完成数据插入或更新。但是upsert不是标准SQL,只有部分数据库支持upsert语法,具有局限性。
结构化查询语言(Structured Query Language,SQL),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
第二种,先delete(删除)该条数据再insert(插入)该条数据。但是这种办法需要数据源的字段完全覆盖目标表的字段,否则会造成目标表部分字段为空。
第三种,先insert(插入)该条数据,若违反主键约束(主键约束是在表中定义一个主键来唯一确定表中每一行数据的标识符)则update(更新)该条数据。但是这种办法只适合逐条提交,影响数据同步效率,在批量提交时有一条数据失败就会造成该批次全部失败,并且无法识别哪条数据需要update(更新)。
本发明通过系统预设的初始参数自动判断和切换生成的插入语句、更新语句,可以同时满足一次性全量数据传输和增量同步的需求,并且采用自动适应动态调整批量处理数据的条数,在海量数据的大表传输中,也具有较好的批量处理性能。
以下对上述所述步骤103在数据同步中根据出现的执行情况自动判断和切换插入语句或更新语句,以及自动动态调整批量处理数据的条数进行具体描述。
图2是本发明提供的一次性批量写入目标表的流程示意图,如图所示。上述所述步骤103中,所述根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入目标表,包括:
步骤201,若所述初始参数的写入模式是执行插入语句,并且所述初始参数的最大批量提交条数为第一预设值。
比如:初始参writemode(写入模式)是insert(插入语句),maxBatchSize(最大批量提交条数)是100000条(第一预设值)。
步骤202,获取从所述源表读取数据的当前批量提交条数,设所述当前批量提交条数等于所述第一预设值。
比如:获取从所述源表读取数据的当前批量提交条数为BatchSize,判断BatchSize(当前批量提交条数)是否等于第一预设值(比如100000条)。
步骤203,向目标表执行插入语句,当处理的插入语句的数量等于所述第一预设值时,则请求将所述当前批量提交条数一次性批量写入目标表。
假设BatchSize(当前批量提交条数)等于maxBatchSize(最大批量提交条数),则向目标表执行插入语句(insert sql),当处理的插入语句的SQL任务达到100000条(即BatchSize=第一预设值100000条)时,则请求一次性批量写入目标表。
由此可知,本发明在基于自动化字段配置的基础下,通过生成的插入语句或更新语句支持全量抽取(类似于数据迁移或数据复制)和增量同步(同步新增或修改的数据)的同时,还提供较好的批量处理性能,满足多表大量数据自动化同步的需求。
图3是本发明提供的违反主键约束的流程示意图,如图所示。上述所述步骤203中,所述请求一次性批量写入目标表,包括:
步骤301,判断出写入操作违反主键约束。
将所述当前批量提交条数进行一次性批量提交,直到遇到写入操作违反主键约束,系统根据判断出违反主键约束而自动切换SQL语句,即由最初系统默认执行的插入语句自动切换为更新语句。
主键约束(PRIMARY KEY),主键是用于唯一地标识表中的每一条记录,可以定义一列或多列为主键;主键是不可能(或很难)更新;主键列上没有任何两行具有相同值(即重复值),不允许空(NULL)。
比如,在创建表的同时创建主键约束:
create table表名(
列名1数据类型primary key,
列名2数据类型,
)。
比如,在已经存在的表,添加主键约束:
alter table表名modify列名数据类型primary key。
步骤302,将所述写入模式由插入语句切换为更新语句,从当前执行失败的位置继续向目标表执行更新语句(update sql),以及降低当前批量提交条数(BatchSize)以写入目标表。
优选的,可按照预设比例为10降低当前批量提交条数。比如,当前批量提交条数为100000条数据写入失败,则可降低当前批量提交条数为10000(即由100000条降低为10000条)。
由此可知,本发明可根据执行情况自适应动态调整批量处理条数,在海量数据的大表传输中,也能得到较好的批量处理性能。
图4是本发明提供的降低批量提交条数的流程示意图,如图所示。上述所述步骤302中,所述降低当前批量提交条数,包括:
步骤401,如果当前批次执行更新语句(update sql)的执行结果在目标表中实际影响的条数小于所述当前批次提交的条数,则表示有部分记录未写入目标表中(即有部分记录在目标表中不存在)。
步骤402,从所述当前批次将所述写入模式(writemode)由更新语句(update)切换为插入语句(insert),以及降低当前批量提交条数(BatchSize)以继续执行将数据写入目标表的操作。
需要说明的是,如果步骤402中所述当前批次(所述当前批次是指已降低当前批量提交条数并再次提交的批次)的插入语句全部执行成功,或者所述当前批次的更新语句的执行结果在目标表中实际影响的条数等于提交的条数,则记下成功写入目标表的记录条数,如果连续成功写入,则连续累计成功写入目标表的记录条数。
当累计成功写入目标表的记录条数大于当前批量提交条数(BatchSize)时,则自动调高当前批量提交条数(BatchSize)并继续执行将数据写入目标表的操作,直到所述源表中的全部记录同步至目标表为止。
由此可知,本发明可根据累计成功写入的记录条数,自动适应动态调整批量处理条数,在海量数据的大表传输中,也具有较好的批量处理性能。
图5是本发明提供的写入失败的流程示意图之一,如图所示。上述所述步骤103中,所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入目标表,包括:
步骤501,将从所述源表中读取的数据进行缓存,以保证所述数据在写入目标表失败时无需从所述源表中重新读取数据。
可通过缓存当前批量提交条数,以保证该批数据写入目标表失败后不用从数据源重新读取数据。
步骤502,从缓存中读取数据,根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入目标表。
步骤503,如果当前批次数据写入失败,则将所述当前批次的数据存入队列,并降低当前批量提交条数。
比如,当前批次100000条数据写入失败,则将100000条数据存入队列,并降低批处理条数为10000,分10次每次10000条进行重试,
本发明所述队列的作用是:当采用多线程或者分布式处理的模式时,读和写可能是异步的,将写入失败的数据存入队列,在队列没有处理完之前可以暂停读数据,优先处理队列的数据写入,可避免资源竞争,保证效率。
步骤504,基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入。
比如基于每次已降低的批量提交条数(10000),继续使用所述队列汇总的数据(100000)并将队列存储的100000条数据分成10次重试写入。
图6是本发明提供的写入失败的流程示意图之二,如图所示。上述所述步骤504中,所述基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入之后,包括:
步骤601,如果所述已降低的批量提交条数继续写入失败,则继续将所述已降低的批量提交条数的数据存入队列,并降低当前批量提交条数。
比如,当执行步骤504中分批次重新写入时,再次遇到写入操作失败,那么失败的10000条数据再写入队列,并继续降低批处理条数为1000(即将10000条数据降低为1000条数据),并分10次每次1000条进行重试写入。
步骤602,依次类推,如果一直写入失败,则最后批处理条数会降为1,即将单条数据写入目标表。
当最后批处理条数会降至1,也就是单条数据写入,就不存在写入失败,因为写入的逻辑初始时是先执行插入语句(insert),当违反唯一约束或主键约束,则切换到更新语句(update),所以单条数据要么insert成功要么update成功,然后就会进入连续成功写入的状态。
需要说明的是,主键约束(PRIMARY KEY)的特点是:主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键;主键是不可能(或很难)更新;主键列上没有任何两行具有相同值(即重复值),不允许空(NULL);主健可作外健,唯一索引不可。唯一性约束(UNIQUE)的特点是:唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束;唯一性约束只要唯一就可以更新;表中任意两行在指定列上都不允许有相同的值,允许空(NULL);一个表上可以放置多个唯一性约束。
当进入连续成功的状态,可通过日志记录数据同步状态,比如如上述所述的记录连续累计成功写入的记录条数。
当连续写入成功条数大于当前批处理条数,并且当前批处理条数先前调低过(假设先前已经调低到100条数据),系统就会自动调高批处理条数(比如将先前调低的100条数据调高至1000条数据),直至恢复初始设定值(即第一预设值,比如100000条数据),从而加快数据处理速度。
下面对本发明提供的数据同步装置进行描述,下文描述的数据同步装置与上文描述的数据同步方法可相互对应参照。
图7是本发明提供的数据同步装置的结构示意图,如图所示。一种数据同步装置700,包括字段映射模块710、语句生成模块720以及批量处理模块730,其中,
字段映射模块710,用于建立源数据库中源表的数据与目标库中目标表的字段映射。
语句生成模块720,将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
批量处理模块730,用于从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
优选的,所述批量处理模块730,还用于执行步骤:
若所述初始参数的写入模式是执行插入语句,并且所述初始参数的最大批量提交条数为第一预设值;
获取从所述源表读取数据的当前批量提交条数,设所述当前批量提交条数等于所述第一预设值;
如果是,则向所述目标表执行插入语句,当处理的插入语句的数量等于所述第一预设值时,则请求一次性批量写入所述目标表。
优选的,所述批量处理模块730,还用于执行步骤:
判断写入操作是否违反主键约束;
如果是,则将所述写入模式由插入语句切换为更新语句,从当前执行失败的位置继续向所述目标表执行更新语句,以及降低当前批量提交条数以写入所述目标表。
优选的,所述批量处理模块730,还用于执行步骤:
如果当前批次执行更新语句的执行结果在所述目标表中的条数小于所述当前批次提交的条数,则表示有部分记录未写入所述目标表中,则从所述当前批次将所述写入模式由更新语句切换为插入语句,以及降低当前批量提交条数以继续执行将数据写入所述目标表的操作。
优选的,所述批量处理模块730,还用于执行步骤:
如果所述当前批次的插入语句全部执行成功,或者所述当前批次的更新语句的执行结果在所述目标表中的条数等于提交的条数,则记下成功写入的记录条数,如果连续成功写入,则连续累计成功写入的记录条数;
当所述累计成功写入的记录条数大于当前批量提交条数时,则调高当前批量提交条数并继续执行将数据写入所述目标表的操作,直到所述源表中的全部记录同步至所述目标表为止。
优选的,所述批量处理模块730,还用于执行步骤:
将从所述源表中读取的数据进行缓存,以保证所述数据在写入所述目标表失败时无需从所述源表中重新读取数据;
从缓存中读取数据,根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表;
如果当前批次数据写入失败,则将所述当前批次的数据存入队列,并降低当前批量提交条数;
基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入。
优选的,所述批量处理模块730,还用于执行步骤:
如果所述已降低的批量提交条数继续写入失败,则继续将所述已降低的批量提交条数的数据存入队列,并降低当前批量提交条数;
依次类推,如果一直写入失败,则最后批处理条数会降为1,即将单条数据写入所述目标表。
以下通过一实施例说明本发明所述数据同步装置的模块功能结构和数据同步方法的业务流程。
图8是本发明提供的一实施例的模块功能结构示意图,如图8所示。一种数据同步装置800,包括数据库通用读写模块801和业务逻辑处理和数据加工模块802。其中,
数据库通用读写模块801,包括数据读模块803、数据写模块804以及SQL模块805。
其中,数据读模块803负责与数据源交互,进行数据读取工作。
其中,数据写模块804负责与目标库交互,进行数据写入工作;
其中,SQL模块805实现根据目标表的表结构和数据源的数据进行字段映射以及SQL语句的自动生成。SQL模块805依赖于数据写模块804从目标库获得表结构。
业务逻辑处理和数据加工模块802包括批量控制模块806、缓存模块807、数据加工模块808、队列模块809以及日志模块810。
其中,批量控制模块806为设置和处理动态调整参数的主干功能。
其中,缓存模块807处理当前批次的数据的缓存,以保证该批数据写入失败后不用从数据源重新读取数据。
其中,数据加工模块808为数据的加工功能,也就是ETL(Extract-Transform-Load,数据仓库技术)流程中的Transform。ETL用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。
其中,队列模块809,用于处理当前批次数据的队列,当该批次数据写入失败之后,会把该批数据存入队列,然后降低批处理条数,继续用队列中的数据分批重试,比如当前批次100000条数据写入失败,100000条数据存入队列,降低批处理条数为10000,分10次每次10000条进行重试,当再次遇到失败,失败的10000条数据写入队列,降低批处理条数为1000,分10次每次1000条进行重试,依次类推,一直连续失败的话,最后批处理条数会降至1,也就是单条数据写入,就不存在失败,因为写入的逻辑是先insert,当违反唯一约束就update,单条数据要么insert成功要么update成功,然后就进入连续成功的状态。
其中,日志模块810,用于记录数据同步状态。当连续写入成功条数大于当前批处理条数,并且当前批处理条数先前已经调低过,则自动调高批处理条数,直至恢复初始设定值,从而加快处理速度。
图9是图8的业务流程示意图,如图9所示。
(1)初始变量设置:
源数据库A;
目标库B;
源表t1;
目标表t2;
源表记录总数s;
最大批量处理条数maxBatchSize(简称max),设max初始值为:max=100000;
批量处理条数n,设n初始值为n=max;
本次成功条数p,设p初始值为p=0;
累计成功条数q,设q初始值为q=0;
默认SQL模式mode1,设mode1初始值mode1="insert"(取值只能为"insert"或"update");
动态SQL模式mode2,设mode2初始值mode2=mode1。
(2)业务处理流程:
步骤1,数据读取模块803查询源数据库A,读取源表t1表记录总数s。
步骤2,数据读取模块803返回记录总数给批量控制模块806,记为s。
步骤3,批量控制模块806判断s<=n?如果成立,设n=s;如果不成立,n保持前值不变,请求日志模块810记录日志。
步骤4,批量控制模块806请求数据读取模块803取n条数据。
步骤5,数据读取模块803查询源数据库A,读取源表t1表的n条记录,并返回给批量控制模块806。
步骤6,批量控制模块806存入数据到缓存模块807,并且请求数据写模块804写n条数据。
步骤7,数据写模块804请求SQL模块805,获取SQL。
步骤8,SQL模块805查询目标库B,读取目标表t2的表结构,分析表结构,获得主键字段和非主键字段,生成insert sql和update sql。
步骤9,SQL模块805返回sql给数据写模块804。
步骤10,数据写模块804请求队列模块809,判断队列模块809是否有数据。如果否,则请求缓存模块807取n条数据,mode2=mode1;如果是,则请求队列模块809取n条数据。
步骤11,队列模块809/缓存模块807返回n条数据给数据写模块804。
步骤12,数据写模块804请求数据加工模块808进行加工数据。
步骤13,数据加工模块808返回加工后数据给数据写模块804。
步骤14,数据写模块804判断mode2的值?如果是"insert",发送insert sql给目标库B,请求一次性写入n条数据;如果是"update",发送update sql给目标库B,请求一次性更新n条数据。
步骤15,数据写模块804返回数据库执行结果给批量控制模块106。
步骤16,批量控制模块806判断mode2和返回结果?
如果返回结果无异常,数据处理成功,记p=n,q=q+n;判断q>=s,如果不成立,流程跳转到步骤4继续执行,如果成立,结束。
如果返回结果异常,设q=0,当mode2="insert"时,异常为“违反唯一约束”,或者mode2="update",部分更新成功(部分数据在目标表中不存在该主键的记录),记p=受影响的记录数,p<n时,前n条记录存入队列模块809,设n=n/10(如果n/10<1,则n=1),此时n=10000,mode2=mode2取反,即mode2前值为"insert",则此时应为"update",反之亦然,流程跳转到步骤4继续执行。
如果其它未知异常,程序结束,退出。
步骤17,批量控制模块806请求日志模块810记日志。
步骤18,当出现连续异常,即步骤17循环发生异常,n会逐步递减至1000、100、10,直至1,当n等于1时,执行结果要么是mode2=“insert”,insert sql执行成功,要么是mode2="update",update sql执行成功,并且受影响的记录数为1=n,即跳出循环,流程跳转到步骤4继续执行。
步骤19,批量控制模块806请求日志模块810分析日志,当出现异常之后,又出现连续执行成功,批量控制模块106判断n<max?当n<max,并且q>n*10,设n=n*10(如果n*10>=max,则n=max)。
图10示例了一种电子设备的实体结构示意图,如图10所示,该电子设备可以包括:处理器(processor)1010、通信接口(Communications Interface)1020、存储器(memory)1030和通信总线1040,其中,处理器1010,通信接口1020,存储器1030通过通信总线1040完成相互间的通信。处理器1010可以调用存储器1030中的逻辑指令,以执行上述所述数据同步方法,所述方法包括:
建立源数据库中源表的数据与目标库中目标表的字段映射;
将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
此外,上述的存储器1030中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的所述数据同步方法,所述方法包括:
建立源数据库中源表的数据与目标库中目标表的字段映射;
将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各提供的所述数据同步方法,所述方法包括:
建立源数据库中源表的数据与目标库中目标表的字段映射;
将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种数据同步方法,其特征在于,包括:
建立源数据库中源表的数据与目标库中目标表的字段映射;
将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
2.根据权利要求1所述的数据同步方法,其特征在于,所述根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表,包括:
若所述初始参数的写入模式是执行插入语句,并且所述初始参数的最大批量提交条数为第一预设值;
获取从所述源表读取数据的当前批量提交条数,设所述当前批量提交条数等于所述第一预设值;
向所述目标表执行插入语句,当处理的插入语句的数量等于所述第一预设值时,则请求一次性批量写入所述目标表。
3.根据权利要求2所述的数据同步方法,其特征在于,所述请求一次性批量写入所述目标表,包括:
判断写入操作是否违反主键约束;
如果是,则将所述写入模式由插入语句切换为更新语句,从当前执行失败的位置继续向所述目标表执行更新语句,以及降低当前批量提交条数以写入所述目标表。
4.根据权利要求3所述的数据同步方法,其特征在于,所述降低当前批量提交条数,包括:
如果当前批次执行更新语句的执行结果在所述目标表中的条数小于所述当前批次提交的条数,则表示有部分记录未写入所述目标表中,则从所述当前批次将所述写入模式由更新语句切换为插入语句,以及降低当前批量提交条数以继续执行将数据写入所述目标表的操作。
5.根据权利要求4所述的数据同步方法,其特征在于,所述降低当前批量提交条数以继续执行将数据写入所述目标表的操作,包括:
如果所述当前批次的插入语句全部执行成功,或者所述当前批次的更新语句的执行结果在所述目标表中的条数等于提交的条数,则记下成功写入的记录条数,如果连续成功写入,则连续累计成功写入的记录条数;
当所述累计成功写入的记录条数大于当前批量提交条数时,则调高当前批量提交条数并继续执行将数据写入所述目标表的操作,直到所述源表中的全部记录同步至所述目标表为止。
6.根据权利要求1所述的数据同步方法,其特征在于,所述从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表,包括:
将从所述源表中读取的数据进行缓存;
从缓存中读取数据,根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表;
如果当前批次数据写入失败,则将所述当前批次的数据存入队列,并降低当前批量提交条数;
基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入。
7.根据权利要求6所述的数据同步方法,其特征在于,所述基于已降低的批量提交条数,继续使用所述队列中的数据分批重试写入之后,包括:
如果所述已降低的批量提交条数继续写入失败,则继续将所述已降低的批量提交条数的数据存入队列,并降低当前批量提交条数;
依次类推,如果一直写入失败,则最后批处理条数会降为1,将单条数据写入所述目标表。
8.一种数据同步装置,其特征在于,包括:
字段映射模块,用于建立源数据库中源表的数据与目标库中目标表的字段映射;
语句生成模块,将所述目标表的主键字段和所述目标表与所述源表中字段名相同的字段进行匹配,生成插入语句和更新语句;
批量处理模块,用于从所述源表中读取数据,并根据系统预设的初始参数切换插入语句或更新语句调整所述数据的批量提交条数以写入所述目标表。
9.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述数据同步方法的步骤。
10.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述数据同步方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110440993.4A CN113139017A (zh) | 2021-04-23 | 2021-04-23 | 一种数据同步方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110440993.4A CN113139017A (zh) | 2021-04-23 | 2021-04-23 | 一种数据同步方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113139017A true CN113139017A (zh) | 2021-07-20 |
Family
ID=76811789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110440993.4A Pending CN113139017A (zh) | 2021-04-23 | 2021-04-23 | 一种数据同步方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113139017A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115048459A (zh) * | 2022-06-20 | 2022-09-13 | 中国平安财产保险股份有限公司 | 数据批量同步方法、装置、电子设备及存储介质 |
CN116361391A (zh) * | 2023-03-30 | 2023-06-30 | 中电云数智科技有限公司 | 一种数据同步表结构异常检测及修复方法和装置 |
CN116501789A (zh) * | 2023-06-28 | 2023-07-28 | 本原数据(北京)信息技术有限公司 | 数据库数据写入方法和装置、电子设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567823B1 (en) * | 2000-08-07 | 2003-05-20 | Corigin Ltd. | Change propagation method using DBMS log files |
CN104346377A (zh) * | 2013-07-31 | 2015-02-11 | 克拉玛依红有软件有限责任公司 | 一种基于唯一标识的数据集成和交换方法 |
CN109960942A (zh) * | 2019-03-27 | 2019-07-02 | 厦门商集网络科技有限责任公司 | 基于数据库连接池的数据库数据加解密方法及其系统 |
-
2021
- 2021-04-23 CN CN202110440993.4A patent/CN113139017A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6567823B1 (en) * | 2000-08-07 | 2003-05-20 | Corigin Ltd. | Change propagation method using DBMS log files |
CN104346377A (zh) * | 2013-07-31 | 2015-02-11 | 克拉玛依红有软件有限责任公司 | 一种基于唯一标识的数据集成和交换方法 |
CN109960942A (zh) * | 2019-03-27 | 2019-07-02 | 厦门商集网络科技有限责任公司 | 基于数据库连接池的数据库数据加解密方法及其系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115048459A (zh) * | 2022-06-20 | 2022-09-13 | 中国平安财产保险股份有限公司 | 数据批量同步方法、装置、电子设备及存储介质 |
CN116361391A (zh) * | 2023-03-30 | 2023-06-30 | 中电云数智科技有限公司 | 一种数据同步表结构异常检测及修复方法和装置 |
CN116361391B (zh) * | 2023-03-30 | 2024-05-07 | 中电云计算技术有限公司 | 一种数据同步表结构异常检测及修复方法和装置 |
CN116501789A (zh) * | 2023-06-28 | 2023-07-28 | 本原数据(北京)信息技术有限公司 | 数据库数据写入方法和装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113139017A (zh) | 一种数据同步方法、装置、电子设备及存储介质 | |
US10031935B1 (en) | Customer-requested partitioning of journal-based storage systems | |
US10338917B2 (en) | Method, apparatus, and system for reading and writing files | |
US8380702B2 (en) | Loading an index with minimal effect on availability of applications using the corresponding table | |
US9916313B2 (en) | Mapping of extensible datasets to relational database schemas | |
US8392423B2 (en) | Data set index record preservation | |
US9811577B2 (en) | Asynchronous data replication using an external buffer table | |
US11487714B2 (en) | Data replication in a data analysis system | |
CN110990420B (zh) | 数据查询方法、装置 | |
JP2020535559A (ja) | リソーススケジューリング方法、スケジューリングサーバ、クラウドコンピューティングシステム、及び記憶媒体 | |
US8341132B2 (en) | System and method for applying deltas in a version control system | |
US8874519B1 (en) | Method and apparatus for restoring a table in a database | |
US11928089B2 (en) | Data processing method and device for distributed database, storage medium, and electronic device | |
EP3796185B1 (en) | Virtual database tables with updatable logical table pointers | |
US11250022B1 (en) | Offline index builds for database tables | |
EP4170509A1 (en) | Method for playing back log on data node, data node, and system | |
US12019605B2 (en) | Immediately-consistent lock-free indexing for distributed applications | |
US20200089792A1 (en) | Consistency checks between database systems | |
CN116108057B (zh) | 一种分布式数据库访问方法、装置、设备及存储介质 | |
US10235407B1 (en) | Distributed storage system journal forking | |
US10083192B2 (en) | Deleted database record reuse | |
CN114817320A (zh) | 一种缓存处理方法和装置 | |
US8935294B2 (en) | Minimizing computer resource usage when converting data types of a table column | |
CN103685350B (zh) | 存储系统的同步方法及相关的设备 | |
CN112835887A (zh) | 数据库管理方法、装置、计算设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210720 |