CN114297216B - 数据同步方法及其装置、计算机存储介质、电子设备 - Google Patents
数据同步方法及其装置、计算机存储介质、电子设备 Download PDFInfo
- Publication number
- CN114297216B CN114297216B CN202111663126.3A CN202111663126A CN114297216B CN 114297216 B CN114297216 B CN 114297216B CN 202111663126 A CN202111663126 A CN 202111663126A CN 114297216 B CN114297216 B CN 114297216B
- Authority
- CN
- China
- Prior art keywords
- instruction
- synchronization
- instructions
- equivalent
- data table
- 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.)
- Active
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据同步方法及其装置、计算机存储介质、电子设备,其中,数据同步方法包括:对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,源数据表和目标数据表之间的数据同步,保证了源数据表和目标数据表之间数据的一致性。
Description
技术领域
本申请涉及数据库技术领域,具体涉及一种数据同步方法及其装置、计算机存储介质、电子设备。
背景技术
端到端的数据同步可以应用到很多场景,比如客户之间同步数据,部门之间同步数据等。为了保证数据同步的实时、高效性,避免产生积压,数据同步一般都是并行执行,但是并行问题必定会带来各个同步指令执行的先后不确定性,在并行执行多个同步指令时时,指向相同主键的会分配到同一个任务进行执行,而指向不同的主键的同步指令会分配到不同的任务执行,为此,对于多个同步指令中指向不同主键但是本质上是要对设置了唯一索引的同一数据进行同步的不同同步指令就会分配到不同的任务并行执行,由此导致同步指令乱序的问题,进而会导致同步失败的情形,进一步导致数据的不一致性。
发明内容
本申请实施例提供一种数据同步方法及其装置、计算机存储介质、电子设备,用以克服或者缓解现有技术中存在的上述技术问题。
本申请采用的技术方案为:
一种数据同步方法,其包括:
对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;
对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;
根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
可选地,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令,包括:
基于第一指令处理中间件,对所述源同步指令序列进行识别,以从中确定出所述实际更新指令;
对所述实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令。
可选地,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令之前,包括:从对所述对源同步指令序列进行缓存的第二指令处理中间件获取所述源同步指令序列。
可选地,所述对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,包括:
通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉;
将在同一时间窗内捕捉到的指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列。
可选地,所述将在同一时间窗内捕捉到的指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,包括:
确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:实时确定同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:实时删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:确定在同一时间窗内捕捉到的指令并组成一个集合,从所述集合中确定指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:从所述集合中删除所有所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,若针对多个主键在目标数据表中指向的数据进行同步,则所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:
将所述针对多个主键在目标数据表中指向的数据进行的同步进行并行多任务划分,以使每个任务运行时对部分主键在目标数据表中指向的数据进行同步,且在同一任务中针对同一主键在目标数据库指向的数据先执行删除后执行插入的方式,以进行源数据表和目标数据表之间的数据同步。
可选地,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:
在同一任务中,对所有主键在目标数据表中的数据先执行批删除后执行批插入操作的方式,运行所述有效同步指令序列,以进行源数据表和目标数据表之间的数据同步。
可选地,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:响应于向所述目标数据表插入数据失败,将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,以重新进行数据同步。
可选地,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:判断进行源数据表和目标数据表之间的数据同步是否出现唯一索引冲突,若出现,则执行所述响应于向所述目标数据表插入数据失败的步骤。
一种数据同步装置,其包括:
第一处理单元,用于对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;
第二处理单元,用于对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;
第三处理单元,用于根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
一种计算机存储介质,所述计算机存储介质上存储有计算机可执行程序,所述计算机可执行程序被运行以实施本申请实施例任一所述的方法。
一种电子设备,所述电子设备包括存储器以及处理器,所述存储器上用于存储计算机可执行程序,所述处理器用于运行所述计算机可执行程序以实施本申请实施例任一所述的方法。
本申请实施例,通过对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。通过对实际更新指令进行转换处理生成等效插入指令、等效删除指令,再与实际等效插入指令或等效删除指令进行合并,从而使得指向相同主键的插入指令为一条插入指令或者一条删除指令,或者一条先执行的删除指令和一条后执行的插入指令,从而有效地避免了现有技术中由于出现乱序导致无法源数据表和目标数据表之间的数据同步,保证了源数据表和目标数据表之间数据的一致性。
附图说明
图1为本申请实施例一应用场景的示意图;
图2为本申请实施例一应用场景的示意图;
图3A为本申请实施例中数据同步方法的流程示意图;
图3B为本申请实施例中实际更新指令进行转换处理的流程示意图;
图3C为本申请实施例中指令合并处理的流程示意图;
图3D为本申请实施例中步骤S322的流程示意图;
图4为本申请实施例一种数据同步装置的结构示意图;
图5为本申请实施例一种电子设备的结构示意图;
具体实施方式
为使本申请要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本申请实施例,通过对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。通过对实际更新指令进行转换处理生成等效插入指令、等效删除指令,再与实际等效插入指令或等效删除指令进行合并,从而使得指向相同主键的插入指令为一条插入指令或者一条删除指令,或者一条先执行的删除指令和一条后执行的插入指令,从而有效地避免了现有技术中由于出现乱序导致无法源数据表和目标数据表之间的数据同步,保证了源数据表和目标数据表之间数据的一致性。
具体地,在并行执行多个多个同步指令指向不同的主键的同步指令但是本质上是要对设置了唯一索引的数据进行同步的场景中,分配到不同的任务并行执行时,比如两条实际插入指令:insert(2,1),insert(1,1),以及一条实际删除指令:delete(1,1),其中,insert(2,1)中逗号之前的2为主键,逗号之后的1为唯一索引对应的数据,该数据具有唯一索引,insert(1,1)、delete(1,1)中逗号之前的1为主键,逗号1为同一唯一索引对应的数据,该数据具有唯一索引,即数据不能相同。这三条同步指令在源数据表的执行先后顺序为:insert(1,1)、delete(1,1)、insert(2,1)。而在同步时比如基于Hash分区分配任务的话,由于主键不同,insert(2,1)会分配到一个任务上执行,而insert(1,1)、delete(1,1)均会分配到到另一任务上执行,存在如下乱序的情形:insert(2,1)先于insert(1,1),再执行delete(1,1),由于delete(1,1)是最后执行,因此,insert(2,1)执行成功会向目标数据表中插入了对应主键为2,唯一索引对应数据为1的一条数据,而执行insert(1,1)时,由于在该同步指令中,唯一索引对应数据又是1,由此会出现唯一索引导致的同步冲突,导致insert1(1,1)执行失败,之后,执行delete(1,1)时,又删除掉了insert(2,1)时插入到目标数据表中的数据。由此可见,在数据同步时,insert(1,1)和insert(2,1)对应的数据会全部丢失。
针对上述乱序情形,基于本申请实施例的方案,针对主键同为1的insert(1,1)以及晚于insert(1,1)执行的delete(1,1)进行合并处理,从而可之间删除掉insert(1,1)和delete(1,1,),即在数据同步时无需执行insert(1,1)和delete(1,1,),因此,不会发生上述第一乱序情形中insert(1,1)执行失败,以及最后执行delete(1,1)时删除掉insert(2,1)时插入到目标数据表中的数据的情形,使得目标数据表中会保留对源数据表操作insert(2,1)时的数据,从而实现了源数据表和目标数据表之间的数据同步,保证了源数据表和目标数据表的一致性。
类似地,在另外一种情形中,产生了这三条同步指令在源数据表的执行先后顺序为:insert(1,1)、update(1,2)、insert(2,1)。insert(1,1)、update(1,2)分配到同一任务执行,而insert(2,1)分配到另一任务执行,在一种乱序情形中,insert(1,1)先于insert(2,1)执行,insert(2,1)先于update(1,2)执行,insert(2,1)先于update(2,1)执行时,类似上述情形,就会存在唯一索引冲突导致无法同步的情形。为此,基于本申请的方式,将update等效为delete(1,1)以及insert(1,2),在数据同步时,执行delete(1,1)会将目标数据表中执行insert(1,1)时插入主键为1对应的数据删除掉,再执行insert(1,2),而最后执行的同步指令insert(2,1),由于主键为2,且唯一索引对应的数据为1,而insert(1,2)的主键为1,唯一索引对应的数据2,由此并不会发生任何主键冲突、唯一索引冲突的问题,从而保证了目标数据表中存储有执行insert(1,2)和insert(2,1)的数据。
图1为本申请实施例一应用场景的示意图;如图1所示,该应用场景中包括源数据表以及目标数据表,所述源数据表和所述目标数据表比如基于Mysql数据设置,当源数据表中的数据被修改而发生变化时(比如包括但不限于增加了一条全新的数据记录,删除了已有的一条数据记录,或者某一条数据记录中的局部数据发生了更新等),对所述目标数据表进行同步(比如在目标数据表中增加一条全新的数据记录,删除已有的一条数据记录,或者更新某一条数据记录以实现局部数据的更新等),以使得目标数据表中的数据与所述源数据表中的数据保持一致。
进一步,上述对修改源数据表中的数据时,针对源数据表中的每一条数据记录的每一次修改会生成一个数据操作记录,保存在binlog日志(Binary Log,二进制日志)中,如果需要将修改的数据同步到目标数据表中,则对应的每一条数据操作记录就会转换为一条数据同步指令,比如数据的插入指令以实现在目标数据表中增加一条全新的数据记录,数据的删除指令以实现删除目标数据表中的已有的一条数据记录,数据的更新指令以实现更新目标数据表中某一条数据记录,从而保证源数据表和目标数据表之间的数据一致。
图2为本申请实施例一应用场景的示意图;如图2所示,在本实施例中,为了实现所述源数据表和目标数据表之间的高效同步,增加了一些指令处理的中间件,包括但不限于实施数据同步的中间件(本申请实施例中称之为第一指令处理中间件),缓存同步指令的中间件(本申请实施例中称之为第二指令处理中间件)。
本实施例中,所述第一指令处理中间件比如为flink中间件,所述第二指令处理中间件比如为kafka中间件,所述kafka中间件用于对源同步指令序列进行缓存,所述flink中间件用于从所述kafka中间件获取源同步指令序列,并执行如下步骤以实现所述源数据表之间的目标数据表之间的数据同步:
对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
此处需要说明的是,上述图2实施例中,所述flink中间件、所述kafka中间件仅仅是示例性说明,并非唯一性限定。对于本领域普通人员来说,在不偏离本申请实施例的前提下,可以根据应用场景的需求选择其他中间件。
上述数据同步比如可以具体应用于客户之间同步数据,部门之间同步数据等。
但是,在上述进行数据同步的应用场景中,对于在源数据表和目标数据表中设置了唯一索引的数据经常会发生数据同步失败的问题,从而导致了源数据表和目标数据表的数据不一致。比如,在一种具体的应用场景中,用户在前端进行账号注册的过程,在前端的源数据表中插入了对应的一条数据记录,该数据记录记录中记录了用户的登录名,由于不同用户的登录名是必然不同,因此,针对该登录名配置了唯一索引,该登录名同步到了后端的目标数据表中(对应执行数据的插入指令)。但是,用户之后又重新操作了一次账号注册过程中,使用了相同的登录名,为此,当执行在后一次数据同步(对应执行数据的更新指令,或者又称之为update)时,如果由于在并行执行时,分配到了不同的任务,导致出现了同步的乱序问题,删除原有数据记录的同步指令晚于后一次数据更新指令执行的话,则导致在目标数据表中已经存在一个相同的登录名没有被删除,且由于登录名对应唯一索引,因此发生了同步冲突,无法实现数据同步,导致源数据表和目标数据表数据之间无法实现数据的一致性。
当然,上述基于用户注册和使用身份证号的场景仅仅是为了说明导致数据不一致的可能,并非唯一性限定。
当然,上述基于用户注册和使用身份证号的场景仅仅是为了说明导致数据不一致的可能,并非唯一性限定。
图3A为本申请实施例中数据同步方法的流程示意图;如图3A所示,本实施例中,所述数据同步方法包括:
S301、对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;
图3B为本申请实施例中实际更新指令进行转换处理的流程示意图;如图3B所示,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令,包括:
S311、基于第一指令处理中间件,对所述源同步指令序列进行识别,以从中确定出所述实际更新指令;
S321、对所述实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令。
具体地,本实施例中,所述源同步指令序列包括实际插入指令、实际删除指令、实际更新指令中的至少一种。所述实际插入指令比如是由于在源数据表中插入了一条新的数据记录,且该数据记录需要同步到目标数据表以在目标数据表中同样插入一条新的数据记录;所述实际删除指令是由于在源数据表中删除了一条已有的数据记录,且需要在目标数据表删除相同的数据记录;实际更新指令比如为在源数据表中更新某一条数据记录以实现局部数据的更新,且需要在目标数据表中更新相同的一条数据记录等。
如前所述,针对其中的实际更新指令来说,如果在目标数据表中要更新的数据记录中的某一个数据设置了唯一索引,就会存在同步冲突的问题,为此,本实施例中,为了避免可能存在的冲突问题,对实际更新指令进行转换,从而生成等效插入指令和等效删除指令,且指定等效删除指令要先于等效插入指令执行,因此,在依次执行下述步骤S302、S303时,保证在执行等效插入指令之前,该等效插入指令中主键在目标数据表中指向的数据记录为空,从而保证了该数据记录中设置了唯一索引的字段不存在相同的数据,进一步保证了在执行等效插入指令,可以按照等效于向目标数据表中插入一条新的数据记录的方式,将更新后的数据插入到主键在目标数据表中指向的数据记录中,不会发生由于唯一索引冲突导致的数据同步冲突,从而保证了数据同步的一致性。
比如对应于上述用户进行账号注册的情形,,当执行在后一次数据同步(对应执行数据的实际更新指令,或者又称之为update)时,将该实际更新指令进行转换处理,等效插入指令以及先于所述等效插入指令执行的等效删除指令,从而先将前一次注册时同步到目标数据表中的数据记录删除,再通过执行等效插入指令,从而将后一次注册时在源数据表中产生的数据记录同步到了目标数据表中,从而避免了唯一索引的冲突,保证了源数据表与目标数据表的数据完全一致。
上述步骤S311和S321的执行主体可以为上述flink中间件。具体地,可以通过对源同步指令序列中反映同步类型的字段进行识别,从而确定出所述实际更新指令。
示例性地,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令之前,包括:从对所述对源同步指令序列进行缓存的第二指令处理中间件获取所述源同步指令序列。
如前所述,所述第二指令处理中间件比如为kafka中间件,在所述kafka中间件中源同步指令序列以消息队列的方式进行缓存(比如技术Hash分区进行缓存),从而实现了对源数据表的数据操作导致的数据变化进行准确和全面的记录。
S302、对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列;
本实施例中,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种。
本实施例中,比如,可以指令对数据同步的效用,对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列。所述指令对数据同步的效用比如通过对目标数据表进行同步的同步结果进行限定。比如,在进行数据同步时,如果指向目标数据表中相同的主键的实际插入指令先于实际删除指令执行,则该实际插入指令和实际删除指令从数据同步的效用来定义,属于无意义的同步,因为属于无效的同步操作。再比如,对于等效插入指令先于实际删除指令执行也属于无意义的同步,属于无效的同步操作,对于指向目标数据表中相同的主键的同步类型相反的指令,对于数据同步来说,属于无效的同步操作。另外,指向目标数据表中相同的主键的同步类型的相同的指令来说,在先执行的指令属于无意义的同步。
因此,基于上述原因,在执行上述步骤S320时,针对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令,确定指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,具有相同同步类型的指令比如同为insert指令,或者同为delete指令。具有相反同步类型的指令比如一个为insert指令,而另外一个为delete指令。
比如,对于指向相同的主键的指令,由于同步类型的指令,只保留生成时间戳最新的指令,且考虑到先执行的插入指令和后执行的删除指令是无效的同步操作,为此,保留下的指令可能为插入指令(实际插入指令或者等效插入指令),或者删除指令(实际删除指令或者等效删除指令),或者删除指令和后于所述删除指令执行的插入指令。对于删除指令和后于所述删除指令执行的插入指令中,删除指令可能为实际删除指令或者等效删除指令,插入指令可能为实际插入指令或者等效插入指令。
图3C为本申请实施例中指令合并处理的流程示意图;如图3C所示,示例性地,为了提高指令处理的效率,对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,可以包括:
S312、通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉;
S322、将在同一时间窗内捕捉到的指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列。
示例性地,步骤S312中的时间窗可以为flink中间件中的time window,该时间窗的大小可以根据应用场景的需求设定。
图3D为本申请实施例中步骤S322的流程示意图;如图3C所示,所述步骤S322中将在同一时间窗内捕捉到的指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,包括:
S3221、确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
S3222、删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
本实施例中,通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉相当于对所有的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令组成的指令序列进行分组,从而提高了指令处理的效率。
可选地,执行上述步骤S322时,可以指令增量的方式执行合并处理,又可以以指令全量的方式执行合并处理。
示例性地,在以指令增量的方式执行合并处理时,执行上述步骤S3221时,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:实时确定同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令。
具体地,在以指令增量的方式执行合并处理时,执行上述步骤S3222时,所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:实时删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
具体地,当接收到第二个进入时间窗的指令,判断该指令与第一个进入时间窗的指令是同步类型相同的指令,还是同步类型相反的指令,如果是相反的,则删除,如果是相同的,则保留第二个进入时间窗的指令,依次类推,直到达到所述时间窗的大小。
可替代地,在以指令全量的方式执行合并处理时,执行上述步骤S3221时,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:确定在同一时间窗内捕捉到的指令并组成一个集合,从所述集合中确定指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
可替代地,在以指令全量的方式执行合并处理时,执行上述步骤S3222时,所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:从所述集合中删除所有所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
具体地,当接收到所有进入时间窗的指令,再判断其中那些指令是同步类型相同的指令,那些同步类型相反的指令,如果是相反的,则删除,如果是相同的,则保留生成时间戳最新的指令。
经过上述步骤S302的处理,从而有效地生成了实现数据同步要依据的指令序列,即上述有效同步指令序列。
S303、根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
示例性地,若只针对一个主键在目标数据表中指向的数据进行同步,则所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步时,运行该主键对应的有效同步指令序列即可。具体地,如果基于上述时间窗得到有效同步执行序列的话,一个时间窗内的指令经过合并之后,可能是插入指令,或者删除指令,或者是删除指令和插入指令的组合,从而通过运行该插入指令或者删除指令或者删除指令和插入指令的组合,从而实现源数据表和目标数据表之间的数据同步。
此处,需要说明的是,由于可能会在不同的时间段,对同一个主键在源数据数据表中进行修改而导致的数据同步需求,因此,可以通过多个时间窗对不同时间段的指令进行捕捉和合并,或者基于同一个时间窗捕捉不同时间段的指令再进行合并,从而实现将同一个主键在源数据数据表中的数据同步到目标数据表。
进一步地,可以针对所述时间窗配置设定的等待时间,以使得迟到的指令也可以被时间窗捕获,从而可以应对指令的迟到的情形,以进行指令的有效合并,避免由于指令迟到没有参与指令的合并,导致有效同步指令序列的准确性较差。
示例性地,在源数据表中大量数据频繁发生变化的情形中,即若针对多个主键在目标数据表中指向的数据进行同步,则所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:将所述针对多个主键在目标数据表中指向的数据进行的同步进行并行多任务划分,以使每个任务运行时对部分主键在目标数据表中指向的数据进行同步,且在同一任务中针对同一主键在目标数据库指向的数据先执行删除后执行插入的方式,以进行源数据表和目标数据表之间的数据同步。
通过上述多任务划分,使得针对多个逐渐的数据同步可以并行执行,从而提高数据通同步的实效性。此处,需要说明的是,一个任务中,可以执行至少两个主键对应的数据同步,当然,在一些实施例中,部分任务可能执行至少连个主键对应的数据同步,部分任务可能执行一个主键对应的同步的数据同步。
进一步地,在进行上述多任务的划分时,可以基于主键与可执行任务总数上限取余的方式进行任务的划分。比如,对于主键为1,任务总数的上限为10,则主键对应的数据可以分配给序编号为1的任务执行。
进一步地,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:在同一任务中,对所有主键在目标数据表中的数据先执行批删除后执行批插入操作的方式,运行所述有效同步指令序列,以进行源数据表和目标数据表之间的数据同步。通过该步骤,从而将分配在同一个任务上执行的多个主键对应的数据同步按照同步类型进行分批执行,同时为了避免出现唯一索引冲突导致的数据同步失败的情形,进行分批执行时,所有的删除指令先于所有的插入指令执行,从而实现了以对所有主键在目标数据表中的数据先执行批删除后执行批插入操作的方式运行所述有效同步指令序列,从而实现了先删除目标数据表中的旧数据,再插入新数据。
进一步地,在上述实施例中,在所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:响应于向所述目标数据表插入数据失败,将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,以重新进行数据同步。通过将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,从而删除目标数据表中导致所述数据插入指令执行失败的旧数据,再通过执行所述等效插入指令,从而实现了将插入指令要插入的数据同步到所述目标数据表中。
示例性地,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:判断进行源数据表和目标数据表之间的数据同步是否出现唯一索引冲突,若出现,则执行所述响应于向所述目标数据表插入数据失败的步骤,从而可以快速地判断出是否需要响应于向所述目标数据表插入数据失败,将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,以重新进行数据同步。
示例性地,在执行其对应的等效删除指令和等效插入指令时,可以根据插入数据失败对应的插入指令的生成时间戳确定出在源数据表对应的所有指令中的时序位置,从而确定出执行等效删除指令和等效插入指令的时序。
上述图3A-图3D实施例的,可以依赖于第一指令处理中间件、第二指令处理中间件实现数据的同步(在一些实施例中,实际上也可以省略第二指令处理中间件),从而使得数据同步依赖的第三方中间件较少,降低了方案实施的复杂度。
进一步地,需要说明的是,上述实施例中,可以针对源数据表和目标数据表的数量不做特别限定,可以是一对多的关系,可以是多对多的关系,以提高数据同步的实效性。
进一步地,在上述实施例中,上述合并处理的基础上,增加ETL(Extract-Transform-Load)处理逻辑,对同步指令针对的数据进行清洗包括但不限于增加字段、删除字段、过滤数据、转换格式、清洗脏数据,该ETL处理逻辑可以在从kafka中间件中获取到有效同步指令序列后执行,并在flink中间件根据所述有效同步序列以进行数据同步之前执行。
图4为本申请实施例一种数据同步装置的结构示意图;如图4所示,其包括:
第一处理单元401,用于对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令;
第二处理单元402,用于对指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;
第三处理单元403,用于根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
可选地,所述第一处理单元401具体用于:基于第一指令处理中间件,对所述源同步指令序列进行识别,以从中确定出所述实际更新指令;对所述实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令。
可选地,所述第一处理单元401具体用于在对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令之前,包括:从对所述对源同步指令序列进行缓存的第二指令处理中间件获取所述源同步指令序列。
可选地,所述第二处理单元402具体用于:通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉;将在同一时间窗内捕捉到的指向相同主键的所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行合并处理,以生成有效同步指令序列。
可选地,所述第二处理单元402具体用于:确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,所述第二处理单元402具体用于:实时确定同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;实时删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,所述第二处理单元402用于:确定在同一时间窗内捕捉到的指令并组成一个集合,从所述集合中确定指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;从所述集合中删除所有所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
可选地,若针对多个主键在目标数据表中指向的数据进行同步,则所述第三处理单元403具体用于:将所述针对多个主键在目标数据表中指向的数据进行的同步进行并行多任务划分,以使每个任务运行时对部分主键在目标数据表中指向的数据进行同步,且在同一任务中针对同一主键在目标数据库指向的数据先执行删除后执行插入的方式,以进行源数据表和目标数据表之间的数据同步。
可选地,所述第三处理单元403具体用于:在同一任务中,对所有主键在目标数据表中的数据先执行批删除后执行批插入操作的方式,运行所述有效同步指令序列,以进行源数据表和目标数据表之间的数据同步。
可选地,所述第一处理单元401还用于在根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,响应于向所述目标数据表插入数据失败,将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,以重新进行数据同步。
可选地,所述第三处理单元403还用于在根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,判断进行源数据表和目标数据表之间的数据同步是否出现唯一索引冲突,若出现,则执行所述响应于向所述目标数据表插入数据失败的步骤。
本申请实施例还提供一种计算机存储介质,所述计算机存储介质上存储有计算机可执行程序,所述计算机可执行程序被运行以实施本申请实施例任一所述的方法。
图5为本申请实施例一种电子设备的结构示意图;如图5所示,所述电子设备包括存储器以及处理器,所述存储器上用于存储计算机可执行程序,所述处理器用于运行所述计算机可执行程序以实施本申请实施例任一所述的方法。
以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应所述以权利要求的保护范围为准。
Claims (12)
1.一种数据同步方法,其特征在于,包括:
对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令,其中,所述等效删除指令与所述实际更新指令指向同一主键;所述等效插入指令与所述实际更新指令指向同一主键,且与所述实际更新指令具有相同的唯一索引;
通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;
确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列;
根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
2.根据权利要求1所述的方法,其特征在于,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令,包括:
基于第一指令处理中间件,对所述源同步指令序列进行识别,以从中确定出所述实际更新指令;
对所述实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令。
3.根据权利要求1所述的方法,其特征在于,所述对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令之前,包括:从对所述对源同步指令序列进行缓存的第二指令处理中间件获取所述源同步指令序列。
4.根据权利要求1所述的方法,其特征在于,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:实时确定同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:实时删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
5.根据权利要求1所述的方法,其特征在于,所述确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令,包括:确定在同一时间窗内捕捉到的指令并组成一个集合,从所述集合中确定指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;
所述删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列,包括:从所述集合中删除所有所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列。
6.根据权利要求1所述的方法,其特征在于,若针对多个主键在目标数据表中指向的数据进行同步,则所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:
将所述针对多个主键在目标数据表中指向的数据进行的同步进行并行多任务划分,以使每个任务运行时对部分主键在目标数据表中指向的数据进行同步,且在同一任务中针对同一主键在目标数据库指向的数据先执行删除后执行插入的方式,以进行源数据表和目标数据表之间的数据同步。
7.根据权利要求6所述的方法,其特征在于,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步,包括:
在同一任务中,对所有主键在目标数据表中的数据先执行批删除后执行批插入操作的方式,运行所述有效同步指令序列,以进行源数据表和目标数据表之间的数据同步。
8.根据权利要求1-7任一项所述的方法,其特征在于,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:响应于向所述目标数据表插入数据失败,将对应的插入指令转换为等效删除指令以及后于所述等效删除指令的等效插入指令,以重新进行数据同步。
9.根据权利要求8所述的方法,其特征在于,所述根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步之后,还包括:判断进行源数据表和目标数据表之间的数据同步是否出现唯一索引冲突,若出现,则执行所述响应于向所述目标数据表插入数据失败的步骤。
10.一种数据同步装置,其特征在于,包括:
第一处理单元,用于对源同步指令序列包括的实际更新指令进行转换处理,以生成等效插入指令以及先于所述等效插入指令执行的等效删除指令,其中,所述等效删除指令与所述实际更新指令指向同一主键;所述等效插入指令与所述实际更新指令指向同一主键,且与所述实际更新指令具有相同的唯一索引;
第二处理单元,用于通过设定的时间窗,对所述等效插入指令、所述等效删除指令与所述源同步指令序列中的其他实际同步指令进行捕捉,所述其他实际同步指令包括实际删除指令、实际插入指令中的至少一种;并确定在同一时间窗内捕捉到的指令中,指向同一主键的具有相同同步类型的指令和/或具有相反同步类型的指令;删除所述具有相反同步类型的指令和/或保留所述具有相同同步类型的指令中生成时间戳最新的指令,以生成有效同步指令序列;
第三处理单元,用于根据所述有效同步指令序列,进行源数据表和目标数据表之间的数据同步。
11.一种计算机存储介质,所述计算机存储介质上存储有计算机可执行程序,所述计算机可执行程序被运行以实施权利要求1-9任一所述的方法。
12.一种电子设备,所述电子设备包括存储器以及处理器,所述存储器上用于存储计算机可执行程序,所述处理器用于运行所述计算机可执行程序以实施权利要求1-9任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111663126.3A CN114297216B (zh) | 2021-12-30 | 2021-12-30 | 数据同步方法及其装置、计算机存储介质、电子设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111663126.3A CN114297216B (zh) | 2021-12-30 | 2021-12-30 | 数据同步方法及其装置、计算机存储介质、电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114297216A CN114297216A (zh) | 2022-04-08 |
CN114297216B true CN114297216B (zh) | 2022-09-02 |
Family
ID=80973853
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111663126.3A Active CN114297216B (zh) | 2021-12-30 | 2021-12-30 | 数据同步方法及其装置、计算机存储介质、电子设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114297216B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114579583B (zh) * | 2022-05-05 | 2022-08-05 | 杭州太美星程医药科技有限公司 | 表单数据的处理方法、装置和计算机设备 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844507A (zh) * | 2016-12-27 | 2017-06-13 | 星环信息科技(上海)有限公司 | 一种数据批处理的方法及设备 |
CN109739936A (zh) * | 2019-01-23 | 2019-05-10 | 杭州数梦工场科技有限公司 | 数据同步方法、系统、服务器及计算机可读存储介质 |
CN112214505A (zh) * | 2020-10-21 | 2021-01-12 | 北京金堤征信服务有限公司 | 数据同步方法、装置、计算机可读存储介质及电子设备 |
CN113010608A (zh) * | 2021-04-07 | 2021-06-22 | 亿企赢网络科技有限公司 | 数据实时同步方法、装置及计算机可读存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7769714B2 (en) * | 2007-11-06 | 2010-08-03 | Oracle International Corporation | Automatic error correction for replication and instantaneous instantiation |
-
2021
- 2021-12-30 CN CN202111663126.3A patent/CN114297216B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106844507A (zh) * | 2016-12-27 | 2017-06-13 | 星环信息科技(上海)有限公司 | 一种数据批处理的方法及设备 |
CN109739936A (zh) * | 2019-01-23 | 2019-05-10 | 杭州数梦工场科技有限公司 | 数据同步方法、系统、服务器及计算机可读存储介质 |
CN112214505A (zh) * | 2020-10-21 | 2021-01-12 | 北京金堤征信服务有限公司 | 数据同步方法、装置、计算机可读存储介质及电子设备 |
CN113010608A (zh) * | 2021-04-07 | 2021-06-22 | 亿企赢网络科技有限公司 | 数据实时同步方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN114297216A (zh) | 2022-04-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11023448B2 (en) | Data scrubbing method and apparatus, and computer readable storage medium | |
CN109241185B (zh) | 一种数据同步的方法以及数据同步装置 | |
CN110262929B (zh) | 一种保证复制事务一致性的方法以及相应的复制装置 | |
CN107038162B (zh) | 基于数据库日志的实时数据查询方法和系统 | |
US9836361B2 (en) | Data replicating system, data replicating method, node device, management device and computer readable medium | |
US10417180B1 (en) | Fast recovery of backup cloud gateway following crash without garbage collection | |
CN109241175A (zh) | 数据同步方法、装置、存储介质及电子设备 | |
CN110377570B (zh) | 节点切换方法、装置、计算机设备及存储介质 | |
CN107402722B (zh) | 一种数据迁移方法及存储设备 | |
CN108509462B (zh) | 一种同步活动事务表的方法及装置 | |
CN111831748B (zh) | 数据同步方法、装置及存储介质 | |
CN105824846B (zh) | 数据迁移方法及装置 | |
CN110457157B (zh) | 分布式事务异常处理方法、装置、计算机设备及存储介质 | |
CN110765204B (zh) | 一种对增量同步异常中断情况的处理方法和装置 | |
CN107943618B (zh) | 仿真系统的数据快速恢复方法及存储介质 | |
CN104092717A (zh) | 消息处理方法及系统、消息目的端设备与分布式消息系统 | |
CN112182104A (zh) | 一种数据同步方法、装置、设备及存储介质 | |
CN111221907B (zh) | 一种基于日志解析的数据库添加列同步方法和装置 | |
CN114297216B (zh) | 数据同步方法及其装置、计算机存储介质、电子设备 | |
CN108140035B (zh) | 分布式系统的数据库复制方法及装置 | |
CN107436904B (zh) | 数据获取方法、数据获取设备和计算机可读存储介质 | |
US8359601B2 (en) | Data processing method, cluster system, and data processing program | |
CN110196788B (zh) | 一种数据读取方法、装置、系统及存储介质 | |
CN110502584B (zh) | 数据同步的方法和装置 | |
CN114265901A (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |