本发明涉及互联网技术领域,具体涉及一种并发主从同步方法及装置。
背景技术:
分布式数据存储系统就是将数据分散存储在多台独立的设备上,也就是说,针对一份数据,存储至N个数据库上,一般是存储至一个主数据库和多个从数据库,其中,从数据库中的数据是与主数据库进行同步获得的。
现有技术中主数据库和从数据库之间的数据同步过程具体为,主数据库接收到客户端写数据的请求后,将数据写入主数据库中,并将写数据操作记录到主数据库的日志文件中。随后,主数据库向从数据库发送数据同步任务,从数据库根据数据同步任务执行将数据写入从数据库的写数据操作,以及将写数据操作记录到从数据库的日志文件中。在该数据同步过程中,从数据库只有一个线程用于处理主数据库发送的数据同步任务。该线程接收来自主数据库的数据同步任务,需要串行执行数据同步任务所涉及的写数据操作和写日志操作。在短时间内数据同步任务过多的情况下,线程无法及时地处理数据同步任务,造成从数据库同步效率低下的问题,导致出现主数据库和从数据库的数据不一致的情况。
技术实现要素:
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的并发主从同步方法和相应的并发主从同步装置。
根据本发明的一个方面,提供了一种并发主从同步方法,其包括:
接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;
在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。
根据本发明的另一方面,提供了一种并发主从同步装置,其包括:
接收模块,适于接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;
分发模块,适于在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个并行处理模块中一个并行处理模块执行;
串行处理模块,适于在从数据库处于第一状态下,执行数据同步任务中的第二操作;
多个并行处理模块,适于在从数据库处于第一状态下,执行数据同步任务中的第一操作。
根据本发明提供的方案,接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。上述方案可以利用从数据库的多个第一线程执行数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,由第二线程执行数据同步任务中的第二操作,保证了在日志文件按照接收数据同步任务的顺序记录数据操作,从而在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的并发主从同步方法的流程示意图;
图2示出了根据本发明另一个实施例的并发主从同步方法的流程示意图;
图3示出了根据本发明一个实施例的并发主从同步装置的结构示意图;
图4示出了根据本发明另一个实施例的并发主从同步装置的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了根据本发明一个实施例的并发主从同步方法的流程示意图。如图1所示,该方法包括以下步骤:
步骤S100,接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作。
数据写入主数据库后,主数据库需要将写入的数据同步给从数据库,因此,主数据库向从数据库发送数据同步任务,而从数据库接收来自主数据库的数据同步任务。
数据同步任务是根据写入主数据库的数据而生成的,也就是说针对写入主数据库的任一数据都将生成相应的数据同步任务。其中,可并行执行的第一操作为用于将数据写入从数据库的写数据操作,需串行执行的第二操作为用于将写数据操作记录到从库日志文件中的写日志操作。
步骤S101,在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。
其中,第一状态可以为只读状态,从数据库处于只读状态下时,只允许客户端读取从数据库的数据,而不允许客户端直接向从数据库写数据,此时,可以将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。
根据本发明上述实施例提供的方法,接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。上述方案可以利用从数据库的多个第一线程执行数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,由第二线程执行数据同步任务中的第二操作,保证了在日志文件按照接收数据同步任务的顺序记录数据操作,从而在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。
图2示出了根据本发明另一个实施例的并发主从同步方法的流程示意图。如图2所示,该方法包括以下步骤:
步骤S200,接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作。
数据写入主数据库后,主数据库需要将写入的数据同步给从数据库,因此,主数据库向从数据库发送数据同步任务,而从数据库接收来自主数据库的数据同步任务。
数据同步任务是根据写入主数据库的数据而生成的,也就是说针对写入主数据库的任一数据都将生成相应的数据同步任务。其中,可并行执行的第一操作为用于将数据写入从数据库的写数据操作,需串行执行的第二操作为用于将写数据操作记录到从库日志文件中的写日志操作。其中,日志文件用于记录数据写操作记录,以在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。因此,要求记录到日志文件中的写数据操作记录是按照接收数据同步任务的顺序执行的。
步骤S201,在从数据库处于第一状态下,依据负载均衡策略,从多个第一线程选择一个第一线程。
第一状态可以为只读状态,从数据库处于只读状态下时,只允许客户端读取从数据库的数据,而不允许客户端直接向从数据库写数据,在从数据库处于只读状态下时,依据负载均衡策略,从多个第一线程选择一个第一线程,其中,负载均衡策略指多个第一线程的业务负载压力均衡,而不会出现有些第一线程的业务负载压力很大,而有些第一线程的业务负载压力很小的情况。
具体地,在接收到来自主数据库的数据同步任务后,从数据库处于第一状态下时,需要从多个第一线程中选择一个合适的第一线程来执行第一操作,选择第一线程的依据是负载均衡策略,目的是为了平衡各个第一线程之间的业务负载压力,使得各个第一线程的业务负载压力基本均衡。
步骤S202,将数据同步任务中的第一操作分发给所选择的第一线程执行,由第二线程执行数据同步任务中的第二操作。
在依据负载均衡策略从多个第一线程选择了一个第一线程后,将数据同步任务中的第一操作分发给所选择的第一线程执行,数据同步任务中的第二操作由第二线程执行。
从数据库接收的数据同步任务可以是多个,也就是说,可以依据负载均衡策略选择多个第一线程执行数据同步任务的第一操作,但是多个数据同步任务的第二操作还只由第二线程执行。
在本发明实施例中,可以有一用于接收数据同步任务的线程,由该线程将数据任务中的第一操作分发给第一线程,由第一线程执行第一操作,将数据任务中的第二操作分发给第二线程,由第二线程执行第二操作;当然,用于接收数据同步任务的线程也可以是第二线程,由第二线程接收数据同步任务,然后,第二线程将数据任务中的第一操作分发给第一线程,由第一线程执行第一操作,第二线程本身执行数据同步任务中的第二操作。这里不做具体限定,本领域技术人员可以根据实际需要进行设定。
此外,在从数据库处于第一状态下,针对不同数据,各个第一线程可以并行执行将数据写入从数据库的写数据操作,而不会对写入从数据库的数据造成任何影响,然而,针对同一数据的将数据写入从数据库的写数据操作还需要分发给同一个第一线程,也就是说,针对同一数据,将数据写入从数据库的写数据操作也应该是由第一线程串行执行的,目的是防止分发给不同的第一线程处理,导致从数据库的数据与主数据库的数据不一致的情况出现。
步骤S203,在从数据库处于第二状态下,按照接收数据同步任务的顺序,为数据同步任务设置令牌。
第二状态为非只读状态,从数据库处于非只读状态下时,不仅允许客户端读取从数据库的数据,还允许客户端直接向从数据库写数据,在从数据库处于非只读状态下时,按照接收数据同步任务的顺序,为数据同步任务设置令牌。
具体地,令牌标示了数据同步任务的执行顺序,只有排序在前的令牌对应的数据同步任务被执行后,才可以执行排序在后的令牌对应的数据同步任务。
主数据库可以实时将数据同步任务发送给从数据库,也就是说,从数据库可以不断地接收到主数据库发送的数据同步任务,主数据库是按照数据写入主数据库的顺序向从数据库发送数据同步任务,因此,在为数据同步任务设置令牌时,也需要按照接收数据同步任务的顺序来设置令牌。举例说明,主数据库顺序向从数据库发送了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。
这样,只有在令牌1对应的数据同步任务被执行完成后,才可以执行令牌2对应的数据同步任务,若令牌1对应的数据同步任务还未被执行,则不能执行令牌2对应的数据同步任务,同理,以此类推,执行令牌3和4对应的数据同步任务。在本发明实施例中,为数据同步任务设置令牌,保证了在数据同步过程中不会出现同步至从数据库的数据与写入到主数据库的数据不一致的缺陷。
步骤S204,将设置有令牌的数据同步任务分发给多个第一线程中一个第一线程。
具体地,可以依据负载均衡策略,从多个第一线程选择一个第一线程,将设置于令牌的数据同步任务分发给所选择的第一线程,由该第一线程来执行数据同步任务。
在从数据库处于第二状态下,各个第一线程之间执行的第一操作为并行操作;各个第一线程之间执行的第二操作为串行操作。针对不同数据,各个第一线程可以并行执行将数据写入从数据库的写数据操作,而不会对写入从数据库的数据造成任何影响,各个第一线程在执行将写数据操作记录到从库日志文件中的写日志操作时,需要串行执行。
此外,针对同一数据的数据同步任务分发给同一第一线程,也就是说,针对同一数据,将数据写入从数据库的写数据操作也应该是由线程串行执行的,目的是防止分发给不同的线程处理,导致从数据库的数据与主数据的数据不一致的情况出现。
其中,每个第一线程分别定义了可以执行并行操作和串行操作的函数,举例说明,执行并行操作的函数为function1,执行串行操作的函数为function2,也就是说,将数据写入从数据库的写数据操作可以由function1执行、将写数据操作记录到日志文件中的写日志操作可以由function2执行,第一线程在接收到数据同步任务后,将会由会function1、function2来执行数据同步任务。
步骤S205,由该第一线程执行数据同步任务中的第一操作。
具体地,第一线程中定义的函数function1,将执行数据同步任务中的第一操作。
举例说明,针对于数据同步任务: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在执行将写数据操作记录到日志文件中的写日志操作时,需要根据令牌来执行,具体地,可以采用如下方法步骤来执行将写数据操作记录到日志文件中的写日志操作。
步骤S206,判断顺序排在令牌前一位的令牌对应的数据同步任务的第二操作是否执行完成,若是,则执行步骤S207;若否,则执行步骤S208。
其中,令牌的排列顺序与接收数据同步任务的顺序一致。
具体地,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对应的数据同步任务是否执行完成。
步骤S207,由该第一线程执行数据同步任务中的第二操作。
若判断出顺序排在令牌前一位的令牌对应的数据同步任务的第二操作执行完成,则该第一线程可以执行用于将写数据操作记录到日志文件中的写日志操作。
步骤S208,继续等待,直至顺序排在令牌前一位的令牌对应的数据同步任务的第二操作执行完成。
若判断出顺序排在令牌前一位的令牌对应的数据同步任务的第二操作未执行完成,则需要继续等待,等待顺序排在令牌前一位的令牌对应的数据同步任务的第二操作执行完成后,才执行该令牌对应的数据同步任务的第二操作。
在本发明实施例中,可以切换从数据库的状态,例如将从数据库的状态由第一状态切换为第二状态,或者由第二状态切换为第一状态,从数据库的状态决定着主从同步的方案,因此,需要对从数据库的状态进行判断:
具体地,判断从数据库是否为从第二状态切换为第一状态,若是,判断已设置令牌的数据同步任务是否执行完成,若否,则等待已设置令牌的数据同步任务执行完成,若是,则执行步骤S201。
判断从数据库是否为从第二状态切换为第一状态,就是判断从数据库是否为从非只读状态切换为只读状态,从数据库状态的变化,影响到执行数据同步任务的线程。
若判断出从数据库从第二状态切换为第一状态,还需要判断一下已设置令牌的数据同步任务是否执行完成,主要是为了判断由第一线程执行第二操作时,第一线程是否已执行完成分发的第二操作。
若判断出已设置令牌的数据同步任务未执行完成,则需要等待已设置令牌的数据同步任务执行完成,在已设置令牌的数据同步任务执行完成后,可以执行步骤S201。
另外,还可以判断从数据库是否为从第一状态切换为第二状态,若是,则判断第二线程是否执行完所有第二操作,若否,则等待第二线程执行完所有第二操作,若是,则执行步骤S203。
判断从数据库是否为从第一状态切换为第二状态,就是判断从数据库是否为从只读状态切换为非只读状态,从数据库状态的变化,影响到执行数据同步任务的线程。
若判断出从数据库从第一状态切换为第二状态,还需要判断第二线程是否执行完所有第二操作,只有在第二线程执行完所有的第二操作后,才可以切换到由第一线程执行第二操作。
若判断出第二线程未执行完所有第二操作,则需要等待第二线程执行完所有第二操作,在第二线程执行完所有第二操作后,可以执行步骤S203。
根据本发明上述实施例提供的方法,在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,由第二线程执行数据同步任务中的第二操作,保证了在日志文件按照接收数据同步任务的顺序记录数据操作,从而在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据;在从数据库处于第二状态下,通过设置令牌来限定数据同步任务的执行顺序,并依据令牌串行执行数据同步任务,保证与主数据库的数据一致。
图3示出了根据本发明一个实施例的并发主从同步装置的结构示意图。如图3所示,该装置包括:接收模块300、分发模块301、串行处理模块302和多个并行处理模块303。
接收模块300,适于接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作。
分发模块301,适于在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个并行处理模块中一个并行处理模块执行。
串行处理模块302,适于在从数据库处于第一状态下,执行数据同步任务中的第二操作。
多个并行处理模块303,适于在从数据库处于第一状态下,执行数据同步任务中的第一操作。
根据本发明上述实施例提供的装置,接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。上述方案可以利用从数据库的多个第一线程执行数据同步任务,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,由第二线程执行数据同步任务中的第二操作,保证了在日志文件按照接收数据同步任务的顺序记录数据操作,从而在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据。
图4示出了根据本发明另一个实施例的并发主从同步装置的结构示意图。如图4所示,该装置包括:接收模块400、分发模块401、串行处理模块402和多个并行处理模块403。
接收模块400,适于接收来自主数据库的数据同步任务,数据同步任务包括可并行执行的第一操作和需串行执行的第二操作。
其中,第一操作为用于将数据写入从数据库的写数据操作,第二操作为用于将写数据操作记录到从库日志文件中的写日志操作。
分发模块401,适于在从数据库处于第一状态下,依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将数据同步任务中的第一操作分发给所选择的并行处理模块执行。其中,第一状态为只读状态。
在本发明实施例中,分发模块401进一步适于:在从数据库处于第一状态下,针对同一数据的数据同步任务中的第一操作分发给同一第一线程。
串行处理模块402,适于在从数据库处于第一状态下,执行数据同步任务中的第二操作;
多个并行处理模块403,适于在从数据库处于第一状态下,执行数据同步任务中的第一操作。
此外,该并发主从同步装置还包括:设置模块404,适于在从数据库处于第二状态下,按照接收数据同步任务的顺序,为数据同步任务设置令牌。其中,第二状态为非只读状态。
分发模块401还适于:在从数据库处于第二状态下,将设置有令牌的数据同步任务分发给多个并行处理模块中一个并行处理模块。
更具体地,分发模块401进一步适于:依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将设置有令牌的数据同步任务分发给所选择的并行处理模块。
在本发明实施例中,分发模块401进一步适于:在从数据库处于第二状态下,针对同一数据的数据同步任务分发给同一第一线程。
并行处理模块403还适于:在从数据库处于第二状态下,执行数据同步任务中的第一操作和第二操作。
其中,在从数据库处于第二状态下,各个并行处理模块之间执行的第一操作为并行操作;各个并行处理模块之间执行的第二操作为串行操作。
另外,并发主从同步装置还包括:第一判断模块405,适于判断顺序排在令牌前一位的令牌对应的数据同步任务的第二操作是否执行完成;其中,令牌的排列顺序与接收数据同步任务的顺序一致;若否,则继续等待,直至顺序排在令牌前一位的令牌对应的数据同步任务的第二操作执行完成。
该并发主从同步装置还包括:第二判断模块,适于判断从数据库是否为从第二状态切换为第一状态;若是,判断已设置令牌的数据同步任务是否执行完成;
分发模块进一步适于:若已设置令牌的数据同步任务未执行完成,在将数据同步任务中的第一操作分发给多个并行处理模块中一个并行处理模块执行之前,等待已设置令牌的数据同步任务执行完成。
该并发主从同步装置还包括:第三判断模块,适于判断从数据库是否为从第一状态切换为第二状态;若是,则判断第二线程是否执行完所有第二操作;
设置模块进一步适于:若第二线程未执行完所有第二操作,在按照接收数据同步任务的顺序,为数据同步任务设置令牌之前,等待串行处理模块执行完所有第二操作。
根据本发明上述实施例提供的装置,在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,提高了数据同步速度,克服了从数据库单线程执行数据同步任务造成的主数据库与从数据库中数据显著不同步问题,由第二线程执行数据同步任务中的第二操作,保证了在日志文件按照接收数据同步任务的顺序记录数据操作,从而在从数据库中数据出现丢失等问题时,能够方便地根据日志文件中的写数据操作记录恢复从数据库的数据;在从数据库处于第二状态下,通过设置令牌来限定数据同步任务的执行顺序,并依据令牌串行执行数据同步任务,保证与主数据库的数据一致。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的并发主从同步设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
本发明公开了:
A1、一种并发主从同步方法,其包括:
接收来自主数据库的数据同步任务,所述数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;
在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作。
A2、根据A1所述的并发主从同步方法,其中,所述方法还包括:
在从数据库处于第二状态下,按照接收数据同步任务的顺序,为所述数据同步任务设置令牌;
将设置有令牌的数据同步任务分发给多个第一线程中一个第一线程,由该第一线程执行所述数据同步任务中的第一操作和第二操作。
A3、根据A1所述的并发主从同步方法,其中,所述将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行进一步包括:
依据负载均衡策略,从多个第一线程选择一个第一线程;
将所述数据同步任务中的第一操作分发给所选择的第一线程执行。
A4、根据A2所述的并发主从同步方法,其中,所述将设置有令牌的数据同步任务分发给多个第一线程中一个第一线程进一步包括:
依据负载均衡策略,从多个第一线程选择一个第一线程;
将设置有令牌的数据同步任务分发给所选择的第一线程。
A5、根据A2所述的并发主从同步方法,其中,在从数据库处于第二状态下,各个第一线程之间执行的所述第一操作为并行操作;各个第一线程之间执行的所述第二操作为串行操作。
A6、根据A2所述的并发主从同步方法,其中,在由该第一线程执行所述数据同步任务中的第二操作之前,所述方法还包括:
判断顺序排在所述令牌前一位的令牌对应的数据同步任务的第二操作是否执行完成;其中,所述令牌的排列顺序与接收数据同步任务的顺序一致;
若否,则继续等待,直至顺序排在所述令牌前一位的令牌对应的数据同步任务的第二操作执行完成。
A7、根据A2所述的并发主从同步方法,其中,所述方法进一步包括:
判断所述从数据库是否为从第二状态切换为第一状态;
若是,判断已设置令牌的数据同步任务是否执行完成;
若已设置令牌的数据同步任务未执行完成,则在所述将数据同步任务中的第一操作分发给多个第一线程中一个第一线程执行,由第二线程执行数据同步任务中的第二操作之前,所述方法还包括:等待已设置令牌的数据同步任务执行完成。
A8、根据A2所述的并发主从同步方法,其中,所述方法进一步包括:
判断所述从数据库是否为从第一状态切换为第二状态;
若是,则判断第二线程是否执行完所有第二操作;
若第二线程未执行完所有第二操作,则在所述按照接收数据同步任务的顺序,为所述数据同步任务设置令牌之前,所述方法还包括:等待第二线程执行完所有第二操作。
A9、根据A1-A8中任一项所述的并发主从同步方法,其中,所述第一操作为用于将数据写入从数据库的写数据操作,所述第二操作为用于将写数据操作记录到从库日志文件中的写日志操作。
A10、根据A1所述的并发主从同步方法,其中,在从数据库处于第一状态下,针对同一数据的数据同步任务中的第一操作分发给同一第一线程。
A11、根据A2所述的并发主从同步方法,其中,在从数据库处于第二状态下,针对同一数据的数据同步任务分发给同一第一线程。
A12、根据A1-11中任一项所述的并发主从同步方法,其中,所述第一状态为只读状态,所述第二状态为非只读状态。
B13、一种并发主从同步装置,其包括:
接收模块,适于接收来自主数据库的数据同步任务,所述数据同步任务包括可并行执行的第一操作和需串行执行的第二操作;
分发模块,适于在从数据库处于第一状态下,将数据同步任务中的第一操作分发给多个并行处理模块中一个并行处理模块执行;
串行处理模块,适于在从数据库处于第一状态下,执行数据同步任务中的第二操作;
多个并行处理模块,适于在从数据库处于第一状态下,执行数据同步任务中的第一操作。
B14、根据B13所述的并发主从同步装置,其中,还包括:
设置模块,适于在从数据库处于第二状态下,按照接收数据同步任务的顺序,为所述数据同步任务设置令牌;
所述分发模块还适于:在从数据库处于第二状态下,将设置有令牌的数据同步任务分发给多个并行处理模块中一个并行处理模块;
所述并行处理模块还适于:在从数据库处于第二状态下,执行所述数据同步任务中的第一操作和第二操作。
B15、根据B13所述的并发主从同步装置,其中,所述分发模块进一步适于:依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将所述数据同步任务中的第一操作分发给所选择的并行处理模块执行。
B16、根据B14所述的并发主从同步装置,其中,所述分发模块进一步适于:依据负载均衡策略,从多个并行处理模块选择一个并行处理模块;将设置有令牌的数据同步任务分发给所选择的并行处理模块。
B17、根据B14所述的并发主从同步装置,其中,在从数据库处于第二状态下,各个并行处理模块之间执行的所述第一操作为并行操作;各个并行处理模块之间执行的所述第二操作为串行操作。
B18、根据B14所述的并发主从同步装置,其中,所述装置还包括:
第一判断模块,适于判断顺序排在所述令牌前一位的令牌对应的数据同步任务的第二操作是否执行完成;其中,所述令牌的排列顺序与接收数据同步任务的顺序一致;若否,则继续等待,直至顺序排在所述令牌前一位的令牌对应的数据同步任务的第二操作执行完成。
B19、根据B14所述的并发主从同步装置,其中,还包括:
第二判断模块,适于判断所述从数据库是否为从第二状态切换为第一状态;若是,判断已设置令牌的数据同步任务是否执行完成;
所述分发模块进一步适于:若已设置令牌的数据同步任务未执行完成,在所述将数据同步任务中的第一操作分发给多个并行处理模块中一个并行处理模块执行之前,等待已设置令牌的数据同步任务执行完成。
B20、根据B14所述的并发主从同步装置,其中,还包括:
第三判断模块,适于判断所述从数据库是否为从第一状态切换为第二状态;若是,则判断第二线程是否执行完所有第二操作;
所述设置模块进一步适于:若第二线程未执行完所有第二操作,在所述按照接收数据同步任务的顺序,为所述数据同步任务设置令牌之前,等待串行处理模块执行完所有第二操作。
B21、根据B13-B20中任一项所述的并发主从同步装置,其中,所述第一操作为用于将数据写入从数据库的写数据操作,所述第二操作为用于将写数据操作记录到从库日志文件中的写日志操作。
B22、根据B13所述的并发主从同步装置,其中,所述分发模块进一步适于:在从数据库处于第一状态下,针对同一数据的数据同步任务中的第一操作分发给同一第一线程。
B23、根据B14所述的并发主从同步装置,其中,所述分发模块进一步适于:在从数据库处于第二状态下,针对同一数据的数据同步任务分发给同一第一线程。
B24、根据B13-B23中任一项所述的并发主从同步装置,其中,所述第一状态为只读状态,所述第二状态为非只读状态。