数据同步的方法、装置、计算机可读存储介质和处理器与流程

文档序号:31044902发布日期:2022-08-06 05:10阅读:96来源:国知局
数据同步的方法、装置、计算机可读存储介质和处理器与流程

1.本技术涉及数据通信领域,具体而言,涉及一种数据同步的方法、装置、计算机可读存储介质和处理器。


背景技术:

2.在业务系统实现中,数据迁移、数据重新分库分表和数据报表分析等业务场景都涉及到数据库之间的批量数据同步,在数据库之间进行批量数据同步时,通常需要将源数据全部加载到内存中,然后再全部写入到目标数据库,当数据量较大或者服务器内存较小时,全部源数据无法都装载到内存中,会出现“内存不足错误”的程序错误,造成数据同步失败,并且源数据的读取和写入到目标数据库只能够串行处理,数据同步的效率也较低。


技术实现要素:

3.本技术的主要目的在于提供一种数据同步的方法、装置、计算机可读存储介质和处理器,以解决现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题。
4.根据本发明实施例的一个方面,提供了一种数据同步的方法,包括:分段读取源数据,每一次读取一个数据段,所述源数据包括多个数据段,每一个所述数据段中包括多条数据;将多个所述数据段存放在第一共享内存中;从所述第一共享内存中逐条获取所述数据,且对获取到的所述数据逐条进行预处理,得到预处理后的数据,且将所述预处理后的数据逐条存放在第二共享内存中,所述预处理包括压缩处理、加密处理和修改处理中的至少之一;将所述第二共享内存中的所述预处理后的数据写入目标数据库,且一次写入多条所述预处理后的数据。
5.可选地,将多个所述数据段存放在第一共享内存中,包括:逐个将所述数据段存放至第一本地缓存中;在所述第一本地缓存中已存放的所述数据段的数量达到第一数量的情况下,获取所述第一本地缓存中所述第一数量个所述数据段所占的空间;获取所述第一共享内存的当前空闲容量;根据所述第一共享内存的当前空闲容量和所述第一数量个所述数据段所占的空间之间的大小关系,确定是否将所述第一数量个所述数据段存放至所述第一共享内存中。
6.可选地,根据所述第一共享内存的当前空闲容量和所述第一数量个所述数据段所占的空间之间的大小关系,确定是否将所述第一数量个所述数据段存放至所述第一共享内存中,包括:在所述第一共享内存的当前空闲容量大于或者等于所述第一数量个所述数据段所占的空间的情况下,批量将所述第一数量个所述数据段存放至所述第一共享内存中;在所述第一共享内存的当前空闲容量小于所述第一数量个所述数据段所占的空间,且所述第一共享内存中存在空闲容量的情况下,将第二数量个所述数据段存放至所述第一共享内存中,其中,所述第二数量小于所述第一数量,所述第二数量个所述数据段所占的空间小于或者等于所述第一共享内存的当前空闲容量;在所述第一共享内存不存在空闲容量的情况
下,暂停存放所述数据段。
7.可选地,将所述第二共享内存中的所述预处理后的数据写入目标数据库,包括:逐条将所述第二共享内存中的所述预处理后的数据存放至第二本地缓存中;在所述第二本地缓存中已存放的所述预处理后的数据的条数大于或者等于第三数量的情况下,将所述第二本地缓存中的多条所述预处理后的数据组合为多个批量数据段,依次将多个所述批量数据段写入所述目标数据库,各所述批量数据段中包括多条所述预处理后的数据;在所述第二本地缓存中已存放的所述预处理后的数据的数量小于所述第三数量的情况下,获取最短存放时间,所述最短存放时间是指多条所述预处理后的数据在所述第二本地缓存中存放的时间的最小值,在所述最短存放时间大于或者等于预定时间的情况下,将所述第二本地缓存中的多条所述预处理后的数据写入所述目标数据库。
8.可选地,将所述预处理后的数据逐条存放在第二共享内存中,包括:获取当前条预处理后的数据所占的空间;获取所述第二共享内存的当前空闲容量;在所述第二共享内存的当前空闲容量大于或者等于所述当前条预处理后的数据所占的空间的情况下,将所述当前条预处理后的数据存放在所述第二共享内存中;在所述第二共享内存的当前空闲容量小于所述当前条预处理后的数据所占的空间的情况下,暂停存放所述当前条预处理后的数据。
9.可选地,所述方法还包括:在未能成功读取到所述数据段的情况下,生成结束标记;在生成所述结束标记之后,关闭与存储所述源数据的数据库之间的连接,且将所述结束标记插入至所述第一共享内存的第一预定位置的下一个位置中,所述第一预定位置为所述第一共享内存中存放最后一个所述数据段中的最后一条所述数据的位置;在将所述第一共享内存中除所述结束标记之外的数据都已进行预处理,且将所有的所述预处理后的数据都存放在第二共享内存中之后,将所述结束标记插入至所述第二共享内存的第二预定位置的下一个位置中,所述第二预定位置为所述第二共享内存中存放的最后一条所述预处理后的数据的位置;在将所述第二共享内存中除所述结束标记之外的所述预处理后的数据都已写入所述目标数据库之后,关闭所述目标数据库的数据库连接。
10.可选地,所述方法还包括:将多个所述数据段存放在第一共享内存中,包括:构建数据读取线程;采用所述数据读取线程将多个所述数据段存放在第一共享内存中;从所述第一共享内存中逐条获取所述数据,且对获取到的所述数据逐条进行预处理,得到预处理后的数据,且将所述预处理后的数据逐条存放在第二共享内存中,包括:构建数据处理线程;采用所述数据处理线程从所述第一共享内存中逐条获取所述数据,且对获取到的所述数据逐条进行预处理,得到预处理后的数据,且将所述预处理后的数据逐条存放在第二共享内存中;将所述第二共享内存中的所述预处理后的数据写入目标数据库,且一次写入多条所述预处理后的数据,包括:构建数据写入线程;采用所述数据写入线程将所述第二共享内存中的所述预处理后的数据写入目标数据库,且一次写入多条所述预处理后的数据。
11.根据本发明实施例的另一方面,还提供了一种数据同步的装置,包括:获取单元,用于分段读取源数据,每一次读取一个数据段,所述源数据包括多个数据段,每一个所述数据段中包括多条数据;存放单元,用于将多个所述数据段存放在第一共享内存中;第一处理单元,用于从所述第一共享内存中逐条获取所述数据,且对获取到的所述数据逐条进行预处理,得到预处理后的数据,且将所述预处理后的数据逐条存放在第二共享内存中,所述预
处理包括压缩处理、加密处理和修改处理中的至少之一;第二处理单元,用于将所述第二共享内存中的所述预处理后的数据写入目标数据库,且一次写入多条所述预处理后的数据。
12.根据本发明实施例的再一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质包括存储的程序,其中,所述程序执行任意一种所述的方法。
13.根据本发明实施例的又一方面,还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行任意一种所述的方法。
14.在本发明实施例中,首先分段读取源数据,每一次读取一个数据段,源数据包括多个数据段,每一个数据段中包括多条数据,之后将多个数据段存放在第一共享内存中,之后从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,最后将第二共享内存中的预处理后的数据写入目标数据库,且一次写入多条预处理后的数据。该方案中,对源数据进行分段读取,批量将数据段存放在第一共享内存中,并逐条处理第一共享内存中的数据,得到预处理后的数据后逐条存放在第二共享内存中,批量将第二共享内存中预处理后的数据写入目标数据库中,数据读取、数据处理和数据写入可以并发执行,在数据量较大时,可以分批次读取数据并写入数据,进而解决了现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题,提高了数据同步的效率。
附图说明
15.构成本技术的一部分的说明书附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
16.图1示出了根据本技术的实施例的一种数据同步的方法的流程示意图;
17.图2示出了根据本技术的实施例的另一种数据同步的方法的流程示意图;
18.图3示出了根据本技术的实施例的一种数据同步的装置的结构示意图。
具体实施方式
19.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。
20.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
21.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
22.应该理解的是,当元件(诸如层、膜、区域、或衬底)描述为在另一元件“上”时,该元
件可直接在该另一元件上,或者也可存在中间元件。而且,在说明书以及权利要求书中,当描述有元件“连接”至另一元件时,该元件可“直接连接”至该另一元件,或者通过第三元件“连接”至该另一元件。
23.正如背景技术中所说的,现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步,为了解决上述问题,本技术的一种实施方式中,提供了一种数据同步的方法、装置、计算机可读存储介质和处理器。
24.根据本技术的实施例,提供了一种数据同步的方法。
25.图1是根据本技术实施例的数据同步的方法的流程图。如图1所示,该方法包括以下步骤:
26.步骤s101,分段读取源数据,每一次读取一个数据段,上述源数据包括多个数据段,每一个上述数据段中包括多条数据;
27.步骤s102,将多个上述数据段存放在第一共享内存中;
28.步骤s103,从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中,上述预处理包括压缩处理、加密处理和修改处理中的至少之一;
29.步骤s104,将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。
30.上述的方法中,首先分段读取源数据,每一次读取一个数据段,源数据包括多个数据段,每一个数据段中包括多条数据,之后将多个数据段存放在第一共享内存中,之后从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,最后将第二共享内存中的预处理后的数据写入目标数据库,且一次写入多条预处理后的数据。该方案中,对源数据进行分段读取,批量将数据段存放在第一共享内存中,并逐条处理第一共享内存中的数据,得到预处理后的数据后逐条存放在第二共享内存中,批量将第二共享内存中预处理后的数据写入目标数据库中,数据读取、数据处理和数据写入可以并发执行,在数据量较大时,可以分批次读取数据并写入数据,进而解决了现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题,提高了数据同步的效率。
31.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
32.一种实施例中,可以采用游标技术分段读取源数据,第一次读取的数据段包括了50条数据,游标指向第51条数据,第二次读取源数据从第51条数据开始读取,当然,并不限于上述的情况,例如,第一次读取的数据段包括了100条数据,游标指向第101条数据,第二次读取源数据从第101条数据开始读取。
33.另一种实施例中,对数据进行预处理还可以包括解压缩处理和解密处理,也可以新增一条数据,在读取源数据时,也可以直接新增一条数据。
34.本技术的一种实施例中,将多个上述数据段存放在第一共享内存中,包括:逐个将上述数据段存放至第一本地缓存中;在上述第一本地缓存中已存放的上述数据段的数量达到第一数量的情况下,获取上述第一本地缓存中上述第一数量个上述数据段所占的空间;
获取上述第一共享内存的当前空闲容量;根据上述第一共享内存的当前空闲容量和上述第一数量个上述数据段所占的空间之间的大小关系,确定是否将上述第一数量个上述数据段存放至上述第一共享内存中。该实施例中,先将数据段存放至了第一本地缓存中,在第一本地缓存中已经存放的数据段已经达到了第一数量的情况下,再获取第一共享内存中的当前空闲容量,确定第一共享内存中的当前空闲容量是否可以容纳第一数量个数据段,再确定是否要将第一数量个数据段存放至第一共享内存,这样可以避免大批量数据同时存放至第一共享内存中造成的数据堵塞,该实施例可以保证更高效地同步数据,进而进一步提高数据同步的效率。
35.一种具体的实施例中,可以采用jdbc接口对存储源数据的数据库建立长连接,可以执行sql返回的resultset,循环调用resultset的next()方法,这样可以循环读取源数据,在第一本地缓存存放的所有数据段都已存放至第一共享内存的情况下,即第一本地缓存中没有数据的情况下,next()方法会继续读取源数据中的一个数据段,存放至第一本地缓存中。
36.本技术的另一种实施例中,根据上述第一共享内存的当前空闲容量和上述第一数量个上述数据段所占的空间之间的大小关系,确定是否将上述第一数量个上述数据段存放至上述第一共享内存中,包括:在上述第一共享内存的当前空闲容量大于或者等于上述第一数量个上述数据段所占的空间的情况下,批量将上述第一数量个上述数据段存放至上述第一共享内存中;在上述第一共享内存的当前空闲容量小于上述第一数量个上述数据段所占的空间,且上述第一共享内存中存在空闲容量的情况下,将第二数量个上述数据段存放至上述第一共享内存中,其中,上述第二数量小于上述第一数量,上述第二数量个上述数据段所占的空间小于或者等于上述第一共享内存的当前空闲容量;在上述第一共享内存不存在空闲容量的情况下,暂停存放上述数据段。该实施例中,在第一共享内存的当前空闲容量可以容纳第一数量个数据段的情况下,就将第一数量个数据段存放至第一共享内存中,在第一共享内存的当前空闲容量无法容纳第一数量个数据段的情况下,就减小要存放至第一共享内存的数据段的数量,在第一共享内存已满的情况下,就可以暂停存放数据段,这样可以更为高效地进行存放数据,避免第一共享内存出现“内存不足错误”的程序错误,进一步保证了数据同步的效率较高。
37.本技术的再一种实施例中,将上述第二共享内存中的上述预处理后的数据写入目标数据库,包括:逐条将上述第二共享内存中的上述预处理后的数据存放至第二本地缓存中;在上述第二本地缓存中已存放的上述预处理后的数据的条数大于或者等于第三数量的情况下,将上述第二本地缓存中的多条上述预处理后的数据组合为多个批量数据段,依次将多个上述批量数据段写入上述目标数据库,各上述批量数据段中包括多条上述预处理后的数据;在上述第二本地缓存中已存放的上述预处理后的数据的数量小于上述第三数量的情况下,获取最短存放时间,上述最短存放时间是指多条上述预处理后的数据在上述第二本地缓存中存放的时间的最小值,在上述最短存放时间大于或者等于预定时间的情况下,将上述第二本地缓存中的多条上述预处理后的数据写入上述目标数据库。该实施例中,在第二本地缓存中积攒了一批预处理后的数据后,将第二本地缓存中的数据组合为多个批量数据段,将多个批量数据段成批的写入目标数据库,在数据处理较慢的情况下,第二本地缓存中的预处理后的数据的数量可能一直较少,这样就需要确认第二本地缓存中的预处理后
的数据的最短存放时间,在最短存放时间达到预定时间的情况下,将第二本地缓存中的多条预处理后的数据写入目标数据库,这样可以避免预处理后的数据长时间存放在第二本地缓存中,避免长时间没有数据写入目标数据库,进一步保证了数据同步的效率较高。
38.一种具体的实施例中,在预处理后的数据为50条的情况下,可以将50条预处理后的数据组合为5个批量数据段,每个批量数据段中预处理后的数据为10条,再将5个批量数据段依次写入目标数据库。
39.本技术的又一种实施例中,将上述预处理后的数据逐条存放在第二共享内存中,包括:获取当前条预处理后的数据所占的空间;获取上述第二共享内存的当前空闲容量;在上述第二共享内存的当前空闲容量大于或者等于上述当前条预处理后的数据所占的空间的情况下,将上述当前条预处理后的数据存放在上述第二共享内存中;在上述第二共享内存的当前空闲容量小于上述当前条预处理后的数据所占的空间的情况下,暂停存放上述当前条预处理后的数据。该实施例中,在第二共享内存的当前空闲容量可以容纳当前条预处理后的数据的情况下,就将当前条预处理后的数据存放至第二共享内存中,在第二共享内存的当前空闲容量无法容纳当前条预处理后的数据的情况下,就暂停存放当前条预处理后的数据,对应的,对第一共享内存中的数据暂停进行处理,直到在第二共享内存的当前空闲容量可以容纳当前条预处理后的数据的情况下,就将当前条预处理后的数据存放至第二共享内存中,并继续对第一共享内存中的数据进行处理,这样可以更为高效地进行存放数据,避免第二共享内存出现“内存不足错误”的程序错误,进一步保证了数据同步的效率较高。
40.一种实施例中,第二共享内存在java中可以采用arrayblockingqueue、linkedblockingqueue等技术来实现,上述的两种技术都是采用了消息队列,先进先出的原则。
41.本技术的一种具体的实施例中,上述方法还包括:在未能成功读取到上述数据段的情况下,生成结束标记;在生成上述结束标记之后,关闭与存储上述源数据的数据库之间的连接,且将上述结束标记插入至上述第一共享内存的第一预定位置的下一个位置中,上述第一预定位置为上述第一共享内存中存放最后一个上述数据段中的最后一条上述数据的位置;在将上述第一共享内存中除上述结束标记之外的数据都已进行预处理,且将所有的上述预处理后的数据都存放在第二共享内存中之后,将上述结束标记插入至上述第二共享内存的第二预定位置的下一个位置中,上述第二预定位置为上述第二共享内存中存放的最后一条上述预处理后的数据的位置;在将上述第二共享内存中除上述结束标记之外的上述预处理后的数据都已写入上述目标数据库之后,关闭上述目标数据库的数据库连接。该实施例中,在未能成功获取到数据段的情况下,此时源数据都已读取完毕,生成结束标记,插入至第一共享内存中,此时还可以继续对第一共享内存中除结束标记之外的数据进行预处理,并且还可以继续将第二共享内存中的预处理后的数据写入目标数据库,在第一共享内存中除结束标记之外的数据都已进行预处理,将结束标记插入至第二共享内存中,此时还可以继续将第二共享内存中除结束标记之外的预处理后的数据写入目标数据库,直到读取到结束标记,才结束数据同步,进一步保证了数据读取、数据处理和数据写入可以并发执行,进一步提高了数据同步的效率。
42.再一种实施例中,还可以对数据读取、数据处理和数据写入的过程进行暂停,可以接收显示界面上的第一预定操作,并响应第一预定操作,暂停数据同步,还可以继续恢复数
据同步,可以接收显示界面上的第二预定操作,并响应第二预定操作,恢复数据同步。
43.本技术的另一种具体的实施例中,上述方法还包括:将多个上述数据段存放在第一共享内存中,包括:构建数据读取线程;采用上述数据读取线程将多个上述数据段存放在第一共享内存中;从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中,包括:构建数据处理线程;采用上述数据处理线程从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中;将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据,包括:构建数据写入线程;采用上述数据写入线程将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。该实施例中,通过构建三个线程,来实现数据读取、数据处理和数据写入,三个线程可以并行执行,并通过第一共享内存和第二共享内存进行线程之间的同步处理。
44.一种具体的实施例中,数据同步的方法如图2所示,首先,构建数据读取线程,构建数据处理线程,构建数据写入线程,数据读取线程开始运行,采用jdbc接口对存储源数据的数据库建立长连接,执行查询语句,循环读取源数据,具体地,分段读取源数据,确定第一本地缓存中是否未存放数据段,在第一本地缓存未存放数据段的情况下,移动游标,从源数据中获取一个数据段,存放至第一本地缓存中,在第一本地缓存已存放数据段的情况下,从第一本地缓存中获取多个数据段,将多个数据段存放至第一共享内存中,数据处理线程从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,数据写入线程开始运行,对目标数据库建立长连接,循环写入数据,具体地,逐条读取第二共享内存中的预处理后的数据,并存放至第二本地缓存中,将第二本地缓存中的多条预处理后的数据组合为多个批量数据段,依次将多个批量数据段写入目标数据库,在数据都已获取、已处理且已写入目标数据库的情况下,先关闭与存储源数据的数据库之间的连接,数据读取线程结束运行,最后再关闭目标数据库的数据库连接,数据写入线程结束运行。
45.本技术实施例还提供了一种数据同步的装置,需要说明的是,本技术实施例的数据同步的装置可以用于执行本技术实施例所提供的用于数据同步的方法。以下对本技术实施例提供的数据同步的装置进行介绍。
46.图3是根据本技术实施例的数据同步的装置的示意图。如图3所示,该装置包括:
47.获取单元10,用于分段读取源数据,每一次读取一个数据段,上述源数据包括多个数据段,每一个上述数据段中包括多条数据;
48.存放单元20,用于将多个上述数据段存放在第一共享内存中;
49.第一处理单元30,用于从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中,上述预处理包括压缩处理、加密处理和修改处理中的至少之一;
50.第二处理单元40,用于将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。
51.上述的装置中,获取单元分段读取源数据,每一次读取一个数据段,源数据包括多个数据段,每一个数据段中包括多条数据,存放单元将多个数据段存放在第一共享内存中,
第一处理单元从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,第二处理单元将第二共享内存中的预处理后的数据写入目标数据库,且一次写入多条预处理后的数据。该方案中,对源数据进行分段读取,批量将数据段存放在第一共享内存中,并逐条处理第一共享内存中的数据,得到预处理后的数据后逐条存放在第二共享内存中,批量将第二共享内存中预处理后的数据写入目标数据库中,数据读取、数据处理和数据写入可以并发执行,在数据量较大时,可以分批次读取数据并写入数据,进而解决了现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题,提高了数据同步的效率。
52.一种实施例中,可以采用游标技术分段读取源数据,第一次读取的数据段包括了50条数据,游标指向第51条数据,第二次读取源数据从第51条数据开始读取,当然,并不限于上述的情况,例如,第一次读取的数据段包括了100条数据,游标指向第101条数据,第二次读取源数据从第101条数据开始读取。
53.另一种实施例中,对数据进行预处理还可以包括解压缩处理和解密处理,也可以新增一条数据,在读取源数据时,也可以直接新增一条数据。
54.本技术的一种实施例中,存放单元包括第一存放模块、第一获取模块、第二获取模块和确定模块,第二存放模块用于逐个将上述数据段存放至第一本地缓存中;第一获取模块用于在上述第一本地缓存中已存放的上述数据段的数量达到第一数量的情况下,获取上述第一本地缓存中上述第一数量个上述数据段所占的空间;第二获取模块用于获取上述第一共享内存的当前空闲容量;确定模块用于根据上述第一共享内存的当前空闲容量和上述第一数量个上述数据段所占的空间之间的大小关系,确定是否将上述第一数量个上述数据段存放至上述第一共享内存中。该实施例中,先将数据段存放至了第一本地缓存中,在第一本地缓存中已经存放的数据段已经达到了第一数量的情况下,再获取第一共享内存中的当前空闲容量,确定第一共享内存中的当前空闲容量是否可以容纳第一数量个数据段,再确定是否要将第一数量个数据段存放至第一共享内存,这样可以避免大批量数据同时存放至第一共享内存中造成的数据堵塞,该实施例可以保证更高效地同步数据,进而进一步提高数据同步的效率。
55.一种具体的实施例中,可以采用jdbc接口对存储源数据的数据库建立长连接,可以执行sql返回的resultset,循环调用resultset的next()方法,这样可以循环读取源数据,在第一本地缓存存放的所有数据段都已存放至第一共享内存的情况下,即第一本地缓存中没有数据的情况下,next()方法会继续读取源数据中的一个数据段,存放至第一本地缓存中。
56.本技术的另一种实施例中,确定模块包括第一存放子模块、第二存放子模块和第三存放子模块,第一存放子模块用于在上述第一共享内存的当前空闲容量大于或者等于上述第一数量个上述数据段所占的空间的情况下,批量将上述第一数量个上述数据段存放至上述第一共享内存中;第二存放子模块用于在上述第一共享内存的当前空闲容量小于上述第一数量个上述数据段所占的空间,且上述第一共享内存中存在空闲容量的情况下,将第二数量个上述数据段存放至上述第一共享内存中,其中,上述第二数量小于上述第一数量,上述第二数量个上述数据段所占的空间小于或者等于上述第一共享内存的当前空闲容量;第三存放子模块用于在上述第一共享内存不存在空闲容量的情况下,暂停存放上述数据
段。该实施例中,在第一共享内存的当前空闲容量可以容纳第一数量个数据段的情况下,就将第一数量个数据段存放至第一共享内存中,在第一共享内存的当前空闲容量无法容纳第一数量个数据段的情况下,就减小要存放至第一共享内存的数据段的数量,在第一共享内存已满的情况下,就可以暂停存放数据段,这样可以更为高效地进行存放数据,避免第一共享内存出现“内存不足错误”的程序错误,进一步保证了数据同步的效率较高。
57.本技术的再一种实施例中,第二处理单元包括第二存放模块、第三存放模块和第四存放模块,第二存放模块用于逐条将上述第二共享内存中的上述预处理后的数据存放至第二本地缓存中;第三存放模块用于在上述第二本地缓存中已存放的上述预处理后的数据的条数大于或者等于第三数量的情况下,将上述第二本地缓存中的多条上述预处理后的数据组合为多个批量数据段,依次将多个上述批量数据段写入上述目标数据库,各上述批量数据段中包括多条上述预处理后的数据;第四存放模块用于在上述第二本地缓存中已存放的上述预处理后的数据的数量小于上述第三数量的情况下,获取最短存放时间,上述最短存放时间是指多条上述预处理后的数据在上述第二本地缓存中存放的时间的最小值,在上述最短存放时间大于或者等于预定时间的情况下,将上述第二本地缓存中的多条上述预处理后的数据写入上述目标数据库。该实施例中,在第二本地缓存中积攒了一批预处理后的数据后,将第二本地缓存中的数据组合为多个批量数据段,将多个批量数据段成批的写入目标数据库,在数据处理较慢的情况下,第二本地缓存中的预处理后的数据的数量可能一直较少,这样就需要确认第二本地缓存中的预处理后的数据的最短存放时间,在最短存放时间达到预定时间的情况下,将第二本地缓存中的多条预处理后的数据写入目标数据库,这样可以避免预处理后的数据长时间存放在第二本地缓存中,避免长时间没有数据写入目标数据库,进一步保证了数据同步的效率较高。
58.一种具体的实施例中,在预处理后的数据为50条的情况下,可以将50条预处理后的数据组合为5个批量数据段,每个批量数据段中预处理后的数据为10条,再将5个批量数据段依次写入目标数据库。
59.本技术的又一种实施例中,第一处理单元包括第三获取模块、第四获取模块、第五存放模块和第六存放模块,第三获取模块用于获取当前条预处理后的数据所占的空间;第四获取模块用于获取上述第二共享内存的当前空闲容量;第五存放模块用于在上述第二共享内存的当前空闲容量大于或者等于上述当前条预处理后的数据所占的空间的情况下,将上述当前条预处理后的数据存放在上述第二共享内存中;第六存放模块用于在上述第二共享内存的当前空闲容量小于上述当前条预处理后的数据所占的空间的情况下,暂停存放上述当前条预处理后的数据。该实施例中,在第二共享内存的当前空闲容量可以容纳当前条预处理后的数据的情况下,就将当前条预处理后的数据存放至第二共享内存中,在第二共享内存的当前空闲容量无法容纳当前条预处理后的数据的情况下,就暂停存放当前条预处理后的数据,对应的,对第一共享内存中的数据暂停进行处理,直到在第二共享内存的当前空闲容量可以容纳当前条预处理后的数据的情况下,就将当前条预处理后的数据存放至第二共享内存中,并继续对第一共享内存中的数据进行处理,这样可以更为高效地进行存放数据,避免第二共享内存出现“内存不足错误”的程序错误,进一步保证了数据同步的效率较高。
60.一种实施例中,第二共享内存在java中可以采用arrayblockingqueue、
linkedblockingqueue等技术来实现,上述的两种技术都是采用了消息队列,先进先出的原则。
61.本技术的一种具体的实施例中,上述装置还包括生成单元、第三处理单元、第四处理电源和第五处理单元,生成单元用于在未能成功读取到上述数据段的情况下,生成结束标记;第三处理单元用于在生成上述结束标记之后,关闭与存储上述源数据的数据库之间的连接,且将上述结束标记插入至上述第一共享内存的第一预定位置的下一个位置中,上述第一预定位置为上述第一共享内存中存放最后一个上述数据段中的最后一条上述数据的位置;第四处理单元用于在将上述第一共享内存中除上述结束标记之外的数据都已进行预处理,且将所有的上述预处理后的数据都存放在第二共享内存中之后,将上述结束标记插入至上述第二共享内存的第二预定位置的下一个位置中,上述第二预定位置为上述第二共享内存中存放的最后一条上述预处理后的数据的位置;第五处理单元用于在将上述第二共享内存中除上述结束标记之外的上述预处理后的数据都已写入上述目标数据库之后,关闭上述目标数据库的数据库连接。该实施例中,在未能成功获取到数据段的情况下,此时源数据都已读取完毕,生成结束标记,插入至第一共享内存中,此时还可以继续对第一共享内存中除结束标记之外的数据进行预处理,并且还可以继续将第二共享内存中的预处理后的数据写入目标数据库,在第一共享内存中除结束标记之外的数据都已进行预处理,将结束标记插入至第二共享内存中,此时还可以继续将第二共享内存中除结束标记之外的预处理后的数据写入目标数据库,直到读取到结束标记,才结束数据同步,进一步保证了数据读取、数据处理和数据写入可以并发执行,进一步提高了数据同步的效率。
62.再一种实施例中,还可以对数据读取、数据处理和数据写入的过程进行暂停,可以接收显示界面上的第一预定操作,并响应第一预定操作,暂停数据同步,还可以继续恢复数据同步,可以接收显示界面上的第二预定操作,并响应第二预定操作,恢复数据同步。
63.本技术的另一种具体的实施例中,存放单元包括第一构建模块和第七存放模块,第一构建模块用于构建数据读取线程;第七存放模块用于采用上述数据读取线程将多个上述数据段存放在第一共享内存中;第一处理单元包括第二构建模块和第一处理模块,第二构建模块用于构建数据处理线程;第一处理模块用于采用上述数据处理线程从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中;第二处理单元包括第三构建模块和第二处理模块,第三构建模块用于构建数据写入线程;第二处理模块用于采用上述数据写入线程将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。该实施例中,通过构建三个线程,来实现数据读取、数据处理和数据写入,三个线程可以并行执行,并通过第一共享内存和第二共享内存进行线程之间的同步处理。
64.上述数据同步的装置包括处理器和存储器,上述获取单元、存放单元、第一处理单元和第二处理单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
65.处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来在数据量较大时可以批量加载所有源数据,进行数据同步。
66.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/
或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。
67.本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现上述数据同步的方法。
68.本发明实施例提供了一种处理器,上述处理器用于运行程序,其中,上述程序运行时执行上述数据同步的方法。
69.本发明实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现至少以下步骤:
70.步骤s101,分段读取源数据,每一次读取一个数据段,上述源数据包括多个数据段,每一个上述数据段中包括多条数据;
71.步骤s102,将多个上述数据段存放在第一共享内存中;
72.步骤s103,从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中,上述预处理包括压缩处理、加密处理和修改处理中的至少之一;
73.步骤s104,将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。
74.本文中的设备可以是服务器、pc、pad、手机等。
75.本技术还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有至少如下方法步骤的程序:
76.步骤s101,分段读取源数据,每一次读取一个数据段,上述源数据包括多个数据段,每一个上述数据段中包括多条数据;
77.步骤s102,将多个上述数据段存放在第一共享内存中;
78.步骤s103,从上述第一共享内存中逐条获取上述数据,且对获取到的上述数据逐条进行预处理,得到预处理后的数据,且将上述预处理后的数据逐条存放在第二共享内存中,上述预处理包括压缩处理、加密处理和修改处理中的至少之一;
79.步骤s104,将上述第二共享内存中的上述预处理后的数据写入目标数据库,且一次写入多条上述预处理后的数据。
80.在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
81.在本技术所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如上述单元的划分,可以为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
82.上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
83.另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以
是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
84.上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例上述方法的全部或部分步骤。而前述的存储介质包括:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
85.从以上的描述中,可以看出,本技术上述的实施例实现了如下技术效果:
86.1)、本技术的数据同步的方法,首先分段读取源数据,每一次读取一个数据段,源数据包括多个数据段,每一个数据段中包括多条数据,之后将多个数据段存放在第一共享内存中,之后从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,最后将第二共享内存中的预处理后的数据写入目标数据库,且一次写入多条预处理后的数据。该方案中,对源数据进行分段读取,批量将数据段存放在第一共享内存中,并逐条处理第一共享内存中的数据,得到预处理后的数据后逐条存放在第二共享内存中,批量将第二共享内存中预处理后的数据写入目标数据库中,数据读取、数据处理和数据写入可以并发执行,在数据量较大时,可以分批次读取数据并写入数据,进而解决了现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题,提高了数据同步的效率。
87.2)、本技术的数据同步的装置,获取单元分段读取源数据,每一次读取一个数据段,源数据包括多个数据段,每一个数据段中包括多条数据,存放单元将多个数据段存放在第一共享内存中,第一处理单元从第一共享内存中逐条获取数据,且对获取到的数据逐条进行预处理,得到预处理后的数据,且将预处理后的数据逐条存放在第二共享内存中,第二处理单元将第二共享内存中的预处理后的数据写入目标数据库,且一次写入多条预处理后的数据。该方案中,对源数据进行分段读取,批量将数据段存放在第一共享内存中,并逐条处理第一共享内存中的数据,得到预处理后的数据后逐条存放在第二共享内存中,批量将第二共享内存中预处理后的数据写入目标数据库中,数据读取、数据处理和数据写入可以并发执行,在数据量较大时,可以分批次读取数据并写入数据,进而解决了现有技术中数据量大造成无法一次性全量加载所有源数据而无法进行数据同步的问题,提高了数据同步的效率。
88.以上上述仅为本技术的优选实施例而已,并不用于限制本技术,对于本领域的技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1