数据同步方法、装置及电子设备与流程

文档序号:28160208发布日期:2021-12-24 19:26阅读:129来源:国知局
数据同步方法、装置及电子设备与流程

1.本发明涉及数据处理技术领域,具体涉及数据同步方法、装置及电子设备。


背景技术:

2.出于对数据分析的需要,通常需要获取大量的数据,而在实际的生产过程中,为保证生产环境的稳定,又或者出于项目的需要使用与源数据库完全不一样的数据库,则往往不会对存放生产数据的源数据库直接进行数据操作,而是将源数据库a里需要分析的数据经过粗筛后同步到另一个非生产用的数据库b里再进行数据操作。
3.不同的项目对源数据库a的数据有不同的需求,即源数据库a需要定向同步至多个非生产用的数据库b、数据库c、数据库d等。如图1所示,现有的数据同步方法为在需要进行数据同步时,通过中间服务器里的同步执行脚本,从源数据库a里拉取所需数据,经过脚本转换为符合非生产用数据库b、c、d语法规则的数据,再插入对应的非生产用数据库中。这种方法在面对千亿级数据量时,对源数据库a负载压力较大,严重时会影响到生产环境的使用。若因为不可抗力因素导致正在同步中的源数据库a或中间服务器宕机,则会导致数据损坏且无法校对,此时同步方案将完全不可用,影响后续处理。


技术实现要素:

4.有鉴于此,本发明实施例提供了一种数据同步方法、装置及电子设备,以解决数据同步的可靠性及效率较低的问题。
5.根据第一方面,本发明实施例提供了一种数据同步方法,包括:
6.获取并存储目标同步数据以及所要连接的多个目标数据库的配置信息;
7.创建多个目标线程;
8.根据所述目标数据库的配置信息以及所述多个目标线程,将所述目标同步数据同步至所述目标数据库中。
9.本发明实施例提供的数据同步方法,在获取到目标同步数据之后对其进行存储,分摊源数据库的负载压力,增强其系统健壮性,即使源数据库或本地发生宕机时,只要有其一还正常工作变能完成数据的同步,保证了数据同步的可靠性;同时利用多个目标线程进行数据同步,实现并行同步数据,极大地提升了同步速率。
10.结合第一方面,在第一方面第一实施方式中,所述创建多个目标线程,包括:
11.获取本地的性能数据,所述性能数据包括cpu核数、i/o耗时以及cpu耗时;
12.基于所述性能数据确定开启的目标线程的数量,以创建所述多个目标线程。
13.本发明实施例提供的数据同步方法,利用本地性能数据确定所开启的目标线程的数量,因为上下文的切换开销非常重要,若创建了太多的线程,则cpu花费在上下文的切换时间将多于执行程序的时间,甚至会导致堆内存溢出报错,保证了数据同步的效率。
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.图6是根据本发明实施例的数据同步装置的结构框图;
49.图7是本发明实施例提供的电子设备的硬件结构示意图。
具体实施方式
50.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
51.根据本发明实施例,提供了一种数据同步方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
52.在本实施例中提供了一种数据同步方法,可用于电子设备,如服务器等。在本实施例中以服务器为例,由于该服务器是用于中间缓存及数据同步的,因此,将其称之为中间服务器。图2是根据本发明实施例的数据同步方法的流程图,如图2所示,该流程包括如下步骤:
53.s11,获取并存储目标同步数据以及所要连接的多个目标数据库的配置信息。
54.目标同步数据是生产环境产生的数据,生产环境中产生的数据可以是先存储在源数据库中,中间服务器再从源数据库中获取到的;或者,生产环境中产生的数据直接发送给中间服务器进行存储,在此对其并不做任何限定,具体可以根据实际需求进行相应的设置。
55.中间服务器获取到目标同步数据之后,利用本地的数据库对其进行缓存,不仅可以实现数据备份,还可以在需要将目标同步数据同步至其他设备上的数据库时,避免从源数据库中获取数据,而是直接从本地数据库中获取到目标同步数据进行处理即可。中间服务器的作用是缓存目标同步数据,并将目标同步数据同步至其他数据库中。
56.所述的配置信息用于保证中间服务器能够准确地连接上对应的目标数据库,例如,包括连接目标数据库所需要的ip地址、端口号、servicename、用户名及密码。
57.s12,创建多个目标线程。
58.目标线程可以与目标数据库对应设置,也可以是一个目标数据库对应多个目标线程,等等。在此对所创建的目标线程的数量并不做任何限定,具体可以根据实际需求进行相应的设置。即,利用多线程技术实现数据同步,其中,一条线程指的是一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个进程包括由操作系统分配的内存空间,包含一个或多个线程,一个线程不能独立的存在,它必须是进程的一部分。一个进程一致运行,知道所有的非守护线程都结束运行后才能结束。
59.关于该步骤具体将在下文中进行详细描述。
60.s13,根据目标数据库的配置信息以及多个目标线程,将目标同步数据同步至目标数据库中。
61.中间服务器利用配置信息建立与对应的目标数据库的连接,再利用多个目标线程将所存储的目标同步数据同步至对应的目标数据库中。此处需要说明的是,同步至各个目标数据库中的数据可以是相同的,也可以是不同的。即,根据各个目标数据库的需求进行数据同步。
62.关于该步骤具体将在下文中进行详细描述。
63.本实施例提供的数据同步方法,在获取到目标同步数据之后对其进行存储,分摊源数据库的负载压力,增强其系统健壮性,即使源数据库或本地发生宕机时,只要有其一还正常工作变能完成数据的同步,保证了数据同步的可靠性;同时利用多个目标线程进行数据同步,实现并行同步数据,极大地提升了同步速率。
64.在本实施例中提供了一种数据同步方法,可用于电子设备,如服务器等。以中间服务器为例,图3是根据本发明实施例的数据同步方法的流程图,如图3所示,该流程包括如下步骤:
65.s21,获取并存储目标同步数据以及所要连接的多个目标数据库的配置信息。
66.中间服务器可以从源数据库中获取并存储目标同步数据,或者,中间服务器从生产环境中获取并存储所述目标同步数据。
67.其中,若对数据的并发写入有着极高的要求,可以不经过源数据库,而是在生产环境向源数据库写入前,先向中间服务器的数据库中写入数据以进行缓存,即从生产环境中直接获取目标同步数据,利用本地数据库极高的性能实现数据的一致性。
68.具体地,中间服务器在获取到目标同步数据之后,将其存储到本地的数据库中。例如,redis数据库,或其它类型的非关系型数据库,具体可以根据实际需求进行相应的设置。redis数据库是一种非关系型数据库,因其完全在内存中运行,因此性能极高。在本实施例中redis数据库用于保存需要经常读写的数据,例如配置信息、字典信息等,在进行数据同步时,同步执行脚本可直接从redis中读取以进行同步,而不必访问源数据库。
69.所述的同步执行脚本就是用来实现数据库之间数据传输的程度,按组成来看,同步执行脚本可以分为配置模块、读取模块以及写入模块三部分。具体地,配置模块用于保存目标数据库的配置信息以及下文所述的定时同步的时间设置等;读取模块,即读取数据库的执行代码,同时也可以进行数据初步筛选,只获取特定的数据,进一步地,为了访问内存溢出,中间服务器分批次从源数据库中拉取数据;写入模块,是将读取模块获取到的数据写入到需要被同步的数据库里,写入方法的优劣对同步速度有极大的影响,在本实施例中利用多线程进行数据同步。
70.进一步可选地,中间服务器可以将本地的存储空间进行划分,例如,一部分用于存储交互数据,另一部分用于存储生产过程产生的数据。即,通该对键进行排序和分区,在数据查询就不需要全局遍历,可以实现更快速的数据定位。
71.此外,关于配置信息的描述请参见图2所示实施例的s11中的相关描述,在此不再赘述。
72.s22,创建多个目标线程。
73.具体地,上述s22包括:
74.s221,获取本地的性能数据。
75.其中,所述性能数据包括cpu核数、i/o耗时以及cpu耗时。
76.本地的性能数据即为中间服务器的性能数据,其可以从中间服务器的系统中获取到。
77.s222,基于性能数据确定开启的目标线程的数量,以创建多个目标线程。
78.具体地,可以计算i/o耗时与cpu耗时比值,在此基础上再结合cpu核数,得到需要开启的目标线程的数量n。例如,可以采用如下公式计算:
79.目标线程的数量n=cpu核数*[c+i/o耗时与cpu耗时的比值]。
[0080]
其中,c为大于或等于1的常数,以保证[c+i/o耗时与cpu耗时的比值]的计算结果大于1.中间服务器在计算出目标线程的数量n之后,就可以创建n个目标线程。进一步地,在确定出目标线程的数量n之后,再由读取模块获取到的目标同步数据的大小除以目标线程的数量n,即可得到每个目标线程存放的执行数据量。
[0081]
在本实施例的一些可选实施方式中,上述s222可以包括:
[0082]
(1)利用确定出的目标线程的数量,创建多个目标线程。
[0083]
(2)创建线程池以及计数器。
[0084]
(3)基于线程池以及计数器控制多个目标线程的处理。
[0085]
例如,中间服务器使用executorservice方法创建一个线程池,线程池内目标线程的最大可开启数量和目标线程的数量n一样。使用countdownlatch同步工具类创建两个计数器,用来协调多个线程之间的同步。启动for循环需要开启的线程数,计算每个线程执行的数据,通过调用线程池里的executor.execute(mythead)方法执行线程里的插入语句,执行完关闭线程池。需要说明的是,当一个线程执行完了两个计数器均需要减一,不然这个线程会被一直挂起占用资源。其中,所述的两个计数器,一个计数器用于计算单个线程的执行数量,第二个计数器用于确定单个线程在整个线程排列的序号。在确定好了各个线程的执行序号之后,就可以去确定顺序,使得cpu统一的调配。其中,关于线程池、计数器以及线程调用方法并不限定于上文所述,具体可以根据实际需求进行相应的设置。
[0086]
利用线程池以及计数器对多个目标线程控制,以保证数据同步的可靠性以及提高资源利用率。
[0087]
s23,根据目标数据库的配置信息以及多个目标线程,将目标同步数据同步至目标数据库中。
[0088]
以在mysql里插入1000万数据为例,单线程所需时间为12分钟,采用多线程(10个线程)进行数据插入仅为77秒,要比单线程时间缩短90%。之所以要考虑最佳线程数是因为线程并非越多越好,例如将上述的创建10个线程改为创建20个线程,则会导致时间延长至100秒以上。
[0089]
详细请参见图2所示实施例的s13,在此不再赘述。
[0090]
本实施例提供的数据同步方法,利用本地性能数据确定所开启的目标线程的数量,因为上下文的切换开销非常重要,若创建了太多的线程,则cpu花费在上下文的切换时间将多于执行程序的时间,甚至会导致堆内存溢出报错,保证了数据同步的效率。
[0091]
在本实施例中提供了一种数据同步方法,可用于电子设备,如服务器等。以中间服务器为例,图4是根据本发明实施例的数据同步方法的流程图,如图4所示,该流程包括如下步骤:
[0092]
s31,获取并存储目标同步数据以及所要连接的多个目标数据库的配置信息。
[0093]
详细请参见图3所示实施例的s21,在此不再赘述。
[0094]
s32,创建多个目标线程。
[0095]
详细请参见图3所示实施例的s22,在此不再赘述。
[0096]
s33,根据目标数据库的配置信息以及多个目标线程,将目标同步数据同步至目标数据库中。
[0097]
具体地,上述s33包括:
[0098]
s331,基于目标数据库的配置信息,建立与多个目标数据库的连接。
[0099]
如图5所示,中间服务器用于将源数据库a中的数据同步至非生产数据库b、c以及d中。相应地,中间服务器就需要建立与源数据库a以及非生产数据库b、c以及d的连接。
[0100]
具体地,利用ip地址、端口号以及servicename连接上对应的目标数据库,再利用用户名以及密码登录到目标数据库,以建立与多个目标数据库的连接。
[0101]
s332,利用多个目标线程对目标同步数据进行相应转换后,同步至对应的目标数据库中。
[0102]
在中间服务器里存在两个同步执行脚本,分别为同步执行脚本a与同步执行脚本b。其中,同步执行脚本a用于从源数据库a中获取数据,将其按照键值对保存进中间服务器中的redis数据库中,此脚本可设置在源数据库a负载较小的时间段进行同步。
[0103]
同步执行脚本b用于从redis数据库或中间服务器的磁盘中获取数据,进行数据转换后排列为所需要的数据格式写入到非生产用数据库b、c以及d中。此脚本可随时执行,且可同时运行多个以对多个非生产用数据库进行同步。
[0104]
在本实施例的一些可选实施方式,上述s332可以包括:
[0105]
(1)获取预设同步时间。
[0106]
预设同步时间用于确定中间服务器向非生产数据库进行数据同步的时间,例如,可以在网络空闲时进行。
[0107]
(2)基于预设同步时间,利用多个目标线程对目标同步数据进行相应转换后,同步至对应的目标数据库中。
[0108]
当达到预设同步时间时,中间服务器利用多个目标线程对所存储的目标同步数据进行相应转换后同步至对应的目标数据库中。本实施例提供的数据同步方法,在预设同步时间进行数据同步,可以避免在网络繁忙的时候进行数据同步,可以提高数据同步的效率。
[0109]
作为本实施例的一种可选实施方式,所述的数据同步方法还包括:
[0110]
(1)统计目标同步数据未被同步处理的持续时间。
[0111]
(2)当持续时间超过预设值时,将目标同步数据存储到硬件存储空间中。
[0112]
具体地,若中间服务器中缓存的数据长时间未被调用时,redis可将其持久化到硬件存储空间,例如,磁盘。
[0113]
在缓存的目标同步数据长时间未被调用时,将其持久化到硬件存储空间中,以防止内存负载过大影响新数据的写入,且存储到硬件存储空间中还可以作为备份数据使用。
[0114]
本发明实施例提供的数据同步方法,对中间服务器进行改进,通过在中间服务器中添加数据库,分摊源数据库的负载压力,增强其系统健壮性。即使源数据库a或中间服务器宕机,只要有其一还在正常工作便能完成数据的同步。且由于上述的数据库完全保存在内存中,速度极快。进一步地,将同步执行脚本由单线程改为多线程,取代原先单一执行同步脚本,并行同步数据,极大地提升同步速率。即,本发明实施例提供的数据同步方法中,引入多线程和非关系型数据库,缩短数据库同步时间,降低时间成本,提升系统的稳定性。
[0115]
在本实施例中还提供了一种数据同步装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
[0116]
本实施例提供一种数据同步装置,如图6所示,包括:
[0117]
获取模块41,用于获取并存储目标同步数据以及所要连接的多个目标数据库的配置信息;
[0118]
创建模块42,用于创建多个目标线程;
[0119]
同步模块43,用于根据所述目标数据库的配置信息以及所述多个目标线程,将所述目标同步数据同步至所述目标数据库中。
[0120]
本实施例提供的数据同步装置,在获取到目标同步数据之后对其进行存储,分摊源数据库的负载压力,增强其系统健壮性,即使源数据库或本地发生宕机时,只要有其一还正常工作变能完成数据的同步,保证了数据同步的可靠性;同时利用多个目标线程进行数据同步,实现并行同步数据,极大地提升了同步速率。
[0121]
本实施例中的数据同步装置是以功能单元的形式来呈现,这里的单元是指asic电路,执行一个或多个软件或固定程序的处理器和存储器,和/或其他可以提供上述功能的器件。
[0122]
上述各个模块的更进一步的功能描述与上述对应实施例相同,在此不再赘述。
[0123]
本发明实施例还提供一种电子设备,具有上述图6所示的数据同步装置。
[0124]
请参阅图7,图7是本发明可选实施例提供的一种电子设备的结构示意图,如图7所示,该电子设备可以包括:至少一个处理器51,例如cpu(central processing unit,中央处
理器),至少一个通信接口53,存储器54,至少一个通信总线52。其中,通信总线52用于实现这些组件之间的连接通信。其中,通信接口53可以包括显示屏(display)、键盘(keyboard),可选通信接口53还可以包括标准的有线接口、无线接口。存储器54可以是高速ram存储器(random access memory,易挥发性随机存取存储器),也可以是非不稳定的存储器(non

volatile memory),例如至少一个磁盘存储器。存储器54可选的还可以是至少一个位于远离前述处理器51的存储装置。其中处理器51可以结合图6所描述的装置,存储器54中存储应用程序,且处理器51调用存储器54中存储的程序代码,以用于执行上述任一方法步骤。
[0125]
其中,通信总线52可以是外设部件互连标准(peripheral component interconnect,简称pci)总线或扩展工业标准结构(extended industry standard architecture,简称eisa)总线等。通信总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
[0126]
其中,存储器54可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random

access memory,缩写:ram);存储器也可以包括非易失性存储器(英文:non

volatile memory),例如快闪存储器(英文:flash memory),硬盘(英文:hard disk drive,缩写:hdd)或固态硬盘(英文:solid

state drive,缩写:ssd);存储器54还可以包括上述种类的存储器的组合。
[0127]
其中,处理器51可以是中央处理器(英文:central processing unit,缩写:cpu),网络处理器(英文:network processor,缩写:np)或者cpu和np的组合。
[0128]
其中,处理器51还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(英文:application

specific integrated circuit,缩写:asic),可编程逻辑器件(英文:programmable logic device,缩写:pld)或其组合。上述pld可以是复杂可编程逻辑器件(英文:complex programmable logic device,缩写:cpld),现场可编程逻辑门阵列(英文:field

programmable gate array,缩写:fpga),通用阵列逻辑(英文:generic array logic,缩写:gal)或其任意组合。
[0129]
可选地,存储器54还用于存储程序指令。处理器51可以调用程序指令,实现如本技术图2至4中任一实施例中所示的数据同步方法。
[0130]
本发明实施例还提供了一种非暂态计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令可执行上述任意方法实施例中的数据同步方法。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read

only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid

state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
[0131]
虽然结合附图描述了本发明的实施例,但是本领域技术人员可以在不脱离本发明的精神和范围的情况下做出各种修改和变型,这样的修改和变型均落入由所附权利要求所限定的范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1