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

一种实现增量数据同步的系统、方法、设备及存储介质与流程

2022-02-24 14:10:46 来源:中国专利 TAG:


1.本技术涉及数据库技术领域,具体涉及一种实现增量数据同步的系统、方法、设备及存储介质。


背景技术:

2.在数据库之间进行数据同步时,会先读取源数据库中的数据,再将读取到的源数据库中的数据写入目标数据库中,实现数据库之间的数据同步。
3.在现有技术中,将读取到的数据写入至目标数据库中的写入速度小于从源数据库中读取数据的读取速度,导致数据读取和数据写入的速度不对等,数据库之间数据同步的速度较慢,数据不能及时同步。


技术实现要素:

4.有鉴于此,本技术实施例提供一种实现增量数据同步的系统、方法、设备及存储介质,以实现数据库之间较快地数据同步。
5.为解决上述问题,本技术实施例提供的技术方案如下:
6.一种实现增量数据同步的系统,所述系统包括:至少一个读取模块以及至少一个写入模块,所述读取模块与所述写入模块具有对应关系;
7.所述读取模块,用于从源数据库获取增量数据作为待同步数据;从所述待同步数据中确定与当前读取模块对应的待写入数据;各个所述读取模块对应的待写入数据组成所述待同步数据;
8.所述写入模块,用于从对应的读取模块获取所述待写入数据;启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待写入数据写入目标数据库。
9.在一种可能的实现方式中,所述系统还包括控制模块;
10.所述控制模块,用于为每个所述读取模块分配序号;
11.所述读取模块具体用于:将所述待同步数据中的第一目标数据的命名空间字段进行哈希运算后,对读取模块的数量取模得到目标值;
12.如果所述目标值与当前读取模块的序号相同,将所述第一目标数据确定为与所述当前读取模块对应的待写入数据。
13.在一种可能的实现方式中,所述写入模块具体用于:
14.启动至少一个数据操纵语言线程以及一个数据定义语言线程;
15.读取所述待写入数据中的第二目标数据的操作日志中的写入类型;
16.当所述第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,在所述数据定义语言线程的状态为非写入状态时,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
17.当所述第二目标数据的操作日志中的写入类型为数据定义语言写入类型,在各个所述数据操纵语言线程的状态均为非写入状态时,根据所述第二目标数据的操作日志,利
用所述数据定义语言线程控制所述第二目标数据写入目标数据库。
18.在一种可能的实现方式中,所述写入模块具体用于:当所述第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,确定所述数据定义语言线程的状态;
19.如果所述数据定义语言线程的状态为非写入状态,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
20.如果所述数据定义语言线程的状态为写入状态,等待所述数据定义语言线程的状态变更为非写入状态之后,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
21.和/或,
22.当所述第二目标数据的操作日志中的写入类型为数据定义语言写入类型,确定各个所述数据操纵语言线程的状态;
23.如果各个所述数据操纵语言线程的状态均为非写入状态,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库;
24.如果任一所述数据操纵语言线程的状态为写入状态,等待处于写入状态的数据操纵语言线程的状态变更为非写入状态后,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库。
25.在一种可能的实现方式中,所述写入模块还用于:在利用所述多个线程控制所述待写入数据写入目标数据库的过程中,确定当前写入进度;
26.所述控制模块还用于:获取各个所述写入模块的当前写入进度。
27.在一种可能的实现方式中,所述控制模块还用于:
28.当判断所述读取模块发生故障,获取发生故障的读取模块对应的写入模块的当前写入进度作为第一写入进度;
29.将所述第一写入进度发送给所述发生故障的读取模块,触发所述发生故障的读取模块根据所述第一写入进度继续确定与当前读取模块对应的待写入数据;
30.当判断所述写入模块发生故障,获取发生故障的写入模块的当前写入进度作为第二写入进度;
31.将所述第二写入进度发送给所述发生故障的写入模块,触发所述发生故障的写入模块根据所述第二写入进度继续利用所述多个线程控制所述待写入数据写入目标数据库。
32.一种实现增量数据同步的方法,所述方法应用于读取模块,所述方法包括:
33.从源数据库获取增量数据作为待同步数据;
34.从所述待同步数据中确定与当前读取模块对应的待写入数据;各个所述读取模块对应的待写入数据组成所述待同步数据;
35.将所述待写入数据发送给对应的写入模块,以使所述写入模块启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待写入数据写入目标数据库。
36.一种实现增量数据同步的方法,所述方法应用于写入模块,所述方法包括:
37.从对应的读取模块获取待写入数据;所述待写入数据是所述读取模块从源数据库获取增量数据作为待同步数据,从所述待同步数据中确定的,各个所述读取模块对应的待写入数据组成所述待同步数据;
38.启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待
写入数据写入目标数据库。
39.一种实现增量数据同步的设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现上述任一种的实现增量数据同步的方法。
40.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行上述任一种实现增量数据同步的方法。
41.由此可见,本技术实施例具有如下有益效果:
42.本技术实施例提供的实现增量数据同步的系统,系统中包括至少一个读取模块以及与读取模块对应的写入模块;在本技术实施例提供的实现增量数据同步的系统中,读取模块用于从源数据库中获取增量数据作为待同步数据,再确定与当前读取模块对应的待写入数据;写入模块用于从对应的读取模块中获取待写入数据;最后,启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库。通过在增量数据同步系统中建立至少一个读取模块以及与读取模块对应的写入模块,可以采用多进程的同步方式,实现多个读取模块可以同时读取数据,对应的多个写入模块可以同时写入数据,提高了数据的读取速度和写入速度。写入模块在对应的读取模块中获取待写入数据后,启动多个线程控制数据写入,每个写入模块实现多线程的数据写入,进一步提高了数据写入目标数据库的速度。通过多进程和多线程的数据同步方式可以提高数据同步的速度,使得数据读取和数据写入的速度对等,实现及时地数据同步。
附图说明
43.图1为本技术实施例提供的实现增量数据同步场景示意图;
44.图2为本技术实施例提供的一种实现增量数据同步的系统的结构示意图;
45.图3为本技术实施例提供的一种写入模块将待写入数据写入目标数据库的方法的流程图;
46.图4为本技术实施例提供的一种实现增量数据同步的方法的流程示意图;
47.图5为本技术实施例提供的另一种实现增量数据同步的方法的流程示意图。
具体实施方式
48.为使本技术的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本技术实施例作进一步详细的说明。
49.发明人在对传统的增量数据同步的方法进行研究后发现,传统的增量数据同步方法中,数据的读取速度和写入速度不对等,从源数据库中读取数据的读取速度大于将数据写入目标数据库的写入速度。如此导致从源数据库读取的数据不能及时地写入目标数据库中,数据库之间数据同步的速度较慢,不能实现及时地数据同步。例如,在实现分布式文档储存数据库的增量同步时,通过从存放增量数据的环形数据队列拉取数据实现对于增量数据的同步。而在进行数据同步时,写入目标数据库的速度远远小于拉取数据的速度,导致增量数据的读取速度大于数据的写入数据,不能实现快速地数据同步。
50.基于此,本技术实施例提供了一种实现增量数据同步的系统,系统中包括至少一个读取模块以及至少一个写入模块,读取模块与写入模块是对应的。本技术实施例提供的
实现增量数据同步的系统包括:读取模块和写入模块。读取模块用于从源数据库中获取增量数据作为待同步数据,从待同步数据中确定与当前读取模块对应的待写入数据;其中,待同步数据是由各个读取模块对应的待写入数据组成的;写入模块用于从对应的读取模块中获取待写入数据,再启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库。
51.为了便于理解本技术实施例提供的实现增量数据同步的方法,下面结合图1所示的场景示例进行说明。其中,本技术实施例提供的实现增量数据同步的方法可以应用于实现增量数据同步的系统101。
52.如图1所示,该图为本技术实施例提供的实现增量数据同步场景示意图。
53.应用于增量数据同步的系统101包括至少一个读取模块102和与读取模块102对应的写入模块103。
54.在实际应用中,读取模块102从源数据库104中获取增量数据作为待同步数据;从待同步数据中确定与当前读取模块对应的待写入数据。写入模块103从对应的读取模块102获取待写入数据;启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库105中。
55.需要说明的是,本技术实施例中不限定源数据库103和目标数据库104的数据库类型,可以为现有的或将来的用于储存数据的数据库。源数据库103和目标数据库104均可以是由服务器或服务器集群构建的数据库。实现增量数据同步的系统101可以设置于相同的服务器中。例如,位于源数据库103所在的服务器,或者目标数据库104所在的服务器,或者除源数据库103的服务器和目标数据库104的服务器之外的单独设置的服务器。实现增量数据同步的系统101也可以设置于服务器集群中,例如读取模块102和写入模块103可以分别设置于服务器集群不同的服务器中,而不同的读取模块102可以设置于同一服务器或者不同的服务器中,不同的写入模块103也可以设置于同一服务器或者不同的服务器中。本技术实施例中不限定实现增量数据同步的系统101设置于服务器或服务器集群中的具体方式,可以根据实际应用场景进行设置。
56.本领域技术人员可以理解,图1所示的框架示意图仅是本技术的实施方式可以在其中得以实现的一个示例。本技术实施方式的适用范围不受到该框架任何方面的限制。
57.为了便于理解本技术,下面结合附图对本技术实施例提供的一种实现增量数据同步的系统进行说明。
58.首先需要说明的是,本技术实施例提供的一种实现增量数据同步的系统,系统包括至少一个读取模块以及至少一个写入模块,读取模块与写入模块具有对应关系,该对应关系可以为一一对应关系。
59.其中,读取模块是用于从源数据库中读取数据的模块,每个读取模块具有对应的写入模块。写入模块用于将对应的读取模块所要实现同步的数据写入目标数据库中。
60.读取模块的数量为至少一个。写入模块的数量可以为一个也可以为至少一个。通过数量为至少一个的读取模块和对应的写入模块,使得读取模块与对应的写入模块之间进行数据传输,实现快速地多进程的数据同步。
61.参见图2所示,该图为本技术实施例提供的一种实现增量数据同步的系统的结构示意图,该系统包括读取模块201和写入模块202。
62.读取模块201,用于从源数据库获取增量数据作为待同步数据;从待同步数据中确定与当前读取模块对应的待写入数据;各个读取模块对应的待写入数据组成待同步数据。
63.在进行数据同步时,需要将源数据库中的增量数据作为数据同步至目标数据库中,以使目标数据库中具有与源数据库中相同的数据。
64.其中,具有需要进行同步的增量数据的数据库为源数据库,需要进行同步的增量数据为待同步数据。在本技术实施例中,待同步数据可以为mongodb的增量数据,mongodb为一种基于分布式文件存储的数据库,存储增量数据时可以使用环形队列。
65.为了区别待同步数据和源数据库中的其他数据,可以对待同步数据进行标识的标记或者是限定待同步数据的数据范围。例如,可以将上一次数据同步之后生成的所有增量数据作为待同步数据。
66.读取模块从源数据库中获取待同步数据。在一种可能的实现方式中,可以通过触发同步按键的方式,使得读取模块获取待同步数据。
67.读取模块从待同步数据中确定与当前读取模块对应的待写入数据,各个读取模块对应的待写入数据组成待同步数据。
68.为了实现多个读取模块同时进行待同步数据的读取以使对应的写入模块可以同时进行数据的写入,可以对待同步数据进行划分,得到每个读取模块对应的待写入数据,以便通过读取模块进行对应的待写入数据的读取。各个读取模块对应的待写入数据组成待同步数据,如此可以确保全部待同步数据实现数据的同步。并且,在一种可能的情况中,为了防止待同步数据重复写入,待写入数据之间不具有重复的数据。
69.读取模块可以从待同步数据中确定对应的待写入数据,进而对确定的待写入数据进行读取处理。本技术实施例还提供了读取模块从待同步数据中确定与当前读取模块对应的待写入数据的实施方式,具体实施方式请参见下文说明。
70.通过读取模块对所对应的待写入数据的确定以及读取,可以实现多个读取模块同时对各自对应的待写入数据的读取,提高了对待同步数据的读取速度。
71.写入模块202,用于从对应的读取模块获取待写入数据;启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库。
72.写入模块与读取模块是对应的,是用于将待写入数据写入目标数据库中的模块。在一种可能的实现方式中,为了防止数据同步出现传输混乱的情况,写入模块与读取模块可以是一一对应的。
73.在读取模块确定对应的待写入数据后,与读取模块对应的写入模块通过读取模块获取待写入数据,以便将待写入数据写入目标数据库中。
74.写入模块通过对应的读取模块获取待写入数据,可以实现待写入数据的数据传输,在提高待同步数据读取速度的基础上,对应的提高了待同步数据的写入速度。
75.写入模块启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库。
76.可以理解的是,数据的读取速度与数据的写入速度相比,写入速度可能较慢。为了进一步提高数据写入的速度,写入模块可以启动多个线程,进行待写入数据的写入。
77.写入模块在将待写入数据写入目标数据库的过程中,可以根据待写入数据的操作日志,利用多个线程控制待写入数据的写入。写入模块所采取的用于数据同步的线程具有
多个种类,并且部分种类的线程可以采用多个相同种类的线程进行待写入数据的写入。写入模块可以根据待写入数据的操作日志,确定所要使用的线程,利用多个线程控制待写入数据进行目标数据库的写入。
78.在一种可能的实现方式中,写入模块启动的线程可以包括dml(data manipulation language,数据操纵语言)线程以及ddl(data definition language,数据定义语言)线程。相对应的,本技术实施例还提供了写入模块根据待写入数据的操作日志,利用线程控制待写入数据写入目标数据库的实施方式,具体实施方式请参见下文说明。
79.基于上述读取模块201和写入模块202的相关内容可知,本技术实施例提供的实现增量数据同步的系统中,读取模块从源数据库中获取增量数据作为待同步数据,再从待同步数据中确定与当前读取模块对应的待写入数据,各个读取模块对应的待写入数据组成待同步数据。通过对待同步数据进行划分,读取模块负责对将对应的待写入数据传输至与读取模块对应的写入模块中,可以实现待同步数据的多进程的读取和写入。写入模块通过多个线程控制待写入数据写入目标数据库,可以采用多线程的写入方式将待写入数据写入目标数据库中,提高了待写入数据的写入速度。通过采用多进程和多线程的数据同步方式,可以在同步提高待同步数据的读取速度和写入速度的基础上,提升待同步数据的写入速度,减小读取速度和写入速度之间的差距,使得数据库之间可以实现快速地数据同步。
80.在一种可能的实现方式中,用于将待写入数据写入目标数据库的线程可以包括dml线程以及ddl线程,写入模块可以依据线程的种类和线程的状态确定控制待写入数据的写入。
81.则写入模块202具体可以用于启动至少一个数据操纵语言线程以及一个数据定义语言线程;读取待写入数据中的第二目标数据的操作日志中的写入类型;当第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,在数据定义语言线程的状态为非写入状态时,根据第二目标数据的操作日志,利用至少一个数据操纵语言线程控制第二目标数据写入目标数据库;当第二目标数据的操作日志中的写入类型为数据定义语言写入类型,在各个数据操纵语言线程的状态均为非写入状态时,根据第二目标数据的操作日志,利用数据定义语言线程控制第二目标数据写入目标数据库。
82.下面通过流程的方式对上述写入模块的工作原理进行介绍。参见图3所示,该图为本技术实施例提供的一种写入模块将待写入数据写入目标数据库的方法的流程图,包括s301-s304:
83.s301:启动至少一个数据操纵语言线程以及一个数据定义语言线程。
84.写入模块启动dml线程以及ddl线程用于进行待写入数据的写入。其中,dml线程可以支持多线程写入,可以同时使用多个dml线程进行待写入数据的写入,不会影响待写入数据写入目标数据库的最终结果。而ddl线程不能支持多线程写入,如果采用多个ddl线程进行待写入数据的写入,会导致待写入数据写入出错。因此,写入模块可以启动至少一个dml线程以及一个ddl线程,用于进行待写入数据的写入。
85.写入模块启动至少一个dml线程以及一个ddl线程进行待写入数据的写入,可以采用多线程的写入方式,实现待写入数据的写入。
86.s302:读取待写入数据中的第二目标数据的操作日志中的写入类型。
87.写入模块读取待写入数据中的每一条数据,即第二目标数据,的操作日志中的写
入类型,根据写入类型确定所要选择的线程的种类。其中,第二目标数据可以是从待写入数据中获取的一条数据,在确定第二目标数据的操作日志中的写入类型,根据写入类型确定所要选择的线程的种类后,选取下一条待写入数据作为第二目标数据,进行对应的写入类型和线程种类的确定。以此类推,直到待写入数据中的每一条数据均作为第二目标数据,确定操作日志中的写入类型以及对应的线程种类后完成。
88.对应于写入模块启动的dml线程和ddl线程,第二目标数据的操作日志中具有的第二目标数据的写入类型可以为dml写入类型或者ddl写入类型。当第二目标数据的操作日志中的写入类型为dml写入类型时,可以利用dml线程写入目标数据库;当第二目标数据的操作日志中的写入类型为ddl写入类型时,可以利用ddl线程写入目标数据库。
89.s303:当第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,在数据定义语言线程的状态为非写入状态时,根据第二目标数据的操作日志,利用至少一个数据操纵语言线程控制第二目标数据写入目标数据库。
90.当第二目标数据的操作日志中的写入类型为dml写入类型时,写入模块需要利用dml线程进行第二目标数据的写入。
91.为了判断线程是否可用,可以根据线程是否正在进行数据同步,将线程的状态划分为非同步状态和同步状态。非同步状态是指线程当前没有执行将待写入数据写入目标数据库,同步状态是指线程正在执行将待写入数据写入目标数据库。
92.可以理解的是,对于同一写入模块,在同一时间内仅可以使用相同种类的线程。在确定需要利用dml线程进行第二目标数据的写入后,可以通过判断ddl线程的状态,确定dml线程是否可用。在ddl线程的状态为非写入状态时,可以使用dml线程进行待写入数据的写入。
93.写入模块根据待写入数据的操作日志,利用至少一个dml线程控制第二目标数据写入目标数据库。操作日志中具有待写入数据有关储存的记录以及数据库的操作记录。根据操作日志,可以获取写入待写入数据所需要的相关信息。
94.并且,当第二目标数据的写入类型为dml写入类型时,对应的dml线程的数量可以为至少一个。为了提高第二目标数据写入的速度,可以使用至少一个dml线程控制第二目标数据写入目标数据库。
95.s304:当第二目标数据的操作日志中的写入类型为数据定义语言写入类型,在各个数据操纵语言线程的状态均为非写入状态时,根据第二目标数据的操作日志,利用数据定义语言线程控制第二目标数据写入目标数据库。
96.当第二目标数据的操作日志中的写入类型为ddl写入类型时,写入模块需要利用ddl线程进行该第二目标数据的写入。
97.写入模块判断dml线程的状态,由于ddl线程数量为至少一个,所以需要确定各个dml线程的状态均为非写入状态时,才可以使用ddl线程进行数据的写入。
98.当各个dml线程的状态均为非写入状态时,根据待写入数据的操作日志,利用ddl线程控制第二目标数据写入目标数据库。
99.并且,写入模块启动的ddl线程的数量为一个,写入模块可以利用启动的一个ddl线程控制第二目标数据的写入。
100.在本技术实施例中,通过写入模块启动至少一个dml线程以及一个ddl线程,并根
据第二目标数据中的操作日志中的写入类型确定所利用的线程类型。在对应类型的线程可以使用的条件下,根据待写入数据的操作日志将第二目标日志写入目标数据库中。写入模块可以通过多线程的同步方式将待写入数据写入至目标数据库中,提高了待写入数据的写入速度。如此可以实现待同步数据读取速度和写入速度之间的对等,提高数据库之间数据同步的速度。
101.在一种可能的实现方式中,写入模块202具体用于当第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,确定数据定义语言线程的状态;
102.如果数据定义语言线程的状态为非写入状态,根据第二目标数据的操作日志,利用至少一个数据操纵语言线程控制第二目标数据写入目标数据库;
103.如果数据定义语言线程的状态为写入状态,等待数据定义语言线程的状态变更为非写入状态之后,根据第二目标数据的操作日志,利用至少一个数据操纵语言线程控制第二目标数据写入目标数据库;
104.和/或,
105.当第二目标数据的操作日志中的写入类型为数据定义语言写入类型,确定各个数据操纵语言线程的状态;
106.如果各个数据操纵语言线程的状态均为非写入状态,根据第二目标数据的操作日志,利用数据定义语言线程控制第二目标数据写入目标数据库;
107.如果任一数据操纵语言线程的状态为写入状态,等待处于写入状态的数据操纵语言线程的状态变更为非写入状态后,根据第二目标数据的操作日志,利用数据定义语言线程控制第二目标数据写入目标数据库。
108.具体的,通过步骤的方式介绍写入模块将写入类型为dml写入类型的第二目标数据写入目标数据库的工作原理,具体包括以下三个步骤:
109.a1:当第二目标数据的操作日志中的写入类型为dml写入类型,确定ddl线程的状态。
110.当写入模块确定第二目标数据的操作日志中的写入类型为dml写入类型时,可以通过确定ddl线程的状态确定dml线程是否可用。
111.a2:如果ddl线程的状态为非写入状态,根据待写入数据的操作日志,利用至少一个dml线程控制第二目标数据写入目标数据库。
112.如果ddl线程的状态为非写入状态,则写入模块可以利用dml线程进行待写入数据的写入。根据待写入数据的操作日志,利用至少一个dml线程控制第二目标数据写入目标数据库。
113.a3:如果ddl线程的状态为写入状态,等待ddl线程的状态变更为非写入状态之后,根据待写入数据的操作日志,利用至少一个dml线程控制第二目标数据写入目标数据库。
114.如果ddl线程的状态为写入状态,则说明写入模块正在使用ddl线程进行数据的写入,无法使用dml线程进行第二目标数据的写入。需要等待ddl线程的状态变更为非写入状态之后,再进行利用dml线程进行第二目标数的写入。根据待写入数据的操作日志,利用至少一个dml线程控制第二目标数据写入。
115.此外,通过步骤的方式介绍写入模块将写入类型为ddl写入类型的第二目标数据写入目标数据库的工作原理,具体包括以下三个步骤:
116.具体的,将写入类型为ddl写入类型的第二目标数据写入目标数据库的方法可以包括以下三个步骤:
117.b1:当第二目标数据的操作日志中的写入类型为ddl写入类型,确定各个dml线程的状态。
118.当第二目标数据的操作日志中的写入类型为ddl写入类型时,通过确定各个dml线程的状态来确定是否可以利用ddl线程进行数据写入。并且,由于写入模块可以利用多个dml线程进行对应的写入类型为dml写入类型的第二目标数据的写入,所以需要确定各个dml线程的状态。
119.b2:如果各个dml线程的状态均为非写入状态,根据待写入数据的操作日志,利用ddl线程控制第二目标数据写入目标数据库。
120.如果各个dml线程的状态均为非写入状态,则可以使用dml线程进行第二目标数据的写入。根据待写入数据的操作日志,利用ddl线程控制第二目标数据写入目标数据库。
121.b3:如果任一dml线程的状态为写入状态,等待处于写入状态的dml线程的状态变更为非写入状态后,根据待写入数据的操作日志,利用ddl线程控制第二目标数据写入目标数据库。
122.当任意一个dml线程的状态为写入状态时,说明写入模块使用dml线程进行数据的写入。需要等待处于写入状态的dml线程的状态变更为非写入状态后,也就是全部的dml线程的状态均为非写入状态后,根据待写入数据的操作日志,利用ddl线程控制第二目标数据写入目标数据库。在本技术实施例中,通过控制模块判断其他的线程的状态,确定与操作日志中的写入类型所对应的线程的状态,进而确定与操作日志中的写入类型所对应的线程是否可用。如此可以防止线程使用的混乱,实现有序使用多线程进行第二目标数据的写入。通过确定可以使用的线程,进而控制第二目标数据的写入,可以实现对不同写入类型对应的线程进行控制,能够采用多线程的同步方式将待写入数据写入至目标数据库中,提高了待写入数据的写入速度。
123.在一种可能的实现方式中,用于实现增量数据同步的系统中还可以包括控制模块,控制模块可以对读取模块和写入模块进行控制。
124.读取模块具体用于为每个读取模块分配序号;
125.读取模块具体用于:将待同步数据中的第一目标数据的命名空间字段进行哈希运算后,对读取模块的数量取模得到目标值;
126.如果目标值与当前读取模块的序号相同,将第一目标数据确定为与当前读取模块对应的待写入数据。具体的,控制模块可以为各个读取模块设置数据过滤条件,即可以对每个读取模块设置对应的序号,以便实现读取模块与待写入数据的对应。
127.例如,控制模块为每个读取模块分配从0开始的自然数序号,使得每个读取模块具有一个对应的序号标识,分别为:model_0,model_1,model_2,
……
model_n-1。其中,n为读取模块的总个数。
128.读取模块将第一目标数据的命名空间字段进行哈希运算后对n取模得到目标值,如果目标值与当前读取模块的序号相同,将目标数据确定为与当前读取模块对应的待写入数据。其中,n为读取模块的数量,第一目标数据为待同步数据中的各个数据。第一目标数据可以是从待同步数据中获取的一条数据,在确定为对应的读取模块的待写入数据之后,选
取下一条待同步数据作为第一目标数据,进行对应的读取模块的确定,以此类推,直到待同步数据中的每一条数据均作为第一目标数据确定了对应的读取模块,待写入数据确定完成。
129.相对应的,待同步数据中的每条增量数据均具有一个字段用于标识数据的归属,该字段可称为命名空间字段。命名空间字段是一个字符串,通过对命名空间字段进行哈希运算,可以将命名空间字段转换为一个数值。再利用命名空间字段对应的数值进行对n取模运算,得到目标值。将待同步数据中的每一条数据作为第一目标数据,根据第一目标数据的目标值确定对应的读取模块。
130.为了实现较为平均的数据分配,可以对第一目标数据中的命名空间字段进行哈希计算,对得到的数值进行对n取模计算,得到目标值。再将目标值与当前的读取模块的序号进行比较,如果目标值与当前的读取模块的序号相同,则将第一目标数据确定为当前的读取模块对应的待写入数据,由当前的读取模块将对应的待写入数据传输至对应的写入模块。
131.以上述控制模块的序号标识和数据文档的文档标识为例,读取模块的数量为10,即n为10。如果对第一目标数据的命名空间字段进行哈希计算,得到第一目标数据的命名空间字段对应的数值为5,再对5进行对10取模计算,得到的目标值为5。该条第一目标数据就为序号标识为model_5的读取模块所对应的待写入数据。以此类推,待同步数据中的每一条数据具有对应的读取模块。
132.在本技术实施例中,通过控制模块对各个读取模块设置数据过滤条件,为读取模块中的每一个读取模块分配序号,并进一步根据第一目标数据的目标值,确定读取模块对应的待写入数据。通过对第一目标数据的命名空间字段进行哈希运算后再进行对n取模计算,可以根据得到的目标值确定对应的读取模块。如此使得待同步数据中的每一条数据均具有对应的读取模块,且具有相同命名空间字段的待同步数据可以对应于同一个读取模块。通过确定读取模块对应的待写入数据,便于多个读取模块进行多进程的数据读取和对应的数据写入,提高数据读取的速度。
133.在将源数据库中的待同步数据同步至目标数据库的过程中,还可以对写入数据的进度进行监控。
134.写入模块还用于:在利用多个线程控制待写入数据写入目标数据库的过程中,确定当前写入进度;
135.控制模块还用于:获取各个写入模块的当前写入进度。
136.写入模块确定的当前写入进度可以为已经写入目标数据库中的待写入数据的写入进度。具体的,写入模块可以将,已经写入目标数据库中的待写入数据的操作日志中的时间戳,作为当前写入进度。当有新的待写入数据成功写入目标数据库后,利用最新写入成功的待写入数据的操作日志中的时间戳,更新当前写入进度。
137.各个写入模块确定对应的待写入数据的当前写入进度,并将当前写入进度发送至控制模块。控制模块通过获取各个写入模块的当前写入进度,可以确定各个写入模块的当前写入进度,并根据各个写入模块的当前写入进度进行数据读取和写入的调整。
138.在进行数据库之间的数据同步时,读取模块或者是写入模块可能会发生故障,此时需要对数据的读取和写入进行对应的调整。
139.进一步的,控制模块还用于:
140.当判断读取模块发生故障,获取发生故障的读取模块对应的写入模块的当前写入进度作为第一写入进度;
141.将第一写入进度发送给发生故障的读取模块,触发发生故障的读取模块根据第一写入进度继续确定与当前读取模块对应的待写入数据;
142.当判断写入模块发生故障,获取发生故障的写入模块的当前写入进度作为第二写入进度;
143.将第二写入进度发送给发生故障的写入模块,触发发生故障的写入模块根据第二写入进度继续利用多个线程控制待写入数据写入目标数据库
144.在一种可能的实施方式中,当控制模块判断读取模块发生故障时,控制模块可以执行以下两个步骤:
145.c1:当判断读取模块发生故障,获取发生故障的读取模块对应的写入模块的当前写入进度作为第一写入进度。
146.控制模块可以根据读取模块发送的心跳信号进行故障判断,若读取模块发送的心跳信号异常,可以判断读取模块发生故障。
147.当读取模块发生故障时,可能会影响到对应的写入模块获取待写入数据。控制模块可以获取发生故障的读取模块所对应的写入模块的当前写入进度,将对应的写入模块的当前写入进度作为第一写入数据,以便根据对应的写入模块的当前写入进度重新确定读取模块所要读取的待写入数据。
148.c2:将第一写入进度发送给发生故障的读取模块,触发发生故障的读取模块根据第一写入进度继续确定与当前读取模块对应的待写入数据。
149.控制模块将第一写入进度发送至出现故障的读取模块。发生故障的读取模块可以根据第一写入进度确定对应的写入模块已成功写入的待写入数据,从而确定当前读取模块对应的待写入数据,以便对未成功写入的待写入数据进一步进行写入处理,实现对于发生故障的读取模块的重启。
150.在另一种可能的实施方式中,当控制模块判断写入模块发生故障时,控制模块可以执行以下两个步骤::
151.d1:当判断写入模块发生故障,获取发生故障的写入模块的当前写入进度作为第二写入进度。
152.控制模块可以根据写入模块发送的心跳信息进行写入模块的故障判断。若控制模块检测到写入模块发送的心跳信号异常,则判断写入模块发生故障。
153.当写入模块发生故障时,写入模块不能正常写入待写入数据。需要根据当前写入进度对待写入数据的写入进行重新调整。
154.控制模块获取发生故障的写入模块的当前写入进度作为第二写入进度,利用第二写入进度对发生故障的写入模块进行调整。
155.d2:将第二写入进度发送给发生故障的写入模块,触发发生故障的写入模块根据第二写入进度继续利用多个线程控制待写入数据写入目标数据库。
156.控制模块将第二写入进度发送至发生故障的写入模块,以便触发发生故障的写入模块重启。发生故障的写入模块根据第二写入进度,继续利用多个线程控制未写入的待写
入数据写入目标数据库。
157.在本技术实施例中,写入模块获取当前写入进度,并发送至控制模块。控制模块对读取模块和写入模块进行是否发生故障的判断。若读取模块或者是写入模块发生故障,控制模块可以根据发生故障的读取模块对应的写入模块的当前写入进度,或者是发生故障的写入模块的当前写入进度,重启发生故障的读取模块或者发生故障的写入模块。可以在保证数据同步的进度连续的基础上,实现对于读取模块或者是写入模块的重启。既可以提高数据同步的速度,也可以保证数据同步的正确性。基于上述实现增量数据同步的系统的相关内容,本技术实施例还提供了一种实现增量数据同步的方法,应用于读取模块,下面结合附图进行说明。参见图4,该图为本技术实施例提供的一种实现增量数据同步的方法的流程示意图,该方法包括s401-s403:
158.s401:从源数据库获取增量数据作为待同步数据。
159.s402:从所述待同步数据中确定与当前读取模块对应的待写入数据;各个所述读取模块对应的待写入数据组成所述待同步数据。
160.s403:将所述待写入数据发送给对应的写入模块,以使所述写入模块启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待写入数据写入目标数据库。
161.可选的,所述从所述待同步数据中确定与当前读取模块对应的待写入数据,包括:
162.将所述待同步数据中的第一目标数据的命名空间字段进行哈希运算后,对读取模块的数量取模得到目标值;
163.如果所述目标值与当前读取模块的序号相同,将所述第一目标数据确定为与所述当前读取模块对应的待写入数据。
164.可选的,所述方法还包括:
165.当控制模块判断当前读取模块发生故障时,从所述控制模块获取第一写入进度;所述第一写入进度是所述控制模块从所述当前读取模块对应的写入模块获取的当前写入进度;
166.根据所述第一写入进度继续确定与当前读取模块对应的待写入数据。
167.基于上述实现增量数据同步的系统的相关内容,本技术实施例还提供了一种实现增量数据同步的方法,应用于写入模块,下面结合附图进行说明。参见图5,该图为本技术实施例提供的一种实现增量数据同步的方法的流程示意图,该方法包括s501-s502:
168.s501:从对应的读取模块获取待写入数据;所述待写入数据是所述读取模块从源数据库获取增量数据作为待同步数据,从所述待同步数据中确定的,各个所述读取模块对应的待写入数据组成所述待同步数据;
169.s502:启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待写入数据写入目标数据库。
170.可选的,所述启动多个线程,根据所述待写入数据的操作日志,利用所述多个线程控制所述待写入数据写入目标数据库,包括:
171.启动至少一个数据操纵语言线程以及一个数据定义语言线程;
172.读取所述待写入数据中的第二目标数据的操作日志中的写入类型;
173.当所述第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,在所述
数据定义语言线程的状态为非写入状态时,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
174.当所述第二目标数据的操作日志中的写入类型为数据定义语言写入类型,在各个所述数据操纵语言线程的状态均为非写入状态时,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库。
175.可选的,所述当所述第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,在所述数据定义语言线程的状态为非写入状态时,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库,包括:
176.当所述第二目标数据的操作日志中的写入类型为数据操纵语言写入类型,确定所述数据定义语言线程的状态;
177.如果所述数据定义语言线程的状态为非写入状态,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
178.如果所述数据定义语言线程的状态为写入状态,等待所述数据定义语言线程的状态变更为非写入状态之后,根据所述第二目标数据的操作日志,利用所述至少一个数据操纵语言线程控制所述第二目标数据写入目标数据库;
179.和/或,
180.所述当所述第二目标数据的操作日志中的写入类型为数据定义语言写入类型,在各个所述数据操纵语言线程的状态均为非写入状态时,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库,包括:
181.当所述第二目标数据的操作日志中的写入类型为数据定义语言写入类型,确定各个所述数据操纵语言线程的状态;
182.如果各个所述数据操纵语言线程的状态均为非写入状态,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库;
183.如果任一所述数据操纵语言线程的状态为写入状态,等待处于写入状态的数据操纵语言线程的状态变更为非写入状态后,根据所述第二目标数据的操作日志,利用所述数据定义语言线程控制所述第二目标数据写入目标数据库。
184.可选的,所述方法还包括:
185.在利用所述多个线程控制所述待写入数据写入目标数据库的过程中,确定当前写入进度;
186.将所述当前写入进度发送给控制模块。
187.可选的,所述方法还包括:
188.当控制模块判断当前写入模块发生故障时,从所述控制模块获取第二写入进度;所述第二写入进度是所述控制模块从当前写入模块获取的当前写入进度;
189.根据所述第二写入进度继续利用所述多个线程控制所述待写入数据写入目标数据库。
190.另外,本技术实施例还提供了一种实现增量数据同步的设备,包括:存储器,处理器,及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时,实现如上述实现增量数据同步的方法。
191.另外,本技术实施例还提供了一种计算机可读存储介质,所述计算机可读存储介
质中存储有指令,当所述指令在终端设备上运行时,使得所述终端设备执行如上述实现增量数据同步的方法。
192.在本技术实施例提供的实现增量数据同步的方法中,读取模块用于从源数据库中获取增量数据作为待同步数据,再确定与当前读取模块对应的待写入数据;写入模块用于从对应的读取模块中获取待写入数据;最后,启动多个线程,根据待写入数据的操作日志,利用多个线程控制待写入数据写入目标数据库。通过在增量数据同步系统中建立至少一个读取模块以及与读取模块对应的写入模块,可以采用多进程的同步方式,实现多个读取模块可以同时读取数据,对应的多个写入模块可以同时写入数据,提高了数据的读取速度和写入速度。写入模块在对应的读取模块中获取待写入数据后,启动多个线程控制数据写入,每个写入模块实现多线程的数据写入,进一步提高了数据写入目标数据库的速度。通过多进程和多线程的数据同步方式可以提高数据同步的速度,使得数据读取和数据写入的速度对等,实现及时地数据同步。
193.需要说明的是,本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统或装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
194.应当理解,在本技术中,“至少一个(项)”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,用于描述关联对象的关联关系,表示可以存在三种关系,例如,“a和/或b”可以表示:只存在a,只存在b以及同时存在a和b三种情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a,b或c中的至少一项(个),可以表示:a,b,c,“a和b”,“a和c”,“b和c”,或“a和b和c”,其中a,b,c可以是单个,也可以是多个。
195.还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
196.结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。
197.对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本技术。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本技术的精神或范围的情况下,在其它实施例中实现。因此,本技术将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
再多了解一些

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

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

相关文献