具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
应了解,在本发明实施例的描述中,多个(或多项)的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到“第一”、“第二”等只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,在本申请的描述中,除非另有说明,“/”表示前后关联的对象是一种“或”的关系,例如,A/B可以表示A或B;本申请中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况,其中A,B可以是单数或者复数。
现有的分布式数据库的数据同步方案主要有异步复制、全同步复制和半同步复制三种。
异步复制方案是主节点在完成执行客户端提交的事务后立刻返回执行结果给客户端,并不关心从节点与主节点之间的数据差距以及数据回放的程度,这样就容易出现主节点和从节点之间数据不一致的情况。若主节点发生崩溃,此时主节点已经提交的事务可能并没有传到从节点上,如果此时,强行将从节点提升为主节点,可能导致新主节点上的数据不完整。
全同步复制方案指主节点在完成执行客户端提交的事务后,向各个从节点发送执行事务产生的增量日志,从节点对接收到的增量操作日志进行解析回放后提交该事务,主节点等待所有的从节点都执行了该事务提交后才返回执行结果给客户端。因为需要等待所有从节点执行完该事务才能返回执行结果给客户端,所以全同步复制的***性能必然会收到严重的影响。
半同步复制方案介于异步复制和全同步复制之间,主节点在完成执行客户端提交的事务后,向各个节点发送执行事务产生的增量日志,等待至少一个节点接收到增量日志并且将增量日志成功写入中继日志后,即返回结果给客户端。半同步复制方案虽然兼顾了效率和数据一致性,但仍然存在至少一个增量日志同步落盘周期的数据延迟。
为此,本发明实施例提供了一种数据同步处理方法、电子设备以及存储介质,能够确保数据同步的一致性和提升数据同步效率。
图1示出了本发明实施例提供的一种数据同步处理方法的流程图。如图1所示,该数据同步处理方法应用于分布式数据库***的主节点,该方法至少包括但不限于如下的步骤S100至S150。
步骤S100,主节点接收客户端发送的结构化查询语言(Structured QueryLanguage,简称SQL)语句。
应理解,本发明实施例中客户端发送的SQL语句为用于描述客户端提交的事务的语句。
步骤S110a,主节点对SQL语句进行解析并生成SQL执行计划。
步骤S110b,将SQL执行计划发送给至少一个从节点。
本发明实施例中,主节点在接收到客户端发送的SQL语句后,对SQL语句进行语句解析,并生成SQL执行计划。然后将将客户端发送的SQL执行计划同步至一个或者多个从节点,以使各个从节点执行该SQL执行计划。
步骤S120,主节点执行SQL执行计划。
应理解,在具体实现时,主节点在执行SQL执行计划的同时,各个从节点也在执行主节点转发的SQL执行计划,以达到主节点和从节点并行执行SQL执行计划的目的。
步骤S130,主节点获取主节点执行SQL执行计划产生的第一增量日志,对第一增量日志的数据进行哈希计算,得到第一哈希值。
示例性的,主节点在执行SQL执行计划时,会产生相应的事务日志信息,用以记录主节点执行SQL执行计划时的相关操作信息。上述的事务日志信息通常会写入主节点的操作日志中,通常情况下,该操作日志存储在主节点的数据库存储引擎中。事务日志信息写入主节点的操作日志后,主节点操作日志中新增加的日志内容即为上述的第一增量日志。本发明实施例采用哈希算法对该第一增量日志的数据进行计算处理,得到第一哈希值。
步骤S140,主节点接收每个从节点发送的第二哈希值,其中,第二哈希值是对从节点执行SQL执行计划产生的第二增量日志的数据进行哈希计算得到。
示例性的,从节点接收到主节点同步发送的SQL执行计划后,执行该SQL执行计划。从节点在执行SQL执行计划时,也会产生相应的事务日志信息,并写入从节点的操作日志中。从节点从自身的操作日志中获取第二增量日志,并采用哈希算法对第二增量日志的数据进行计算处理,得到第二哈希值。本发明实施例中,各个从节点分别将各自计算得到的第二哈希值发给主节点,以使主节点对第一哈希值和第二哈希值进行后续的处理。
步骤S150,主节点根据第一哈希值和第二哈希值确定同步结果。
示例性的,主节点将第一哈希值与接收到的来自各个从节点的第二哈希值进行哈希对比,若对比结果为第一哈希值与各个第二哈希值相等,表明主节点与各个从节点执行SQL执行计划后的数据是一致的,即主节点与各个从节点的数据同步成功;若对比结果为存在一个或多个第二哈希值与第一哈希值不相等,表明存在一个或多个从节点执行SQL执行计划后的数据与主节点执行SQL执行计划后的数据不一致,也就是说这一个或多个从节点的数据同步失败。
步骤S160,根据同步结果发送操作结果信息给客户端。
在具体实现时,可以根据数据同步成功的从节点数量确定操作结果。例如在一个示例中,只要同步成功的从节点的数量满足预设的阈值,则认为执行客户端提交的事务成功,返回操作成功信息给客户端。例如在另一个示例中,当有任一个节点的数据同步失败,即认为执行客户端提交的事务失败,返回操作失败信息给客户端。应理解,本领域的技术人员可以根据需求定制具体的根据同步结果确定操作成功的条件,本发明实施例对此不作具体限定。
如图2a所示,在一些实施例中,在步骤S110b之后还包括如下的步骤S111a和S112a。
步骤S111a,主节点启动计时器,并在计时器未超时的情况下,接收从节点发送的第一回复信息,其中,第一回复信息指示从节点接收SQL执行计划成功或者失败;
步骤S112a,主节点根据接收到的第一回复信息判断接收SQL执行计划成功的从节点数量是否满足第一预设阈值。
示例性的,当主节点向各个从节点发送SQL执行计划之后启动计时器以使计时开始,当计时器已超时且存在未发送第一回复信息的从节点,则可确定未发送第一回复信息的从节点接收SQL执行计划失败,进而可确定未发送第一回复信息的从节点进行数据同步失败。本发明实施例通过计时器进行计时,避免等待回复信息的时间过长而造成数据时延增大。
本发明实施例中,主节点在接收SQL执行计划成功的从节点数量满足第一预设阈值的情况下,才执行后续的步骤S120。具体的,可以根据各从节点发送的第一回复信息以及当计时器已超时仍未发送第一回复信息的从节点数量,确定接收SQL执行计划成功的从节点数量。
作为示例,主节点向4个从节点分别发送了SQL执行计划,接着启动计时器。当计时器超时后,仅接收到3个从节点反馈的第一回复信息且接收到的第一回复消息均指示相应的从节点接收SQL执行计划成功,则表明有1个节点接收SQL执行计划失败。假设第一预设阈值为2并要求当前接收SQL执行计划成功的从节点数量要大于等于第一预设阈值,即当前接收SQL执行计划成功的从节点数量满足第一预设阈值,主节点继续执行步骤S120。当然,第一预设阈值也可以设置为与从节点数量相等,即要求当前所有从节点均接收SQL执行计划成功,才允许执行后续的步骤S120。
如图2b所示,在一些实施例中,在步骤S120之后,还包括:
步骤S121,主节点接收从节点发送的第二回复信息,并根据接收到的第二回复信息确定执行SQL执行计划成功的从节点数量,其中,第二回复信息指示从节点执行SQL执行计划成功或者失败;
步骤S122,主节点判断是否主节点执行SQL执行计划成功且执行SQL执行计划成功的节点数量满足第二预设阈值。
在具体实现时,如果存在一个或者多个节点若执行SQL执行计划失败,该执行SQL执行计划失败的一个或者多个节点发送第二回复信息给主节点。主节点根据接收到的第二回复信息的数量确定成功执行SQL执行计划的节点数量。
本发明实施例,在主节点执行SQL执行计划成功且执行SQL执行计划成功的节点数量满足第二预设阈值的情况下,才允许执行后续的步骤S130。如果主节点执行SQL执行计划失败或者执行SQL执行计划成功的从节点数量不满足第二预设阈值,则终止执行后续的步骤,并直接向客户端发送操作失败信息。
作为示例,主节点向4个节点分别发送了SQL执行计划,且4个从节点均接收SQL执行计划成功。当主节点和各从节点并行执行SQL执行计划时,存在1个从节点执行SQL执行计划失败并向主节点反馈了指示执行SQL执行计划失败的第二回复信息。假设第二预设阈值为2并要求当前成功执行SQL执行计划的从节点数量大于等于第二预设阈值,即当前成功执行SQL执行计划的从节点数量满足第二预设阈值,所以主节点允许执行后续的步骤S130。当然,第二预设阈值也可以设置为与从节点数量相等,即要求当前所有从节点均执行SQL执行计划成功后,才允许执行后续的步骤S130。
如图3所示,在另一种实施例中,步骤S110a可以替换成步骤S110c,主节点将SQL语句发送给至少一个从节点;步骤S110b可以替换成步骤S110d,主节点对SQL语句进行解析并生成SQL执行计划。
本实施例中,主节点直接将接收到的来自客户端的SQL语句发送给从节点。从节点接收到主节点发送的SQL语句后,对该SQL语句进行解析并生成SQL执行计划;然后从节点执行该SQL执行计划。
应理解,步骤S110c和步骤S110d的顺序可互换。
如图4所示,步骤S110c之后还可以包括:步骤S111b,主节点启动计时器,并在计时器未超时的情况下,接收从节点发送的第一回复信息,其中,第一回复信息指示从节点接收SQL语句成功或者失败。
步骤S111b之后包括步骤S112b,主节点根据接收到的第一回复信息判断接收SQL语句成功的从节点数量是否满足第一预设阈值。
示例性的,当主节点向各个从节点发送SQL语句之后启动计时器以使计时开始,当计时器已超时且存在未发送第一回复信息的从节点,则可确定未发送第一回复信息的从节点接收SQL语句失败,进而可确定未发送第一回复信息的从节点进行数据同步失败。本发明实施例通过计时器进行计时,避免等待回复信息的时间过长而造成数据时延增大。
本发明实施例中,主节点在接收SQL语句成功的从节点数量满足第一预设阈值的情况下,才执行后续的步骤。具体的,可以根据各从节点发送的第一回复信息以及当计时器已超时仍未发送第一回复信息的从节点数量,确定接收SQL语句成功的从节点数量。
图5示出了本发明实施例提供的一种数据同步处理方法的流程图。如图5所示,该数据同步处理方法应用于分布式数据库***的节点,该方法至少包括但不限于如下的步骤S200a至S230。
步骤S200a,从节点接收主节点发送的SQL执行计划。
示例性的,主节点在接收到客户端发送的SQL执行计划后,将客户端发送的SQL执行计划同步至从节点。
步骤S210,从节点执行SQL执行计划。
示例性的,从节点接收来自主节点的SQL执行计划后,可以对SQL执行计划进行解析并执行,实现与主节点并行执行SQL执行计划,将主节点的数据同步复制至从节点中。
步骤S220,从节点获取从节点执行SQL执行计划产生的第二增量日志,对第二增量日志的数据进行哈希计算,得到第二哈希值。
示例性的,从节点执行SQL执行计划时,会产生相应的事务日志信息,用以记录从节点执行SQL执行计划时的相关操作信息。上述的事务日志信息通常会写入从节点的操作日志中,通常情况下,该操作日志存储在从节点的数据库存储引擎中。事务日志信息写入从节点的操作日志后,从节点操作日志中新增加的日志内容即为上述的第二增量日志。本发明实施例采用哈希算法对从节点的第二增量日志的数据进行计算处理,得到第二哈希值。
步骤S230,从节点发送第二哈希值至主节点,以使主节点根据第一哈希值和第二哈希值确定同步结果。
其中,第一哈希值为上述步骤S130中主节点对自身执行SQL执行计划产生的第一增量日志的数据进行哈希计算得到。
示例性的,本发明实施例中从节点将第二哈希值发送给主节点,主节点接收到来自本从节点的第二哈希值后,将第一哈希值与第二哈希值进行哈希对比,若对比结果为第一哈希值与第二哈希值相等,表明主节点与本从节点执行SQL执行计划后的数据是一致的,即主节点与本从节点的数据同步成功;若对比结果为第一哈希值与第二哈希值不相等,表明本从节点执行SQL执行计划后的数据与主节点执行SQL执行计划后的数据不一致,也就是说本从节点同步主节点的数据失败。
如图6所示,可选的,在步骤S200a之后还包括:步骤S201a,发送第一回复信息给主节点,其中,第一回复信息指示从节点接收SQL执行计划成功或者失败。
当从节点完成接收到主节点发送的SQL执行计划后,发送第一回复信息给主节点,以使主节点确定从节点是否接受SQL执行计划成功,进而判断是否要执行后续的步骤。
如图6所示,可选的,在步骤S210之后还包括:步骤S211,发送第二回复信息给主节点,其中,第二回复信息指示从节点执行SQL执行计划成功或者失败。
当从节点完成执行SQL执行计划后,发送第二回复信息给主节点,以使主节点确定从节点是否执行SQL执行计划成功,进而判断是否要执行后续的步骤。
如图7所示,步骤S200a可替换成如下的步骤S200b和S200c:
S200b,从节点接收主节点发送的SQL语句;
S200c,对所述SQL语句进行解析并生成SQL执行计划。
在一些可能的实施例中,主节点直接将客户端发送的SQL语句转发给从节点。从节点接收到主节点发送的SQL语句后,需要对所述SQL语句进行解析并生成SQL执行计划,再执行后续的步骤S210。
如图8所示,步骤S200b和S200c之间可以包括步骤S201b,发送第一回复信息给主节点,其中,第一回复信息指示从节点接收SQL语句成功或者失败。
以下结合具体的实例对本发明实施例提供的数据同步处理方法作进一步说明。如图9所示,在一种应用场景中,分布式数据库***包括客户端10、主节点20和从节点30。当本发明实施例提供的数据同步处理方法应用于图10所示场景时,具体可以包括如图10所示的示例性步骤S300至S309。
步骤S300,主节点20接收客户端10发送的SQL语句。
步骤S301,主节点20对SQL语句进行解析并生成SQL执行计划。应理解,在对SQL语句进行解析成功的情况下,主节点20才执行后续的步骤S302,否则发送操作失败信息给客户端10。
步骤S302,主节点20将SQ执行计划发送给从节点30。
步骤S303,当从节点30成功接收主节点20发送的SQL执行计划后,发送用以指示自身接收SQL执行计划成功的第一回复信息给主节点20。
步骤S304a,主节点20执行SQL执行计划;
步骤S304b,从节点30执行SQL执行计划;
步骤S305,从节点30发送用以指示自身执行SQL执行计划成功的第二回复信息给主节点20。
步骤S306a,主节点20获取自身执行SQL执行计划产生的第一增量日志,对第一增量日志的数据进行哈希计算,得到第一哈希值;
步骤S306b,从节点30获取自身执行SQL执行计划产生的第二增量日志,对第二增量日志的数据进行哈希计算,得到第二哈希值;
步骤S307,从节点30将第二哈希值发送给主节点20。
步骤S308,主节点20将第一哈希值和第二哈希值进行对比,根据对比结果确定同步结果。
步骤S309,主节点20根据同步结果发送操作结果信息给客户端10。具体的,如果同步结果为同步成功则发送操作成功信息给客户端10,否则发送操作失败信息给客户端10。
应理解,上述的步骤S304a和S304b为能够并行执行的步骤;步骤S306a和S306b为能够并行执行的步骤。
当本发明实施例提供的数据同步处理方法应用于图9所示场景时,具体还可以包括如图11所示的示例性步骤S400至S410。
步骤S400,主节点20接收客户端10发送的SQL语句。
步骤S401,主节点20将SQL语句转发给从节点30。
步骤S402,当从节点30成功接收主节点20发送的SQL语句后,发送用以指示自身接收SQL语句成功的第一回复信息给主节点20。
步骤S403a,主节点20对SQL语句进行解析并生成SQL执行计划。
步骤S403b,从节点30对SQL语句进行解析并生成SQL执行计划。
步骤S404a,主节点20执行SQL执行计划;
步骤S404b,从节点30执行SQL执行计划;
步骤S405,从节点30发送用以指示自身执行SQL执行计划成功的第二回复信息给主节点20。
步骤S406a,主节点20获取自身执行SQL执行计划产生的第一增量日志,对第一增量日志的数据进行哈希计算,得到第一哈希值;
步骤S406b,从节点30获取自身执行SQL执行计划产生的第二增量日志,对第二增量日志的数据进行哈希计算,得到第二哈希值;
步骤S407,从节点30将第二哈希值发送给主节点20。
步骤S408,主节点20将第一哈希值和第二哈希值进行对比,根据对比结果确定同步结果。
步骤S409,主节点20根据同步结果发送操作结果信息给客户端10。具体的,如果同步结果为同步成功则发送操作成功信息给客户端10,否则发送操作失败信息给客户端10。
传统的数据同步方案中,待主节点完成执行SQL执行计划后,再将相应的增量日志发送给节点进行解析回放,相当于串行的数据复制方式。而根据本发明实施例的方案,主节点和节点同步执行SQL执行计划,相当于主节点和节点进行并行的数据复制,相比传统的数据同步方案,本发明实施例的方案能够大大提高了数据库同步处理的效率,减少数据的延迟,提升了分布式数据库***的性能,减少了对客户端提交事务的处理时间,进而提升用户的体验。
此外,本发明实施例通过哈比算法对主节点和节点的增量日志进行对比,并根据对比结果确定同步结果,能够保证数据同步的一致性。
图12示出了本发明实施例提供的电子设备40。如图12所示,该电子设备40包括但不限于:
存储器42,用于存储程序;
处理器41,用于执行存储器42存储的程序,当处理器41执行存储器42存储的程序时,处理器41用于执行上述任一实施例的数据同步处理方法。
处理器41和存储器42可以通过总线或者其他方式连接。
存储器42作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本发明实施例描述的任一种数据同步处理方法。处理器41通过运行存储在存储器42中的非暂态软件程序以及指令,从而实现上述任一实施例的数据同步处理方法。
存储器42可以包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需要的应用程序;存储数据区可存储执行上述的数据同步处理方法。此外,存储器42可以包括高速随机存取存储器,还可以包括非暂态存储器,比如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器42可选包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至该处理器41。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
实现上述的数据同步处理方法所需的非暂态软件程序以及指令存储在存储器42中,当被一个或者多个处理器41执行时,执行上述任一实施例的数据同步处理方法。
本发明实施例还提供了一种存储介质,存储有计算机可执行指令,计算机可执行指令用于执行上述任一实施例的数据同步处理方法。
在一实施例中,该存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个控制处理器41执行,比如,被上述电子设备40中的一个处理器41执行,可使得上述一个或多个处理器41执行上述任一实施例的数据同步处理方法。
以上所描述的实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、***可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的。共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明权利要求所限定的范围内。