基于令牌的并发主从同步方法及装置与流程

文档序号:12465072阅读:240来源:国知局
基于令牌的并发主从同步方法及装置与流程

本发明涉及互联网技术领域,具体涉及一种基于令牌的并发主从同步方法及装置。



背景技术:

分布式数据存储系统就是将数据分散存储在多台独立的设备上,也就是说,针对一份数据,存储至N个数据库上,一般是存储至一个主数据库和多个从数据库,其中,从数据库中的数据是与主数据库进行同步获得的。

现有技术中主数据库和从数据库之间的数据同步过程具体为,主数据库接收到客户端写数据的请求后,将数据写入主数据库中,并将写数据操作记录到主数据库的日志文件中。随后,主数据库向从数据库发送数据同步任务,从数据库根据数据同步任务执行将数据写入从数据库的写数据操作,以及将写数据操作记录到从数据库的日志文件中。在该数据同步过程中,从数据库只有一个线程用于处理主数据库发送的数据同步任务。该线程接收来自主数据库的数据同步任务,需要串行执行数据同步任务所涉及的写数据操作和写日志操作。在短时间内数据同步任务过多的情况下,线程无法及时地处理数据同步任务,造成从数据库同步效率低下的问题,导致出现主数据库和从数据库的数据不一致的情况。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的基于令牌的并发主从同步方法和相应的基于令牌的并发主从同步装置。

根据本发明的一个方面,提供了一种基于令牌的并发主从同步方法,其包括:

接收来自主数据库的数据同步任务;

按照接收数据同步任务的顺序,为数据同步任务设置令牌;

将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行数据同步任务。

根据本发明的另一方面,提供了一种基于令牌的并发主从同步装置,其包括:

接收模块,适于接收来自主数据库的数据同步任务;

设置模块,适于按照接收数据同步任务的顺序,为数据同步任务设置令牌;

分发模块,适于将设置有令牌的数据同步任务分发给多个并行处理模块中一个并行处理模块;

多个并行处理模块,适于根据令牌执行数据同步任务。

根据本发明提供的方案,接收来自主数据库的数据同步任务,按照接收数据同步任务的顺序,为数据同步任务设置令牌,将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行数据同步任务。利用本发明上述方案,从数据库有多个线程可以用于并行执行部分数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,通过设置令牌来限定数据同步任务的执行顺序,并依据令牌串行执行数据同步任务,保证与主数据库的数据一致。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例的基于令牌的并发主从同步方法的流程示意图;

图2示出了根据本发明另一个实施例的基于令牌的并发主从同步方法的流程示意图;

图3示出了根据本发明一个实施例的基于令牌的并发主从同步装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例的基于令牌的并发主从同步方法的流程示意图。如图1所示,该方法包括以下步骤:

步骤S100,接收来自主数据库的数据同步任务。

分布式数据存储系统就是将数据分散存储在多台独立的设备上,也就是说,针对一份数据,存储至N个数据库,一般是存储至一个主数据库和多个从数据库,从数据库中的数据是与主数据库进行同步获得的,也就是说,数据写入主数据库后,主数据库需要将写入的数据同步给从数据库,因此,主数据库向从数据库发送数据同步任务,而从数据库接收来自主数据库的数据同步任务。

数据同步任务是根据写入主数据库的数据而生成的,也就是说针对写入主数据库的任一数据都将生成相应的数据同步任务。

步骤S101,按照接收数据同步任务的顺序,为数据同步任务设置令牌。

其中,令牌标示了数据同步任务的执行顺序,只有排序在前的令牌对应的数据同步任务被执行后,才可以执行排序在后的令牌对应的数据同步任务。举例说明,按照接收数据同步任务的顺序,设置了数据同步任务的令牌分别为1、2、3、4,这样,只有在令牌1对应的数据同步任务被执行完成后,才可以执行令牌2对应的数据同步任务,若令牌1对应的数据同步任务还未被执行,则不能执行令牌2对应的数据同步任务,同理,以此类推,执行令牌3和4对应的数据同步任务。在本发明实施例中,为数据同步任务设置令牌,保证了在数据同步过程中不会出现同步至从数据库的数据与写入到主数据库的数据不一致的缺陷。

步骤S102,将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行数据同步任务。

具体地,在为数据同步任务设置令牌后,可以将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行数据同步任务,对于不同数据的数据同步任务可以分发给不同的线程处理。

根据本发明上述实施例提供的方法,接收来自主数据库的数据同步任务,按照接收数据同步任务的顺序,为数据同步任务设置令牌,将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行数据同步任务。利用本发明上述方案,从数据库有多个线程可以用于并行执行部分数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,通过设置令牌来限定数据同步任务的执行顺序,并依据令牌串行执行数据同步任务,保证与主数据库的数据一致。

图2示出了根据本发明另一个实施例的基于令牌的并发主从同步方法的流程示意图。如图2所示,该方法包括以下步骤:

步骤S200,接收来自主数据库的数据同步任务。

数据同步任务是根据写入主数据库的数据而生成的,也就是说针对写入主数据库的任一数据都将生成相应的数据同步任务。

举例说明,用户通过客户端向主数据库写入数据Set a=1;Set b=2;Set c=1;Set a=4,主数据库将分别向从数据库发送4个数据同步任务Set a=1;Set b=2;Set c=1;Set a=4,即,从数据库接收到来自主数据库的数据同步任务为:Set a=1;Set b=2;Set c=1;Set a=4。

步骤S201,按照接收数据同步任务的顺序,为数据同步任务设置令牌。

其中,主数据库可以实时将数据同步任务发送给从数据库,也就是说,从数据库可以不断地接收到主数据库发送的数据同步任务,主数据库是按照数据写入主数据库的顺序向从数据库发送数据同步任务,因此,在为数据同步任务设置令牌时,也需要按照接收数据同步任务的顺序来设置令牌。举例说明,主数据库顺序向从数据库发送了4个数据同步任务,分别为:Set a=1;Set b=2;Set c=1;Set a=4,那么,从数据库接收到的数据同步任务顺序为:Set a=1;Set b=2;Set c=1;Set a=4,这样,从数据库可以按照接收数据同步任务的顺序,为数据同步任务设置令牌,例如,分别设置4个数据同步任务的令牌为1、2、3、4。

步骤S202,依据负载均衡策略,从多个线程选择一个线程。

其中,负载均衡策略指多个线程的业务负载压力均衡,而不会出现有些线程的业务负载压力很大,而有些线程的业务负载压力很小的情况,依据线程的业务负载情况分发数据同步任务。

在为数据同步任务设置令牌后,需要将数据同步任务分发给线程,由线程执行数据同步任务,从数据库中有多个线程可以执行数据同步任务,这里需要从多个线程中选择一个合适的线程来执行数据同步任务,选择线程的依据是负载均衡策略,目的是为了平衡各个线程之间的业务负载压力,使得各个线程的业务负载压力基本均衡。

步骤S203,将设置有令牌的数据同步任务分发给所选择的线程。

在依据负载均衡策略,从多个线程选择一个线程后,将设置于令牌的数据同步任务分发给所选择的线程,由该线程来执行数据同步任务。

其中,数据同步任务包括:将数据写入从数据库的写数据操作,以及将写数据操作记录到日志文件中的写日志操作。日志文件用于记录数据写操作记录,以在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。因此,要求记录到日志文件中的写数据操作记录是按照接收数据同步任务的顺序执行的。

从数据库接收的数据同步任务可以是多个,也就是说,可以依据负载均衡策略选择多个线程执行数据同步任务,其中,各个线程之间执行的写数据操作为并行操作;各个线程之间执行的写日志操作为串行操作。针对不同数据,各个线程可以并行执行将数据写入从数据库的写数据操作,而不会对写入从数据库的数据造成任何影响,然而,针对同一数据的数据同步任务分发给同一线程,也就是说,针对同一数据,将数据写入从数据库的写数据操作也应该是由线程串行执行的,目的是防止分发给不同的线程处理,导致从数据库的数据与主数据的数据不一致的情况出现。

此外,每个线程分别定义了可以执行并行操作和串行操作的函数,举例说明,执行并行操作的函数为function1,执行串行操作的函数为function2,也就是说,将数据写入从数据库的写数据操作可以由function1执行、将写数据操作记录到日志文件中的写日志操作可以由function2执行,线程在接收到数据同步任务后,将会由会function1、function2来执行数据同步任务。

步骤S204,由该线程执行将数据写入从数据库的写数据操作。

举例说明,针对于数据同步任务:Set a=1;Set b=2;Set c=1;Set a=4,可以依据负载均衡策略将数据同步任务Set a=1;Set a=4分发给线程1,数据同步任务Set b=2分发给线程2,数据同步任务Set c=1分发给线程3,其中,对于数据同步任务中的将数据写入从数据库的写数据操作,第一线程1、2、3可以并行执行,而将写数据操作记录到日志文件中的写日志操作则需要第一线程1、2、3串行执行。线程1、2、3在执行将写数据操作记录到日志文件中的写日志操作时,需要根据令牌来执行,具体地,可以采用如下方法步骤来执行将写数据操作记录到日志文件中的写日志操作。

步骤S205,判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成,若是,则执行步骤S206;若否,则执行步骤S207。

其中,令牌的排列顺序与接收数据同步任务的顺序一致。

具体地,function2在执行将写数据操作记录到日志文件中的写日志操作之前,还需要判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成,函数function2的代码能够实现判断功能,这里判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成主要是为了保证写日志操作是按照接收数据同步任务的顺序执行的,保证在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。

举例说明,从数据库为数据同步任务:Set a=1;Set b=2;Set c=1;Set a=4,分别设置令牌为1、2、3、4。线程2在执行将Set b=2记录到日志文件中时,需要判断令牌1对应的数据同步任务是否执行完成,同理,线程3在执行将Set c=1记录到日志文件中时,需要判断令牌1、2对应的数据同步任务是否执行完成,同样地,线程1在执行将Set a=4记录到日志文件中时,需要判断令牌1、2、3对应的数据同步任务是否执行完成。

步骤S206,执行用于将写数据操作记录到日志文件中的写日志操作。

若判断出顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作执行完成,则线程可以执行用于将写数据操作记录到日志文件中的写日志操作。

步骤S207,继续等待。

若判断出顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作未执行完成,则需要继续等待,等待顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作执行完成后,才执行该令牌对应的将写数据操作记录到日志文件中的写日志操作。

根据本发明上述实施例提供的方法,从数据库有多个线程可以用于并行执行部分数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,按照接收数据同步任务的顺序,为数据同步任务设置令牌,并依据负载均衡策略,从多个线程选择一个线程,将设置有令牌的数据同步任务分发给所选择的线程,能够保证每个线程的负载业务压力均衡,而不会出现有些线程负载业务压力过大,有些线程负载压力过小的情况,判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成,若是,则执行用于将写数据操作记录到日志文件中的写日志操作;若否,则继续等待,使得记录到日志文件的写日志操作是按照接收数据同步任务顺序严格串行执行的,保证了在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。

图3示出了根据本发明一个实施例的基于令牌的并发主从同步装置的结构示意图。如图3所示,该装置包括:接收模块300、设置模块310、分发模块320、多个并行处理模块330。

接收模块300,适于接收来自主数据库的数据同步任务。

设置模块310,适于按照接收数据同步任务的顺序,为数据同步任务设置令牌。

分发模块320,适于将设置有令牌的数据同步任务分发给多个并行处理模块中一个并行处理模块。

多个并行处理模块330,适于根据令牌执行数据同步任务。

可选地,分发模块320进一步适于:依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将设置有令牌的数据同步任务分发给所选择的并行处理模块。

可选地,数据同步任务包括:将数据写入从数据库的写数据操作,以及将写数据操作记录到日志文件中的写日志操作。

可选地,各个并行处理模块之间执行的写数据操作为并行操作;各个并行处理模块之间执行的写日志操作为串行操作。

可选地,并行处理模块330进一步适于:判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成;其中,令牌的排列顺序与接收数据同步任务的顺序一致;若是,则执行用于将写数据操作记录到日志文件中的写日志操作;若否,则继续等待。

可选地,分发模块进一步适于:针对同一数据的数据同步任务分发给同一线程。

根据本发明上述实施例提供的装置,从数据库有多个线程可以用于并行执行部分数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,按照接收数据同步任务的顺序,为数据同步任务设置令牌,并依据负载均衡策略,从多个线程选择一个线程,将设置有令牌的数据同步任务分发给所选择的线程,判断顺序排在令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成,若是,则执行用于将写数据操作记录到日志文件中的写日志操作;若否,则继续等待,保证了记录到日志文件的写日志操作是按照接收数据同步任务顺序严格串行执行的,保证了在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的基于令牌的并发主从同步设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:

A1、一种基于令牌的并发主从同步方法,其包括:

接收来自主数据库的数据同步任务;

按照接收数据同步任务的顺序,为所述数据同步任务设置令牌;

将设置有令牌的数据同步任务分发给多个线程中一个线程,由该线程根据令牌执行所述数据同步任务。

A2、根据A1所述的基于令牌的并发主从同步方法,其中,所述将设置有令牌的数据同步任务分发给多个线程中一个线程进一步包括:

依据负载均衡策略,从多个线程选择一个线程;

将设置有令牌的数据同步任务分发给所选择的线程。

A3、根据A1所述的基于令牌的并发主从同步方法,其中,所述数据同步任务包括:

将数据写入从数据库的写数据操作,以及将所述写数据操作记录到日志文件中的写日志操作。

A4、根据A3所述的基于令牌的并发主从同步方法,其中,各个线程之间执行的所述写数据操作为并行操作;各个线程之间执行的所述写日志操作为串行操作。

A5、根据A1所述的基于令牌的并发主从同步方法,其中,所述由该线程根据令牌执行所述数据同步任务进一步包括:

判断顺序排在所述令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成;其中,所述令牌的排列顺序与接收数据同步任务的顺序一致;

若是,则执行用于将所述写数据操作记录到日志文件中的写日志操作;

若否,则继续等待。

A6、根据A1所述的基于令牌的并发主从同步方法,其中,针对同一数据的数据同步任务分发给同一线程。

B7、一种基于令牌的并发主从同步装置,其包括:

接收模块,适于接收来自主数据库的数据同步任务;

设置模块,适于按照接收数据同步任务的顺序,为所述数据同步任务设置令牌;

分发模块,适于将设置有令牌的数据同步任务分发给多个并行处理模块中一个并行处理模块;

多个并行处理模块,适于根据令牌执行所述数据同步任务。

B8、根据B7所述的基于令牌的并发主从同步装置,其中,所述分发模块进一步适于:依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将设置有令牌的数据同步任务分发给所选择的并行处理模块。

B9、根据B7所述的基于令牌的并发主从同步装置,其中,所述数据同步任务包括:

将数据写入从数据库的写数据操作,以及将所述写数据操作记录到日志文件中的写日志操作。

B10、根据B9所述的基于令牌的并发主从同步装置,其中,各个并行处理模块之间执行的所述写数据操作为并行操作;各个并行处理模块之间执行的所述写日志操作为串行操作。

B11、根据B7所述的基于令牌的并发主从同步装置,其中,所述并行处理模块进一步适于:

判断顺序排在所述令牌前一位的令牌对应的数据同步任务的写日志操作是否执行完成;其中,所述令牌的排列顺序与接收数据同步任务的顺序一致;

若是,则执行用于将所述写数据操作记录到日志文件中的写日志操作;

若否,则继续等待。

B12、根据B7所述的基于令牌的并发主从同步装置,其中,所述分发模块进一步适于:针对同一数据的数据同步任务分发给同一线程。

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