基于分布式数据库的数据写入方法、存储介质和电子设备与流程

文档序号:18601131发布日期:2019-09-03 22:39阅读:169来源:国知局
基于分布式数据库的数据写入方法、存储介质和电子设备与流程

本发明涉及计算机技术领域,具体涉及一种基于分布式数据库的数据写入方法、存储介质和电子设备。



背景技术:

随着计算机技术和业务数量的不断发展,数据量也在飞速增长。庞大的数据量消耗大量的存储资源,并降低存储器(如,磁盘)、系统等的性能,因此通常会按需求(如,业务需求)对数据进行划分,并将划分后的数据存储到不同的数据库中。在需要定期对发生变化的数据进行同步或整合分析时,需要从不同的源数据库中获取目标数据,将目标数据写入目标数据库中。但在目标数据的数据量较大时,现有的方式对目标数据库的访问次数过高,扩大数据访问的时延。



技术实现要素:

有鉴于此,本发明实施例提供了一种基于分布式数据库的数据写入方法、存储介质和电子设备,能够降低对目标数据库的访问次数,并由此降低数据访问的时延。

根据本发明实施例的第一方面,提供一种基于分布式数据库的数据写入方法,所述方法包括:

接收数据写入请求,确定所述数据写入请求对应的多个目标数据,所述目标数据存储在源数据库;

确定所述目标数据对应的目标数据库;

确定所述目标数据对应的数据队列,将所述目标数据存放到所述数据队列;

响应于所述数据队列中的目标数据满足预定条件,将所述数据队列中的目标数据写入所述目标数据库。

优选地,所述确定所述目标数据对应的数据队列包括:

基于所述目标数据对应的源数据库的数据库标识和/或数据表的数据表标识,确定所述目标数据对应的数据队列,其中,所述数据表存储在所述源数据库,所述源数据库为分布式数据库。

优选地,所述响应于所述数据队列中的目标数据满足预定条件,将所述数据队列中的目标数据写入所述目标数据库包括:

响应于预定时间间隔和/或所述数据队列中的目标数据的数量不低于预定阈值,将所述数据队列中的目标数据写入所述目标数据库。

优选地,所述将所述队列中的目标数据写入所述目标数据库包括:

由维护所述数据队列的线程将所述目标数据写入所述目标数据库。

优选地,所述数据队列通过kafka管理。

根据本发明实施例的第二方面,提供一种基于分布式数据库的数据写入装置,所述装置包括:

确定单元,用于接收数据写入请求,确定所述数据写入请求对应的多个目标数据,所述目标数据存储在源数据库;

获取单元,用于获取所述目标数据对应的目标数据库;

存放单元,确定所述目标数据对应的数据队列,将所述目标数据存放到所述数据队列;

写入单元,用于响应于所述数据队列中的目标数据满足预定条件,将所述数据队列中的目标数据写入所述目标数据库。

根据本发明实施例的第三方面,提供一种计算机可读存储介质,其上存储计算机程序指令,其中,所述计算机程序指令在被处理器执行时实现如第一方面中任一项所述的方法。

根据本发明实施例的第四方面,提供一种电子设备,包括存储器和处理器,其中,所述存储器用于存储一条或多条计算机程序指令,其中,所述一条或多条计算机程序指令被所述处理器执行以实现如第一方面中任一项所述的方法。

本发明实施例在接收到数据写入请求时,确定存储在源数据库中的目标数据,并将目标数据库存放到对应的数据队列中,同时获取目标数据对应的目标数据库,从而在数据队列中的目标数据满足预定条件时,将数据队列中的目标数据写入目标数据库中。本实施例的方法能够降低对目标数据库的访问次数,并降低了大量目标数据同时写入目标数据库的可能,从而降低数据访问的时延。

附图说明

通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1是现有技术的数据获取方法的示意图;

图2是本发明第一实施例的基于分布式数据库的数据写入方法的流程图;

图3是本发明第一实施例的方法将数据队列中的目标数据写入目标数据库的流程图;

图4是本发明第一实施例的基于分布式数据库的数据写入方法的示意图;

图5是本发明第二实施例的基于分布式数据库的数据写入装置的示意图;

图6是本发明第三实施例的电子设备的示意图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。

此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。

除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。

在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

随着数据量的不断增长,庞大的数据会消耗大量的存储资源,并降低存储器、系统等的性能,因此通常会按需求对数据划分为不同类型,并将不同类型的数据存储到不同的数据库中。并在需要对发生变化的数据进行同步或整合分析时,从不同的源数据库中获取目标数据,将目标数据写入目标数据库中。

以分布式数据库中的各数据库为mysql为例,各数据库通过binlog(二进制日志文件)记录其中与增加、删除或者修改的sql语句相关的信息,包括增加、删除或者修改的sql语句,和/或被增加、删除或修改的数据。在row(行)模式下,binlog可以以数据表的形式记录对应的数据库中全部被增加、删除或修改的数据,因此在需要对发生变化的数据进行同步或整合分析时,可以直接从各数据库的binlog获取其他各数据库中的发生变化(包括增加、删除和修改)的数据。具体地,服务器可以接入分布式数据库系统中除目标数据库外的其他数据库的binlog,并将从各binlog中获取的数据拉取到数据队列中,从而通过各数据队列中的线程将各数据队列中的数据写入目标数据库中。

图1是现有技术的数据写入方法的示意图。容易理解,图1所示的数据库、数据表、目标数据和数据队列的数量仅仅是示意性的。如图1所示,数据库11为源数据库,数据库12为目标数据库。数据库11中包括多个数据表,也即数据表1-n,每个数据表中包括至少一个目标数据。现有的数据写入方法通常为每个目标数据对应的数据表创建一个数据队列,在接收到数据写入请求后,服务器将各目标数据拉取到对应的数据队列中。为了保证各数据库中获取的目标数据有序,每个数据队列由一个线程池维护,每个线程池中包括一个线程,由此,服务器可以通过每个线程池中的线程将对应的数据队列中的目标数据写入目标数据库中。以数据表1和数据11为例,数据表1对应的数据队列为队列1,数据11为数据表1中的1个目标数据。服务器在将数据表1中的数据11拉取到队列1后,不进行等待,直接通过维护队列1的线程池中的线程将队列1中的数据11写入数据库12中。也就是说,每获取一个目标数据(例如,图1所示的数据11),就需要对数据库12执行一次写入操作,也即,对数据库12进行一次访问。因此在目标数据的数据量较大时,对目标数据库的访问次数过高,且大量的目标数据在同时写入目标数据库时,会占用较高的服务器资源,提升数据访问的时延。

图2是本发明第一实施例的基于分布式数据库的数据写入方法的流程图。如图2所示,本实施例的方法包括如下步骤:

步骤s100,接收数据写入请求,确定数据写入请求对应的多个目标数据。

在本实施例中,在对源数据库中发生变化的数据进行同步更新时,为了较快地获取各数据库中发生变化的数据,可以将各数据库的binlog中记录的部分或全部数据作为目标数据。可选地,根据实际需求不同,例如需要获取未发生变化的数据,也可以将各数据库中没有被记录在binlog中的部分或全部数据作为目标数据。具体地,目标数据根据数据写入请求确定。各目标数据以数据表的形式存储在对应的源数据库中,源数据库为分布式数据库,具体地,可以为mysql、mariadb、perconaserver等。

容易理解,在本实施例中,目标数据可以存储在相同的源数据库中,也可以存储在不同的源数据库中。

步骤s200,获取目标数据对应的目标数据库。

在本步骤中,服务器可以根据数据写入请求获取目标数据对应的目标数据库。在本实施例中,目标数据库为目标数据待写入的数据库。目标数据库同样为分布式数据库,具体地,可以为mysql、mariadb、perconaserver等。

容易理解,步骤s100和步骤s200可以同时执行,也可以先后执行,不必区分执行顺序。

步骤s300,确定目标数据对应的数据队列,将目标数据存放到数据队列。

在本步骤中,服务器可以将binlog解析工具(例如canal)接入各源数据库的binlog,并对binlog进行解析,从而将目标数据从源数据库的binlog中拉取到对应的数据队列中并进行存放。

容易理解,在目标数据的数量较多时,服务器可以以第一周期对各数据库的binlog中的部分日志进行解析,从而将部分目标数据拉取到对应的数据队列中,直至全部目标数据被拉取并存放完毕。第一周期的周期长度可以根据实际需求进行设定。

具体地,目标数据可能被存储在不同的数据库和/或不同的数据表中,因此需要获取各目标数据对应的源数据库和数据表,从而对各目标数据进行拉取。

在本实施例中,可以由kafka(也即,apachekafka)完成确定目标数据对应的数据队列和管理各数据队列的工作。kafka是一种高吞吐量的分布式发布订阅消息系统,它可以对网站等界面的全部动作流数据进行整合、处理。在启动数据同步服务订阅kafka时,服务器可以通过canal从各数据表中获取目标数据,并作为生产者将目标数据写入kafka中。kafka根据各目标数据对应的源数据库的数据库标识和数据表的数据表标识将各目标数据分配到对应的数据队列中。

由于各数据表为有序表(也即,按预定规则,如修改时的时间戳,进行排序的数据表),为了保证数据表中的数据有序,需要根据各目标数据对应的源数据库的数据库标识和/或数据表的数据表标识确定目标数据对应的数据队列。在本实施例中,在目标数据的数量较多时,为了在后续降低目标数据库的访问频率,同时便于对数据队列进行管理,数据队列的数量可以小于目标数据对应的数据表的数量,由此使得(相同源数据库与不同源数据库的)不同数据表可以对应于相同的队列。容易理解,为了保证数据表中的数据有序,相同数据表中的目标数据对应于相同的数据队列。

步骤s400,将数据队列中的目标数据写入目标数据库。

具体地,服务器可以在任意数据队列中的目标数据满足预定条件时,由维护该数据队列的线程将该数据队列中的目标数据写入目标数据库中。可选地,将目标数据写入目标数据库后,可以以数据表的形式对目标数据进行存储,从而使得目标数据在目标数据库中的存储形式与源数据库中的存储形式相同。

图3是本发明第一实施例的方法将数据队列中的目标数据写入目标数据库的流程图。如图3所示,步骤s400可以通过如下步骤实现:

步骤s410,获取数据队列中的目标数据的数量。

具体地,可以以第二周期获取队列中当前的目标数据的数量。第二周期的周期长度可以根据实际需求进行设定。容易理解,第二周期和第一周期的周期长度可以相同,也可以不同。

步骤s410a,判断数据队列中的目标数据的数量是否低于预定阈值。

如果是,执行步骤s420;如果否,执行步骤s430。

步骤s420,获取前一次获取数据队列中的目标数据的时刻和当前时刻。

步骤s420a,判断前一次获取数据队列中的目标数据的时刻与当前时刻的间隔是否低于预定时间间隔。

如果是,执行步骤s410;如果否,执行步骤s430。

步骤s430,将数据队列中的目标数据写入目标数据库。

在数据队列中的目标数据的数量不低于预定阈值时,服务器可以将数据队列中的目标数据写入目标数据库,使得在执行多个数据的写入操作时,可以仅对目标数据库进行单次访问,由此降低了目标数据库的访问次数。且前一次获取数据队列中的目标数据的时刻与当前时刻的间隔不高于预定时间间隔,不会对目标数据写入的时延产生较大影响。同时,降低了大量目标数据同时写入目标数据库的可能,从而降低了目标数据访问的时延。

容易理解,在多个目标数据对应于不同的数据队列时,可以分别获取各数据队列中的目标数据的数量和/或前一次获取数据队列中的目标数据的时刻,并在满足对应的条件时,将数据队列中的目标数据写入目标数据库。同时,也可以仅判断数据队列中的目标数据的数量是否低于预定阈值或者前一次获取数据队列中的目标数据的时刻与当前时刻的间隔是否低于预定时间间隔,由此提升了目标数据的写入的灵活性。

图4是本发明第一实施例的基于分布式数据库的数据写入方法的示意图。容易理解,图4所示的数据库、数据表、目标数据和数据队列的数量仅仅是示意性的。如图4所示,数据库41是源数据库,数据库42是目标数据库。数据表1和数据表2中的目标数据对应于队列1,数据表3和数据表4的目标数据对应于队列2。队列1中的数据11、数据12和数据13为数据表1中的三个目标数据,在队列1中当前的目标数据的数量不低于3个(也即,不低于预定阈值)时,可以由维护队列1的线程将数据11、数据12和数据13顺序写入数据库42中。队列2中的数据41和数据42为数据表2中的两个目标数据,在前一次获取队列2中的目标数据的时刻与当前时刻的间隔不低于100ms(也即,不低于预定时间间隔)时,可以由维护队列2的线程将数据41和数据42写入数据库42中。

本实施例在接收到数据写入请求时,确定存储在源数据库中的目标数据,并将目标数据库存放到对应的数据队列中,同时获取目标数据对应的目标数据库,从而在数据队列中的目标数据满足预定条件时,将数据队列中的目标数据写入目标数据库中。本实施例的方法能够降低对目标数据库的访问次数,并降低了大量目标数据同时写入目标数据库的可能,从而降低数据访问的时延。

图5是本发明第二实施例的基于分布式数据库的数据写入装置的示意图。如图5所示,本实施例的装置包括确定单元51、获取单元52、存放单元53和写入单元54。

确定单元51用于接收数据写入请求,确定所述数据写入请求对应的多个目标数据,所述目标数据存储在源数据库;

获取单元52用于获取所述目标数据对应的目标数据库;

存放单元53确定所述目标数据对应的数据队列,将所述目标数据存放到所述数据队列;

写入单元54用于响应于所述数据队列中的目标数据满足预定条件,将所述数据队列中的目标数据写入所述目标数据库。

进一步地,所述存放单元53用于基于所述目标数据对应的源数据库的数据库标识和/或数据表的数据表标识,确定所述目标数据对应的数据队列,其中,所述数据表存储在所述源数据库,所述源数据库为分布式数据库。

进一步地,所述写入单元54用于响应于预定时间间隔和/或所述数据队列中的目标数据的数量不低于预定阈值,将所述数据队列中的目标数据写入所述目标数据库。

进一步地,所述写入单元54用于由维护所述数据队列的线程将所述目标数据写入所述目标数据库。

进一步地,所述数据队列通过kafka管理。

本实施例在接收到数据写入请求时,确定存储在源数据库中的目标数据,并将目标数据库存放到对应的数据队列中,同时获取目标数据对应的目标数据库,从而在数据队列中的目标数据满足预定条件时,将数据队列中的目标数据写入目标数据库中。本实施例的方法能够降低对目标数据库的访问次数,并降低了大量目标数据同时写入目标数据库的可能,从而降低数据访问的时延。

图6是本发明第三实施例的电子设备的示意图。图6所示的电子设备为通用数据处理装置,其包括通用的计算机硬件结构,其至少包括处理器61和存储器62。处理器61和存储器62通过总线63连接。存储器62适于存储处理器61可执行的指令或程序。处理器61可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器61通过执行存储器62所存储的命令,从而执行如上所述的本发明实施例的方法流程实现对于数据的处理和对于其他装置的控制。总线63将上述多个组件连接在一起,同时将上述组件连接到显示控制器64和显示装置以及输入/输出(i/o)装置65。输入/输出(i/o)装置65可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出(i/o)装置65通过输入/输出(i/o)控制器66与系统相连。

其中,存储器62可以存储软件组件,例如操作系统、通信模块、交互模块以及应用程序。以上所述的每个模块和应用程序都对应于完成一个或多个功能和在发明实施例中描述的方法的一组可执行程序指令。

上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应理解,流程图和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。

同时,如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明的方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。

可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、光纤、便携式光盘只读存储器(cd-rom)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。

计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播或传输。

用于执行针对本发明各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如java、smalltalk、c++、php、python等;以及常规过程编程语言如“c”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(lan)或广域网(wan)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1