一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据同步方法及其装置、计算机存储介质、电子设备与流程

2022-04-02 05:29:09 来源:中国专利 TAG:


1.本技术涉及数据库技术领域,具体涉及一种数据同步方法及其装置、计算机存储介质、电子设备。


背景技术:

2.端到端的数据同步可以应用到很多场景,比如客户之间同步数据,部门之间同步数据等。为了保证数据同步的实时、高效性,避免产生积压,数据同步一般都是并行执行,但是并行问题必定会带来各个同步指令执行的先后不确定性,由此导致同步指令乱序的问题,进一步导致数据的不一致性。


技术实现要素:

3.本技术实施例提供一种数据同步方法及其装置、计算机存储介质、电子设备,用以克服或者缓解现有技术中存在的上述技术问题。
4.本技术采用的技术方案为:
5.一种数据同步方法,其包括:
6.确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;
7.响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;
8.若有效,则再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表。
9.可选地,所述再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到所述目标数据表,包括:将所述运行失败的数据同步指令添加到所述同步指令序列中以再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到所述目标数据表。
10.可选地,若重新运行的次数为多次,则所述方法还包括:统计重新运行所述运行失败的数据同步指令的总次数,当所述总次数达到预设的总次数阈值时,执行所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败的步骤。
11.可选地,所述方法还包括:响应于第i次重新运行失败时,当到达等待时长时,执行第i 1次重新运行所述运行失败的数据同步指令,当第i 1次重新运行失败时,延长所述等待时长,并在到达延长的等待时长时,执行第i 2次重新运行所述运行失败的数据同步指令,i为大于等于1的整数。
12.可选地,所述确定同步指令序列中运行失败的数据同步指令之后,包括:将所述运行失败的数据同步指令添加到重试指令队列中,以基于所述重试指令队列执行所述重新运
行所述运行失败的数据同步指令的步骤。
13.可选地,所述重新运行所述运行失败的数据同步指令,包括:当添加的所述运行失败的数据同步指令使得所述指令重试队列的达到预定长度时,按照指令重试队列所述运行失败的数据同步指令的生成时间戳进行排序,并依次重新运行所述运行失败的数据同步指令。
14.可选地,所述重新运行所述运行失败的数据同步指令,包括:每向所述指令重试队列添加一个所述运行失败的数据同步指令时,按照实时方式重新运行所述运行失败的数据同步指令。
15.可选地,所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败之后,包括:将所述运行失败的数据同步指令添加到反查指令队列中;所述在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效包括:基于所述反查指令队列,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
16.可选地,所述基于所述反查指令队列,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:当添加的所述运行失败的数据同步指令使得所述指令反查队列的达到预定长度时,按照所述运行失败的数据同步指令的生成时间戳进行排序,并依次在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
17.可选地,所述基于所述反查指令队列,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:每向所述指令反查队列添加一个所述运行失败的数据同步指令时,按照实时方式在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
18.可选地,所述在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效。
19.可选地,若所述运行失败的数据同步指令为数据插入指令或者数据更新指令,则所述基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效,包括:基于所述运行失败的数据插入指令或者数据更新指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还存在,若存在,则判定有效。
20.可选地,若所述运行失败的数据同步指令为数据删除指令,所述基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效,包括:基于所述运行失败的数据删除指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否保持为删除状态,若是,则判定有效。
21.一种数据同步装置,其包括:
22.第一处理单元,用于确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;
23.第二处理单元,用于响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;
24.第三处理单元,用于在所述源数据表对应的源数据有效时,再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表。
25.一种计算机存储介质,所述计算机存储介质上存储有计算机可执行程序,所述计算机可执行程序被运行以实施本技术实施例任一所述的方法。
26.一种电子设备,所述电子设备包括存储器以及处理器,所述存储器上用于存储计算机可执行程序,所述处理器用于运行所述计算机可执行程序以实施本技术实施例任一所述的方法。
27.本技术实施例,确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;若有效,则再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表,从而有效地实现了源数据表和目标数据表之间的同步,保证了源数据表和目标数据表之间数据的一致性。
附图说明
28.图1为本技术实施例一应用场景的示意图;
29.图2为本技术实施例一应用场景的示意图;
30.图3为本技术实施例一种数据同步方法的流程示意图;
31.图4为本技术实施例的体现步骤s303a的一具体用场景示意图;
32.图5为本技术实施例的体现步骤s303a的另一具体用场景示意图;
33.图6为本技术实施例一种数据同步装置的结构示意图;
34.图7为本技术实施例一种电子设备的结构示意图。
具体实施方式
35.为使本技术要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
36.本技术实施例,确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;若有效,则再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表,从而有效地实现了源数据表和目标数据表之间的同步,保证了源数据表和目标数据表之间数据的一致性。
37.图1为本技术实施例一应用场景的示意图;如图1所示,该应用场景中包括源数据表以及目标数据表,所述源数据表和所述目标数据表比如基于mysql数据设置,当源数据表中的数据被修改而发生变化时(比如包括但不限于增加了一条全新的数据记录,删除了已有的一条数据记录,或者某一条数据记录中的局部数据发生了更新等),对所述目标数据表进行同步(比如在目标数据表中增加一条全新的数据记录,删除已有的一条数据记录,或者更新某一条数据记录以实现局部数据的更新等),以使得目标数据表中的数据与所述源数
据表中的数据保持一致。
38.进一步,上述对修改源数据表中的数据时,针对源数据表中的每一条数据记录的每一次修改会生成一个数据操作记录,保存在binlog日志(binary log,二进制日志)中,如果需要将修改的数据同步到目标数据表中,则对应的每一条数据操作记录就会转换为一条数据同步指令,比如数据的插入指令以实现在目标数据表中增加一条全新的数据记录,数据的删除指令以实现删除目标数据表中的已有的一条数据记录,数据的更新指令以实现更新目标数据表中某一条数据记录,从而保证源数据表和目标数据表之间的数据一致。
39.图2为本技术实施例一应用场景的示意图;如图2所示,在本实施例中,为了实现所述源数据表和目标数据表之间的高效同步,增加了一些指令处理的中间件,包括但不限于实施数据同步的中间件(本技术实施例中称之为第一指令处理中间件),缓存同步指令的中间件(本技术实施例中称之为第二指令处理中间件)。
40.本实施例中,所述第一指令处理中间件比如为flink中间件,所述第二指令处理中间件比如为kafka中间件,所述kafka中间件用于对同步指令序列进行缓存,所述flink中间件用于从所述kafka中间件获取同步指令序列,并执行如下步骤以实现所述源数据表之间的目标数据表之间的数据同步:确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;若有效,则再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表。
41.此处需要说明的是,上述图2实施例中,所述flink中间件、所述kafka中间件仅仅是示例性说明,并非唯一性限定。对于本领域普通人员来说,在不偏离本技术实施例的前提下,可以根据应用场景的需求选择其他中间件。
42.上述数据同步比如可以具体应用于客户之间同步数据,部门之间同步数据等。
43.但是,在上述进行数据同步的应用场景中,对于在源数据表和目标数据表中设置了唯一索引的数据经常会发生数据同步失败的问题,从而导致了源数据表和目标数据表的数据不一致。比如,在一种具体的应用场景中,用户在前端进行账号注册的过程,在前端的源数据表中插入了对应的一条数据记录,该数据记录记录中记录了用户的登录名,由于不同用户的登录名是必然不同,因此,针对该登录名配置了唯一索引,该登录名同步到了后端的目标数据表中(对应执行数据的插入指令)。但是,用户之后又重新操作了一次账号注册过程中,使用了相同的登录名,为此,当执行在后一次数据同步(对应执行数据的更新指令,或者又称之为update)时,如果由于同步的乱序问题,删除原有数据记录的同步指令晚于后一次数据更新指令执行的话,则导致在目标数据表中已经存在一个相同的登录名没有被删除,且由于登录名对应唯一索引,因此发生了同步冲突,无法实现数据同步,导致源数据表和目标数据表数据之间无法实现数据的一致性。
44.当然,上述基于用户注册和使用身份证号的场景仅仅是为了说明导致数据不一致的可能,并非唯一性限定。
45.图3为本技术实施例一种数据同步方法的流程示意图;本实施例中的执行主体可以为上述flink中间件。如图3所示,数据同步方法包括:
46.s301、确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败
的数据同步指令;
47.具体地,本实施例中,所述同步指令序列包括实际插入指令、实际删除指令、实际更新指令中的至少一种。所述实际插入指令比如是由于在源数据表中插入了一条新的数据记录,且该数据记录需要同步到目标数据表以在目标数据表中同样插入一条新的数据记录;所述实际删除指令是由于在源数据表中删除了一条已有的数据记录,且需要在目标数据表删除相同的数据记录;实际更新指令比如为在源数据表中更新某一条数据记录以实现局部数据的更新,且需要在目标数据表中更新相同的一条数据记录等。
48.为此,本实施例中,所述运行失败的数据同步指令可以为实际插入指令、实际删除指令、实际更新指令中任一一种。
49.本实施例中,具体通过对数据同步指令执行的返回结果进行监控,从而以确定出其中运行失败的数据同步指令。
50.如前所述,上述对修改源数据表中的数据时,针对源数据表中的每一条数据记录的每一次修改会生成一个数据操作记录,保存在binlog日志(binary log,二进制日志)中,如果需要将修改的数据同步到目标数据表中,则对应的每一条数据操作记录就会转换为一条数据同步指令,若干条数据同步指令就会形成同步指令序列,该同步指令序列以消息的方式缓存在kafka中间件中,从而实现了对源数据表的数据操作导致的数据变化进行准确和全面的记录。当flink中间件执行上述步骤s301时,直接从kafka中间件中以消息消费的方式,获取并执行同步指令序列中每一条数据同步指令。此处,由于flink中间件是以消息消费的方式从kafka中间件获取并执行数据同步指令序列,因此,所述flink中间件又可称之为消息消费中间件。
51.可选地,本实施例中,考虑到在一些应用场景中,会存在多个运行失败的数据同步指令,为此,所述确定同步指令序列中运行失败的数据同步指令之后,包括:将所述运行失败的数据同步指令添加到重试指令队列中,以基于所述重试指令队列执行所述重新运行所述运行失败的数据同步指令的步骤,从而通过所述重试指令队列实现了对多个运行失败的数据同步指令的登记式管理。
52.基于上述重试指令队列,在重新运行所述运行失败的数据同步指令时,可以全量的方式进行运行,也可以以增量的方式进行运行,具体的运行方式可以根据应用场景的需求确定。
53.具体地,在以全量的方式运行时,所述重新运行所述运行失败的数据同步指令,包括:当添加的所述运行失败的数据同步指令使得所述指令重试队列的达到预定长度时,按照指令重试队列所述运行失败的数据同步指令的生成时间戳进行排序,并依次重新运行所述运行失败的数据同步指令。所述预定长度可以根据应用场景灵活确定。
54.本实施例中,所述运行失败的数据同步指令的生成时间戳比如具体为对所述源数据表中的数据进行数据操作(比如删除,插入,或者更新)的时间戳。
55.本实施例中,比如依次重新运行所述运行失败的数据同步指令按照运行失败的数据同步指令的生成时间戳从先到后的顺序运行,从而保证了指令重新运行时基于生成时间戳的时间有序性。
56.当然,在其他实施例中,也可以按照所述运行失败的数据同步指令进入所述指令重试队列的先后顺序对所述运行失败的数据同步指令进行排序,使得先进入指令重试队列
的数据同步指令先重新执行,后进入指令重试队列的数据同步指令后重新执行,从而保证了指令重新运行时基于进入指令重试队列的时间有序性。
57.可替代地,本实施例或者其他实施例中,在以增量的方式重新运行时,所述重新运行所述运行失败的数据同步指令,包括:每向所述指令重试队列添加一个所述运行失败的数据同步指令时,按照实时方式重新运行所述运行失败的数据同步指令,从而加快了数据执行的速度。
58.可选地,如果以增量的方式重新运行,则可以省去所述指令重试队列,从而降低算法设计的难度。
59.本实施例中,在步骤s301中重新运行运行失败的数据同步指令,可以在由flink中间件直接重新运行一次或者多次所述运行失败的数据同步指令。此处,需要说明的是,重新运行的次数可以根据应用场景的需求在flink中间件上进行灵活设定。
60.可选地,若重新运行的次数为多次,则所述方法还包括:统计重新运行所述运行失败的数据同步指令的总次数,当所述总次数达到预设的总次数阈值时,执行所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败的步骤,一方面通过重试,增加数据同步指令重新运行成功的概率,同时通过总次数阈值,避免了重新运行的次数过多导致的指令重试队列溢出或者指令重试队列的长度过长,进而引起数据同步指令的积压。
61.可选地,重新运行的次数根据应用场景灵活设置,不做唯一性限定。
62.可选地,所述方法还包括:响应于第i次重新运行失败时,当到达等待时长时,执行第i 1次重新运行所述运行失败的数据同步指令,当第i 1次重新运行失败时,延长所述等待时长,并在到达延长的等待时长时,执行第i 2次重新运行所述运行失败的数据同步指令,i为大于等于1的整数。该步骤可以在重新运行所述运行失败的数据同步指令时执行,即包括在上述步骤s301中。
63.本实施例中,通过上述延长等待时长的方式,增加了数据同步指令经过重新运行而成功的可能性,从而提高了数据同步的效率。
64.比如,在一具体场景中,总次数阈值为3次时,第1次重试失败后,等待时长为t1以执行第2次重试,第2次重试失败后,等待时长为t2以执行第3次重试,设置t2大于t1,以增加数据同步指令经过重新运行而成功的可能性。
65.可选地,本实施例中,所述等待时长可以根据应用场景的需求灵活设置,同时结合上述kafka中间件和flink中间件可识别的时间粒度进行设置。
66.可选地,本实施例中,如果存在多个运行失败的数据同步指令,可以执行对该多个运行失败的数据同步指令进行多任务并行重新运行,以提高重试的效率。
67.本实施例中,在重新运行所述运行失败的数据同步指令的指令时,同步指令序列中其他数据同步指令可处于等待运行的状态,但当重新运行完所述运行失败的数据同步指令再运行。当然,此处,等待运行的时长可以根据应用场景的需求灵活设置,只要不影响数据同步的整体运行即可。
68.以上述用户注册的应用场为例,通过上述重新运行期间,等待原有的登录名被删除,从而再通过重新运行对应的数据同步指令从而将后一次注册提交的登录名从源数据表同步到目标数据表。
69.s302、响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数
据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;
70.可选地,所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败之后,包括:将所述运行失败的数据同步指令添加到反查指令队列中。
71.所述在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效包括:基于所述反查指令队列,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
72.本实施例中,通过反查指令队列可对需要参与步骤s302的数据同步指令进行有效的管理。
73.可选地,本实施例中,基于所述反查指令队列进行反查时,可以按照全量的方式,也可以按照增量的方式。具体采用那种方式可以根据应用场景的需求,灵活设定。
74.可选地,所述基于所述反查指令队列,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:当添加的所述运行失败的数据同步指令使得所述指令反查队列的达到预定长度时,按照所述运行失败的数据同步指令的生成时间戳进行排序,并依次在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。本实施例中,按照所述运行失败的数据同步指令的生成时间戳进行排序,并依次在所述源数据表中进行查询,从而保证了指令重新运行时基于生成时间戳的时间有序性。
75.具体地,按照所述运行失败的数据同步指令的生成时间戳从先到后的顺序进行排序,从而保证了查询时基于生成时间戳的时间有序性。
76.当然,在其他实施例中,也可以按照所述运行失败的数据同步指令进入所述指令反查队列的先后顺序进行反查,使得基于先进入指令反查队列的数据同步指令先反查,后进入指令重试队列的数据同步指令后反查,从而保证了指令反查时基于进入指令反查队列的时间有序性。
77.可替代地,本实施例或者其他实施例中,在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:每向所述指令反查队列添加一个所述运行失败的数据同步指令时,按照实时方式在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
78.可替代,如果按照上述增量的方式进行数据同步指令的反查,也可以省去所述指令反查队列。
79.可选地,本实施例中,如果存在多个运行失败的数据同步指令,可以执行对该多个运行失败的数据同步指令进行多任务并行反查,以提高重试的效率。
80.可选地,本实施例中,若重新运行失败的数据通同步指令进入了指令反查队列,则在指令重试队列中删除重新运行失败的数据通同步指令。
81.本实施例中,考虑到针对数据同步指令运行失败是由于出现了唯一索引冲突而导致的场景,为此,本实施例中,所述在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效,包括:基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效。
82.进一步地,如前所述,所述数据同步指令可以为数据插入指令或者数据更新指令、
数据删除指令,而对于数据插入指令或者数据更新指令来说,在源数据表中存在对应的数据记录。
83.因此,若所述运行失败的数据同步指令为数据插入指令或者数据更新指令,则所述基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效,包括:基于所述运行失败的数据插入指令或者数据更新指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还存在,若存在,则判定有效,若不存在,则判定无效。可选地,若所述运行失败的数据同步指令为数据删除指令,所述基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效,包括:基于所述运行失败的数据删除指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否保持为删除状态,若是,则判定有效;否则,判定无效。
84.若有效,则执行步骤s303a:再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表;
85.可选地,所述再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到所述目标数据表,包括:将所述运行失败的数据同步指令添加到所述同步指令序列中以再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到所述目标数据表。
86.具体地,图4为本技术实施例的体现步骤s303a的一具体用场景示意图;如图4所示,可以将所述运行失败的数据同步指令再次缓存到kafka中间件中以实现添加到所述同步指令序列,再通过flink中间件消费所述同步指令序列的方式,以再次重新运行所述运行失败的数据同步指令。
87.当然,此处需要说明的是,在执行步骤s303a时,也可以不用将所述运行失败的数据同步指令添加到所述同步指令序列,而是由flink中间件(即第一指令处理中间件)直接再次消费所述运行失败的数据同步指令即可,从而省去了flink中间件与kafka中间件(即第二指令处理中间件)进行交互,以消费数据同步指令的步骤,进而提高了指令处理的效率。
88.图5为本技术实施例的体现步骤s303a的另一具体用场景示意图;如图5所示,,考虑到存在反查指令队列的情形,由于反查指令队列中已保存有运行失败的数据同步指令,而当确定运行失败的数据同步指令所述运行失败的数据同步指令对所述源数据表对应的源数据有效时,flink中间件(即第一指令处理中间件)直接从所述反查指令队列中消费对应的数据同步指令即可,无须通过kafka中间件(即第二指令处理中间件)添加到所述同步指令序列中,从而提高了指令处理的效率。
89.本实施例中,在再次运行所述运行失败的数据同步指令的指令时,同步指令序列中其他数据同步指令可处于等待运行的状态,但当再次运行完所述运行失败的数据同步指令再运行。当然,此处,等待运行的时长可以根据应用场景的需求灵活设置,只要不影响数据同步的整体运行即可。
90.以上述用户注册的应用场为例,通过上述查询,确定重新失败对应的数据同步指令在源数据表中对应的源数据还有效,则通过再次运行对应的数据同步指令,从而实现在
源数据表中第一次注册时提交的登录名被删除之后,将后一次注册的登录名同步到目标数据表。
91.另外,数据插入指令和数据删除指令,由于分别是向源数据表中增加新的数据记录,或者删除源数据表中已有的数据记录,因此,通过上述重试和反查的方式进行重新执行,即可实现与目标数据表之间的数据同步。
92.若无效,则执行步骤s303b:丢弃所述运行失败的数据同步指令。
93.进一步地,需要说明的是,上述实施例中,可以针对源数据表和目标数据表的数量不做特别限定,可以是一对多的关系,可以是多对多的关系,以提高数据同步的实效性。
94.进一步地,在上述实施例中,上述实施例中,还可以增加etl(extract-transform-load)处理逻辑,对同步指令针对的数据进行清洗包括但不限于增加字段、删除字段、过滤数据、转换格式、清洗脏数据。增加etl(extract-transform-load)处理逻辑比如具体在flink中间件消费之前执行,即从kafka获取到同步指令序列之后,先进行etl逻辑处理,之后再交由flink中间件进行消费,以进行数据同步。
95.图6为本技术实施例一种数据同步装置的结构示意图;如图6所示,其包括:
96.第一处理单元601,用于确定同步指令序列中运行失败的数据同步指令,并重新运行所述运行失败的数据同步指令;
97.第二处理单元602,用于响应于所述运行失败的数据同步指令在所述重新运行时出现失败,在源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效;
98.第三处理单元603,用于在所述源数据表对应的源数据有效时,再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到目标数据表。
99.可选地,所述第三处理单元603具体用于将所述运行失败的数据同步指令添加到所述同步指令序列中以再次重新运行所述运行失败的数据同步指令,以将所述运行失败的数据同步指令在所述源数据表对应的源数据同步到所述目标数据表。
100.可选地,若重新运行的次数为多次,则所述第二处理单元602还用于统计重新运行所述运行失败的数据同步指令的总次数,当所述总次数达到预设的总次数阈值时,执行所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败的步骤。
101.可选地,所述第一处理单元601还用于:响应于第i次重新运行失败时,当到达等待时长时,执行第i 1次重新运行所述运行失败的数据同步指令,当第i 1次重新运行失败时,延长所述等待时长,并在到达延长的等待时长时,执行第i 2次重新运行所述运行失败的数据同步指令,i为大于等于1的整数。
102.可选地,所述第一处理单元601还用于确定同步指令序列中运行失败的数据同步指令之后,将所述运行失败的数据同步指令添加到重试指令队列中,以基于所述重试指令队列执行所述重新运行所述运行失败的数据同步指令的步骤。
103.可选地,所述第一处理单元601具体用于当添加的所述运行失败的数据同步指令使得所述指令重试队列的达到预定长度时,按照指令重试队列所述运行失败的数据同步指令的生成时间戳进行排序,并依次重新运行所述运行失败的数据同步指令。
104.可选地,所述第一处理单元601具体用于每向所述指令重试队列添加一个所述运
行失败的数据同步指令时,按照实时方式重新运行所述运行失败的数据同步指令。
105.可选地,所述第二处理单元602还用于所述响应于所述运行失败的数据同步指令在所述重新运行时再次出现失败之后,包括:将所述运行失败的数据同步指令添加到反查指令队列中;基于所述反查指令队列,在所述源数据表中进行反查,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
106.可选地,所述第二处理单元602具体用于当添加的所述运行失败的数据同步指令使得所述指令反查队列的达到预定长度时,按照所述运行失败的数据同步指令的生成时间戳进行排序,并依次在所述源数据表中进行查询,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
107.可选地,所述第二处理单元602具体用于每向所述指令反查队列添加一个所述运行失败的数据同步指令时,按照实时方式在所述源数据表中进行反查,以确定所述运行失败的数据同步指令对所述源数据表对应的源数据是否还有效。
108.可选地,所述第二处理单元602具体用于基于所述运行失败的数据同步指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还有效。
109.可选地,若所述运行失败的数据同步指令为数据插入指令或者数据更新指令,所述第二处理单元602具体用于基于所述运行失败的数据插入指令或者数据更新指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否还存在,若存在,则判定有效。
110.可选地,若所述运行失败的数据同步指令为数据删除指令,所述第二处理单元602具体用于基于所述运行失败的数据删除指令,确定对应主键和唯一索引在所述源数据表中指向的源数据是否保持为删除状态,若是,则判定有效。
111.本技术实施例还提供一种计算机存储介质,所述计算机存储介质上存储有计算机可执行程序,所述计算机可执行程序被运行以实施本技术实施例任一所述的方法。
112.图7为本技术实施例一种电子设备的结构示意图;如图7所示,所述电子设备包括存储器701以及处理器702,所述存储器上用于存储计算机可执行程序,所述处理器用于运行所述计算机可执行程序以实施本技术实施例任一所述的方法。
113.以上所述实施例,仅为本技术的具体实施方式,用以说明本技术的技术方案,而非对其限制,本技术的保护范围并不局限于此,尽管参照前述实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本技术实施例技术方案的精神和范围,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应所述以权利要求的保护范围为准。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献