本发明涉及数据库
技术领域:
:,具体而言涉及一种分布式数据库数据同步方法、相关装置及系统。
背景技术:
::近年来,随着数据量的高速增长,分布式数据库技术也得到了快速的发展,传统的关系型数据库开始从集中式向分布式发展。分布式数据库具体指利用高速计算机网络将物理上分散的多个数据存储节点连接起来组成一个逻辑上统一的数据库。分布式数据库的基本思想是将原来集中式数据库中的数据分散存储到多个通过网络连接的数据存储节点上,以获取更大的存储容量和更高的并发访问量。现有技术提供了一种分布式数据库,如图1所示,数据节点1和数据节点2上存储了相同的数据,数据节点1和数据节点2均处于运行(active)状态。数据操作指令可以发送到数据节点1或数据节点2进行执行,一个数据节点执行数据操作指令后,将执行结果通过复制日志的形式同步到另一数据节点,另一数据节点根据复制日志进行数据复制,从而实现数据节点1和2之间的数据同步。但是,分布式数据库在数据同步的过程中,存在需要对数据库进行升级的场景,例如对数据库中的数据模型增加字段、删除字段。现有技术提供了一种基于数据节点的数据同步方法,下面以数据节点2升级来介绍该方法,该方法主要包括如下步骤:s1、节点1暂停处理应用客户端发送的数据操作命令以及节点1和节点2之间暂停数据复制日志的传输。s2、节点2接收升级指令,执行版本升级操作,然后节点2接收应用客户端发送的数据操作命令并执行,记录数据复制日志。s3、节点2在升级完成后,将升级指令和数据复制日志发送给节点1,节点1接收节点2发送的数据复制日志和升级命令。s4、节点1先根据升级指令进行版本升级,然后再根据复制日志进行数据复制,在复制完成后,开始正常接收应用客户端发送的数据操作指令,并恢复节点1和节点2之间正常的数据同步。现有技术的数据同步方法在数据库进行升级时,数据节点1不能处理应用客户端发送的数据操作命令,只有数据节点2能处理应用客户端发送的数据操作命令,降低了分布式数据库的可靠性。技术实现要素:本发明实施例提供了一种提高分布式数据库可靠性的数据同步方法和装置。在一方面,本发明实施例提供一种分布式数据库数据同步方法,应用于所述分布式数据库中的目的数据节点,所述目的数据节点在执行应用客户端发送的数据操作指令时,还包括:接收源数据节点发送的数据复制日志,所述复制日志中携带需要同步到所述目的节点的数据;获取所述源数据节点的版本,确定所述源数据节点的版本高于自身的版本时,缓存所述复制日志;接收元数据服务器发送的升级指令,所述升级指令用于指示所述目的数据节点进行版本升级;根据所述升级指令进行升级,在升级完成后,根据所述缓存的复制日志进行数据复制。其中,升级指令中携带修改目的数据节点的数据模型的字段或增加数据模型的字段的指令。在本实施例中,源数据节点可以正常处理应用客户端发送的数据操作指令,并生成数据复制日志发送到目的数据节点。目的数据节点在进行升级时,可以接收源数据节点发送的数据复制日志。在源数据节点的版本高于自身的版本时,先缓存该数据复制日志,在自身进行版本升级完成后,再根据缓存的复制日志进行数据复制,完成源数据节点和目的数据节点之间的同步。与现有技术相比,本发明实施例提供的升级方法使得源数据节点和目的数据节点在升级的同时,都可以处理应用客户端发送的数据操作命令,提高了分布式数据库的可靠性。结合第一方面,在一个可能的实施方案中,目的数据节点获取源数据节点的版本具体包括:根据所述数据复制日志获取所述源数据节点的版本,所述数据复制日志中携带所述源数据节点的版本;或者接收所述源数据节点发送的通知消息,所述通知消息中携带所述源数据节点的版本,根据所述通知消息获取所述源数据节点的版本。结合第一方面,在一个可能的实施方案中,所述方法还包括:目的数据节点在执行所述数据操作指令时,生成数据复制日志,所述数据复制日志中携带需要同步到与所述目的数据节点对应的数据节点的数据;向所述源数据节点发送所述数据复制日志,从而实现由目的数据节点到源数据节点之间的数据同步。结合第一方面,在一个可能的实施方案中,所述目的数据节点还在确定所述源数据节点的版本低于自身的版本时,则说明其自身可以处理源数据节点发送的复制日志,数据节点则根据所述复制日志进行数据复制,从而实现低版本到高版本的数据同步。结合第一方面,在一个可能的实施方案中,目的数据节点向源数据节点发送所述数据复制日志具体包括:将所述复制日志放到本机发送队列发送给所述源数据节点。相对于同步的方式(同步方式要求对端对复制日志处理完毕,同步才结束)传递复制日志,可以提高数据库系统的可用性。第二方面,本发明实施例提供一种分布式数据库的目的数据节点,其包括:数据操作指令处理单元,用于执行应用客户端发送的数据操作指令;接收单元,用于接收源数据节点发送的数据复制日志,所述复制日志中携带需要同步到所述目的节点的数据;日志缓存单元,获取所述源数据节点的版本,确定所述源数据节点的版本高于自身的版本时,缓存所述复制日志;所述接收单元还用于接收元数据服务器发送的升级指令,所述升级指令用于指示所述目的数据节点进行版本升级;升级单元,用于根据所述升级指令进行升级;日志同步单元,用于在升级完成后,根据所述缓存的复制日志进行数据复制。结合第二方面,在一种可能的实施方案中,日志缓存单元获取源数据节点的版本包括:所述日志缓存单元根据所述数据复制日志获取所述源数据节点的版本,所述数据复制日志中携带所述源数据节点的版本;或者所述日志缓存单元接收所述源数据节点发送的通知消息,所述通知消息中携带所述源数据节点的版本,根据所述通知消息获取所述源数据节点的版本。结合第二方面,在一种可能的实施方案中,所述目的数据节点还包括:日志生成单元,用于在执行所述数据操作指令时,生成数据复制日志,所述数据复制日志中携带需要同步到与所述目的数据节点对应的数据节点的数据;发送单元,用于向所述源数据节点发送所述数据复制日志。结合第二方面,在一种可能的实施方案中,目的数据节点的日志同步单元还用于在确定所述源数据节点的版本低于自身的版本时,根据所述复制日志进行数据复制。结合第二方面,在一种可能的实施方案中,目的数据节点的发送单元向源数据节点发送所述数据复制日志具体包括:所述发送单元将所述复制日志放到本机发送队列发送给所述源数据节点。第三方面,本发明实施例提供一种分布式数据库数据同步方法,应用于所述分布式数据库中的目的数据节点,其中,目的数据节点在执行应用客户端发送的数据操作指令时,还包括:接收所述元数据服务器发送的升级预通知指令,所述升级预通知指令中携带需要删除的表项;接收源数据节点发送的数据复制日志,所述数据复制日志中携带需要同步到所述目的节点的数据;确定所述复制日志中包含所述要删除的表项对应的数据时,则在根据所述复制日志进行数据复制时过滤所述要删除的表项对应的数据,对所述目的数据节点中已经存在的表项按照缺省值进行处理,从而实现源数据节点和目的数据节点之间的数据同步。结合第三方面,在一种可能的实施方案中,所述方法还包括:接收元数据服务器发送的升级指令,所述升级指令用于删除所述数据节点的表项,根据所述升级指令删除所述数据节点的表项。在本实施方案中,由于预先已经接收到升级预通知指令,升级预通知指令中携带需要删除的表项,则目的数据节点可以预先知道哪些表项对应的数据需要删除,从而在接收到复制日志或向源数据节点发送复制日志时预先进行处理,实现了升级情况下的数据同步。结合第三方面,在一种可能的实施方案中,该方法还包括:在根据数据操作指令的执行结果生成数据复制日志时,过滤所述需要删除的表项对应的数据,向所述源数据节点发送所述数据复制日志。第四方面,本发明实施例提供一种分布式数据库目的数据节点,其中,目的数据节点具体包括:数据操作指令处理单元,用于执行应用客户端发送的数据操作指令;接收单元,用于接收所述元数据服务器发送的升级预通知指令,所述升级预通知指令中携带需要删除的表项;所述接收单元还用于接收源数据节点发送的数据复制日志,所述数据复制日志中携带需要同步到所述目的节点的数据;日志处理单元,用于在确定所述复制日志中包含所述要删除的表项对应的数据时,则在根据所述复制日志进行数据复制时过滤所述要删除的表项对应的数据,对所述目的数据节点中已经存在的表项按照缺省值进行处理,从而实现源数据节点和目的数据节点之间的数据同步。结合第四方面,在一种可能的实施方案中,所述目的数据节点还包括:升级单元,用于接收元数据服务器发送的升级指令,所述升级指令用于删除所述数据节点的表项,根据所述升级指令删除所述数据节点的表项。在本实施方案中,由于预先已经接收到升级预通知指令,升级预通知指令中携带需要删除的表项,则目的数据节点可以预先知道哪些表项对应的数据需要删除,从而在接收到复制日志或向源数据节点发送复制日志时预先进行处理,实现了升级情况下的数据同步。结合第四方面,在一种可能的实施方案中,所述目的数据节点还包括:日志发送单元,用于在根据数据操作指令的执行结果生成数据复制日志时,过滤所述需要删除的表项对应的数据,向所述源数据节点发送所述数据复制日志。结合第三方面、第四方面,在一种可能的实施方案中,所述目的数据节点向源数据节点发送数据复制日志具体包括:将复制日志放到本机发送队列发送给所述源数据节点。第五方面,本发明实施例提供一种分布式数据库,包括第二方面或第四方面所述的目的数据节点以及与所述目的数据节点对应的源数据节点。在本发明实施例提供的分布式数据可以在源数据节点和目的数据节点进行升级的同时,完成源数据节点和目的数据节点之间的数据同步,进一步提高了分布式数据库的可靠性。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。其中:图1是现有技术提供的分布式数据库的结构示意图;图2是本发明实施例一提供的分布式数据库的结构示意图;图3是本发明实施例提供的数据节点的数据存储示意图;图4是本发明实施例二提供的数据同步方法的流程图;图5是本发明实施例三提供的数据同步方法的流程图;图6是本发明实施例提供的数据节点的数据存储示意图;图7是本发明实施例四提供的分布式数据库的数据同步方法;图8是本发明实施例五提供的目的数据节点的结构示意图;图9是本发明实施例六提供的目的数据节点的结构示意图;图10是本发明实施例七提供的分布式数据库中的目的数据节点的结构示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本发明提供一种分布式数据库的数据同步方法、相关装置及数据库系统,参见图2,图2是本发明实施例一提供的数据库系统的结构示意图。如图2所示,本发明涉及的数据处理系统自上而下分别包括:应用客户端、元数据服务器以及数据节点服务器。其中,应用客户端为使用数据库的应用程序,例如计费应用。应用客户端可以访问数据节点服务器中存储的数据。元数据服务器用于负责数据库系统的分布式管理能力,元数据服务器可以独立部署,也可以和数据节点服务器合设。元数据服务器可采用小型机、x86计算机、个人计算机服务器pcserver进行部署。应用客户端通过ip网络分别与元数据服务器和数据节点服务器进行通信,其中,客户端与元数据服务器或数据节点服务器之间的通信接口可以为传输控制协议(transmissioncontrolprotocol,tcp)接口或用户数据报协议(userdatagramprotocol,udp)接口。数据节点服务器包括多个数据节点(也可以称为物理节点),数据节点可以为小型机、x86计算机或个人计算机服务器pcserver等,数据节点中的数据可存储在位于存储网络的存储介质中,多个数据节点与存储网络之间通过块io(blockio)进行读写,即以块(block)的方式对存储介质进行读写,存储介质可以是硬盘驱动器(harddiskdrive,hdd)、固态硬盘(solidstatedrives,ssd)等。此外,客户端还部署了驱动driver,driver中缓存路由信息。这样,客户端在发送数据操作指令给物理节点时,可以通过缓存的路由信息完成路由判断,访问对应的物理节点。参见图3,图3给出了数据节点上的数据存储示意图。数据节点1和数据节点2互为备份,位于数据节点1上的分片(也可以称为虚拟节点)1、以及位于数据节点2上的分片2为主分片,数据节点1上的分片2、以及位于数据节点2上的分片1为备分片。数据节点1和数据节点2分别可以称为源数据节点和目的数据节点。其中,源数据节点和目的数据节点的名称是相对的。元数据服务器上存储了虚拟节点与物理节点间的映射关系、虚拟节点的主分片和备份片的定义。元数据服务器还用于控制数据节点之间的数据同步。继续参见图4,图4是本发明实施例二提供的数据同步方法的流程图。其中,数据节点1为源数据节点,数据节点2为目的数据节点。本实施例提供的数据库的数据同步方法可以应用于数据库升级的场景,主要包括如下步骤:步骤301、数据节点1接收元数据服务器发送的升级指令,升级指令用于指示源数据节点进行版本升级。其中,数据节点1、2先后接收到元数据服务器发送的升级指令,告知从版本v1升级到v2,升级指令可以修改数据模型(例如表结构)的字段或增加数据模型的字段。由于收到升级指令的时间存在先后,因而数据节点1和2的数据模型存在不一致的情况。本发明实施例以数据节点1先收到升级指令为例来说明。步骤302、数据节点1根据该升级指令进行升级。步骤303、数据节点1在升级成功后接收应用客户端发送的数据操作命令,根据数据操作命令执行数据操作,生成复制日志。在本实施例中,数据节点1在进行升级的同时,可以接收应用客户端发送的数据操作指令,例如对主分片1的数据的查询、修改等。数据节点1还在执行数据操作后,生成复制日志,该复制日志中携带需要同步到备分片1对应的数据节点(即数据节点2)上的数据。步骤304、数据节点1向数据节点2发送生成的复制日志。在升级开始之前或在升级完成之前,数据节点1也可以接收并处理客户端发送的数据操作指令,并生成复制日志。此时,数据节点1和数据节点2的版本是相同的,数据节点1直接向数据节点2发送复制日志即可实现数据节点1和数据节点2之间的数据同步。在升级完成之后,数据节点1也可以接收并处理客户端发送的数据操作指令,并生成复制日志。此时,数据节点1的版本高于数据节点2的版本,即数据节点1和数据节点2之间出现数据模型不同步,现有技术中的数据节点2无法处理从数据节点1接收到的复制日志,本发明实施例对以此为例来说明。在本实施例中,数据节点1和数据节点2之间可以采用异步的方式传递复制日志,即数据节点1可以将复制日志放到本机发送队列,并且本机处理完就算结束。相对于同步的方式(目的数据节点处理复制日志成功为止)传递复制日志,可以提高数据库系统的可用性和分区容错性。步骤305、数据节点2接收数据节点1发送的数据复制日志,复制日志中携带需要同步到所述数据节点1的数据。步骤306、数据节点2获取数据节点1的版本,确定数据节点1的版本高于自身的版本时,缓存复制日志。在本实施例中,复制日志中可以携带数据节点1的版本,数据节点2可以从复制日志中获取数据节点1的版本,并比较数据节点1的版本和自身的版本。此外,数据节点2也可以接收数据节点1发送的通知消息,该通知消息中携带所述源数据节点的版本,数据节点2根据所述通知消息获取数据节点1的版本。在本实施例中,如果数据节点1的版本高于自身的版本时,则说明复制日志是根据新的数据模型生成的,数据节点2暂时不处理复制日志,缓存复制日志。在另一实施例中,如果数据节点1的版本低于自身的版本时,即数据节点2上的数据模型较新,则数据节点2可以处理数据节点1发送的复制日志,即根据复制日志进行数据同步。如果数据节点1的版本和自身的版本相同,则数据节点2可以处理数据节点1发送的复制日志,即根据复制日志进行数据同步。步骤307、数据节点2接收元数据服务器发送的升级指令,所述升级指令用于指示数据节点2进行版本升级。在本实施例中,数据节点1、2先后接收到源数据服务器发送的升级指令。步骤308、数据节点2根据升级指令进行升级。步骤309、数据节点2在升级完成后,根据缓存的复制日志进行数据复制。在本发明实施例中,数据节点2在升级完成后,其版本和数据节点1的版本相同,数据节点2开始处理复制日志,即根据步骤306中缓存的复制日志进行数据复制(也可称为数据重做),从而保证数据节点1和数据节点2之间的数据同步。在本实施例中,源数据节点(数据节点1)可以正常处理应用客户端发送的数据操作指令,并生成数据复制日志发送到目的数据节点(数据节点2)。目的数据节点在进行升级时,可以接收源数据节点发送的数据复制日志。在源数据节点的版本高于自身的版本时,先缓存该数据复制日志,在自身进行版本升级完成后,再根据缓存的复制日志进行数据复制,完成源数据节点和目的数据节点之间的同步。与现有技术相比,本发明实施例提供的升级方法使得源数据节点和目的数据节点在升级的同时,都可以处理应用客户端发送的数据操作命令,提高了分布式数据库的可靠性。在本发明实施例中,数据节点2在执行上述升级的同时,还可以执行所述应用客户端发送的数据操作指令,数据节点2还可以执行如下步骤:步骤310、数据节点2在执行所述数据操作指令时,生成数据复制日志,该数据复制日志中携带需要同步到与所述数据节点2对应的数据节点的数据。其中,与数据节点2对应的数据节点为数据节点1。例如数据节点2上的主分片2上的数据进行了修改,则复制日志中携带了该修改后的数据,该数据需要同步到数据节点1的备分片2上。步骤311、数据节点2向数据节点1发送所述数据复制日志。在本实施例中,数据节点2和数据节点1之间可以采用异步的方式传递复制日志,即数据节点2可以将复制日志放到本机发送队列,并且本机处理完就算结束。相对于同步的方式传递复制日志,可以提高数据库系统的可用性和分区容错性。需要说明的是,步骤310-311和前面的步骤305-309是时序无关的,即数据节点1和数据节点2接收到数据操作指令是时序无关的。参见图5,图5是本发明实施例三提供的一种数据同步方法的流程图。其中,数据节点1为源数据节点,数据节点2为目的数据节点。本实施例提供的数据库数据同步方法主要以数据节点2为例来说明,数据节点2在执行应用客户端发送的数据操作指令时,还包括如下步骤:步骤401、数据节点2接收元数据服务器发送的升级预通知指令,所述升级预通知指令中携带需要删除的表项。在本实施例中,元数据服务器在发送升级指令之前,预先向数据节点1和2发送升级预通知指令,其中升级预通知指令用于预先通知数据节点需要修改数据模型,本实施例中升级预通知指令中携带数据模型(例如表结构)中需要删除的表项(也可以称为字段),表明需要删除数据模型中的表项。本实施例中以数据节点2(目的数据节点)为例来说明。步骤402、数据节点2接收数据节点1发送的数据复制日志,所述数据复制日志中携带需要同步到所述数据节点2的数据。其中,数据节点1和数据节点2之间的数据同步并没有停止,数据节点1在接收到应用客户端发送的数据操作指令后,执行相应的数据操作,并生成数据复制日志,同步到数据节点1,该数据复制日志中携带需要同步到数据节点2的数据。步骤403、确定复制日志中包含所述要删除的表项对应的数据时,则数据节点2在根据所述复制日志进行数据复制时过滤所述要删除的表项对应的数据,对所述目的数据节点中已经存在的表项按照缺省值进行处理。具体的,由于数据节点2预先接收到了升级预通知指令,升级预通知指令中携带需要删除的表项,则数据节点2可以确定复制日志中是否包含所述要删除的表项对应的数据,若是,则数据节点2在根据接收到的复制日志进行数据复制时过滤要删除的表项对应的数据,对数据节点2中已经存在的表项按照缺省值进行处理,即不对数据节点2中要删除的表项对应的数据进行修改(避免先修改,随后升级时删除),从而实现数据节点1和2之间的数据同步,提高了数据同步的效率。步骤404、数据节点2接收元数据服务器发送的升级指令,升级指令用于删除所述数据节点的表项,根据升级指令删除所述数据节点的表项。在本实施例中,数据节点2在处理复制日志的同时,可以执行元数据服务器发送的升级指令,即步骤404和步骤401-403之间是时序无关的,步骤404也可以先于步骤401执行。本实施例中,元数据服务器向数据节点1和2发送删除数据节点的表项的升级指令,数据节点1、2收到升级指令后,根据升级指令删除数据节点1、2中的表项。步骤405、数据节点2在根据数据操作指令的执行结果生成数据复制日志时,过滤所述需要删除的表项对应的数据,向所述源数据节点发送所述数据复制日志。在本实施例中,数据节点2本身在执行应用客户端发送的数据操作指令后,还根据数据操作指令的执行结果生成数据复制日志。其中,数据节点2在生成数据复制日志时,可以过滤需要删除的表项对应的数据,从而复制日志中不携带需要删除的表项对应的数据,提高数据复制日志的发送效率。需要说明的是,步骤405与步骤402-404之间是时序无关的,例如步骤405可以在步骤402之前执行。进一步的,在本实施例中的数据节点1和数据节点2之间可以采用异步的方式传递复制日志,即数据节点2可以将复制日志放到本机发送队列,并且本机处理完就算结束。相对于同步的方式传递复制日志,可以提高数据库系统的可用性和分区容错性。为更详细的理解本发明实施例提供的数据同步方法,以下给出本发明实施例的具体应用场景。如图6所示,图6为本发明实施例提供的数据节点的数据存储示意图。其中,分布式数据库由四个物理节点1、2、3和4组成,每个节点有3个主分片(图中斜线填充的部分)和3个备分片(图中未填充部分)。例如,分片3是从节点1复制给节点2,而分片6从节点2复制给节点1。节点1和节点2间进行双向复制。分布式数据库中的每个分片包括两个表结构table_a和table_b,当前为v1版本,表结构如下:table_a表结构为{cust_idint,cust_namevarchar(128),cust_bankvarchar(128),}table_a中以cust_id为主键。table_b表结构为{product_idint,product_namevarchar(128),product_priceint,}table_b中以product_id为主键。升级后的目标v2版本,表结构变化如下:table_a表要删除字段cust_bank,table_b表要增加字段product_discountint。以节点1(datanode1)和节点2(datanode2)间的双向复制为例,介绍从v1升级到v2的在线升级过程中的数据同步。参见图7,图7是本发明实施例四提供的分布式数据库的数据同步方法。上述同步方法主要包括:步骤601、元数据服务器接收应用客户端发送的表结构升级指令。其中,表结构升级指令中包含table_a删除字段和table_b增加字段。步骤602、元数据服务器向所有的数据节点发送升级预通知指令,升级预通知指令中携带需要删除的表项。其中,升级预通知指令用于告知数据节点从版本v1升级为v2,同时告知数据节点中的table_a需要删除的字段(也可以称为异构字段)cust_bank。本实施例中以数据节点1和数据节点2为例来说明。步骤603、数据节点1、2将同步复制降级为异步复制方式。其中,数据节点1和2处理升级预通知指令的步骤包括将同步复制降级为异步复制方式。复制降级,是为了保证升级过程中对日志复制处理的变化,不会影响或阻塞在线业务,保证系统的高可用性。同时,各数据节点还标识出升级期间需要删除的字段table_a.cust_bank。步骤604、数据节点1、2接收应用客户端发送的数据操作指令,执行对应的数据操作并生成复制日志。在整个升级过程中,在线业务未中断。在线业务对数据节点1、2的写操作产生复制日志。此时,数据节点可以根据标识的需要删除的字段,在产生复制日志时,直接过滤掉字段table_a.cust_bank,此种生成复制日志的方式可以成为异构复制。步骤605、数据节点1向数据节点2异步发送生成的复制日志。在本实施例中,数据节点1的主分片3存在数据修改,则数据节点1生成的复制日志中携带需要同步到数据节点2的备分片3上的数据。步骤606、数据节点2根据复制日志执行数据同步。其中,复制日志中存在异构字段table_a.cust_bank,则数据节点2进行数据同步(也称为数据重做)处理时进行过滤,对异构字段table_a.cust_bank也按缺省值(null)处理。对于分片6,数据节点1也会接收到数据节点2发送的复制日志,并根据复制日志进行数据同步。步骤607、元数据服务器向数据节点1和2发送升级指令,指示进行版本升级。在本实施例中,元数据服务器通过数据定义语言(datadefinitionlanguage,ddl)操作发送升级指令,升级内容包括table_a表删除字段cust_bank,table_b表增加字段product_discountint。由于数据节点1和2接收到升级指令有先后顺序,本实施例中默认数据节点1先接收到升级指令为例来说明。步骤608、数据节点1先接收并处理ddl升级指令。数据节点1执行ddl升级指令后,其版本号v2瞬间比数据节点2的版本号v1新。步骤609、数据节点1向数据节点2发送生成的复制日志。升级期间,分片3的复制处理如下:由于升级期间,在线业务未中断,即数据操作未中断。在线业务对数据节点1的主分片3写操作产生的复制日志通过异步方式同步给数节点2,此时复制日志是配套新版本v2的(复制日志中增加字段table_b.product_discount,删除字段table_a.cust_bank)。步骤610、数据节点2根据复制日志进行数据同步。数据节点2从复制日志中获取数据节点1的版本v2,由于数据节点2的版本v1较低(无字段table_b.product_discount),无法处理v2版本的复制日志(无法识别增加字段table_b.product_discount的日志信息)。此时,数据节点2先缓存这部分复制日志。步骤611、数据节点2向数据节点1发送生成的复制日志。升级期间,分片6的复制处理如下:由于数据节点2在接收到ddl升级指令之前,在线业务对数据节点2的主分片6写操作,产生复制日志并通过异步方式同步给数据节点1,此时复制日志是配套旧版本v1的。步骤612、数据节点1根据复制日志进行数据同步。由于数据节点1的表结构v2较新,可以处理v1版本分片6的复制日志。此时,数据节点1正常处理数据节点2传来的分片6复制日志,对于数据节点2的v1版本没有涉及的新增的字段table_b.product_discount,在进行复制处理时,按其缺省值null处理。对于异构字段table_a.cust_bank,按步骤606的处理逻辑进行处理。步骤613、数据节点2处理ddl升级指令。在本实施例中,数据节点2相对于数据节点1后收到元数据服务器发送的ddl升级指令。数据节点2执行ddl升级指令,完成版本升级,升级后的v2版本中table_a表删除字段cust_bank,table_b表增加字段product_discountint。步骤614、数据节点2根据缓存的复制日志进行数据同步。升级后的数据节点的版本为v2,可以处理之前缓存的复制日志,完成数据节点1、2之间的数据同步。步骤615、数据节点1、2在升级完成后,向元数据服务器发送升级成功的通知消息。元数据服务器在识别所有节点均完成升级后,进入升级后处理环节,例如通知各数据节点恢复复制级别为同步复制。同时,也取消异构复制,正常生成复制日志。参见图8,图8是本发明实施例五提供的目的数据节点的结构示意图。其中,所述目的数据节点可以为图3-5所示的数据节点2。目的数据节点采用了通用的计算机硬件,其包括处理器101、存储器102、总线103、输入设备104、输出设备105以及网络接口106。具体的,存储器102可以包括以易失性和/或非易失性存储器形式的计算机存储媒体,如只读存储器和/或随机存取存储器。存储器102可以存储操作系统、应用程序、其他程序模块、可执行代码和程序数据。输入设备104可以用于向目的数据节点输入命令和信息,输入设备104如键盘或指向设备,如鼠标、轨迹球、触摸板、麦克风、操纵杆、游戏垫、圆盆式卫星电视天线、扫描仪或类似设备。这些输入设备可以通过总线103连接至处理器101。输出设备105可以用于目的数据节点输出信息,除了监视器之外,输出设备105还可以为其他外围输出设各,如扬声器和/或打印设备,这些输出设备也可以通过总线103连接到处理器101。目的数据节点可以通过网络接口106连接到网络中,例如连接到局域网(localareanetwork,lan)。在联网环境下,目的数据节点中存储的计算机执行指令可以存储在远程存储设备中,而不限于在本地存储。当目的数据节点中的处理器101执行存储器102中存储的可执行代码或应用程序时,目的数据节点可以执行以上实施例二、三、四中的目的数据节点一侧的方法步骤,例如执行步骤305-311、401-405、603、606、610等。具体执行过程参见上述实施例二、三和四,在此不再赘述。参见图9,图9是本发明实施例六提供的目的数据节点的结构示意图。如图所示,本发明实施例提供的目的数据节点包括:数据操作指令处理单元710,用于执行应用客户端发送的数据操作指令;接收单元720,用于接收源数据节点发送的数据复制日志,所述复制日志中携带需要同步到所述目的节点的数据;日志缓存单元730,获取所述源数据节点的版本,确定所述源数据节点的版本高于自身的版本时,缓存所述复制日志;所述接收单元720还用于接收元数据服务器发送的升级指令,所述升级指令用于指示所述目的数据节点进行版本升级;升级单元740,用于根据所述升级指令进行升级;日志同步单元750,用于在升级完成后,根据所述缓存的复制日志进行数据复制。本发明实施例提供的目的数据节点可以使用在前述方法实施例二和四中,其通过上述的数据操作指令单元710、接收单元720、日志缓存单元730、升级单元740以及日志同步单元750之间的配合来完成实施例二、四中的目的数据节点一侧的方法步骤。与现有技术中的目的数据节点相比,本实施例提供的目的数据节点在执行数据同步时,具有与前述方法实施例相同的有益效果。具体的,目的数据节点中的日志缓存单元730获取源数据节点的版本包括:所述日志缓存单元730根据所述数据复制日志获取所述源数据节点的版本,所述数据复制日志中携带所述源数据节点的版本;或者所述日志缓存单元730接收所述源数据节点发送的通知消息,所述通知消息中携带所述源数据节点的版本,根据所述通知消息获取所述源数据节点的版本。进一步的,图5所述的目的数据节点还包括:日志生成单元760,用于在执行所述数据操作指令时,生成数据复制日志,所述数据复制日志中携带需要同步到与所述目的数据节点对应的数据节点的数据;发送单元770,用于向所述源数据节点发送所述数据复制日志。其中,发送单元770可以将所述复制日志放到本机发送队列发送给所述源数据节点。在本实施例中,日志生成单元760生成复制日志、发送单元770向源数据节点发送复制日志的具体过程可以参见上述方法实施例中的步骤310-311的描述。在本实施例中,目的数据节点的日志同步单元750还用于在确定所述源数据节点的版本低于自身的版本时,根据所述复制日志进行数据复制。参见图10,图10是本发明实施例七提供的分布式数据库中的目的数据节点的结构示意图。如图所示,目的数据节点具体包括:数据操作指令处理单元810,用于执行应用客户端发送的数据操作指令;接收单元820,用于接收所述元数据服务器发送的升级预通知指令,所述升级预通知指令中携带需要删除的表项;所述接收单元820还用于接收源数据节点发送的数据复制日志,所述数据复制日志中携带需要同步到所述目的节点的数据;日志处理单元830,用于在确定所述复制日志中包含所述要删除的表项对应的数据时,则在根据所述复制日志进行数据复制时过滤所述要删除的表项对应的数据,对所述目的数据节点中已经存在的表项按照缺省值进行处理,从而实现源数据节点和目的数据节点之间的数据同步。本发明实施例提供的目的数据节点可以使用在前述方法实施例三和四中,其通过上述的数据操作指令单元810、接收单元820、日志处理单元830之间的配合来完成实施例实施例三、四中的目的数据节点一侧的方法步骤。与现有技术中的目的数据节点相比,本实施例提供的目的数据节点在执行数据同步时,具有与前述方法实施例相同的有益效果。进一步参见图10,本发明实施例提供的目的数据节点还包括:升级单元840,用于接收元数据服务器发送的升级指令,所述升级指令用于删除所述数据节点的表项,根据所述升级指令删除所述数据节点的表项。在本实施方案中,由于预先已经接收到升级预通知指令,升级预通知指令中携带需要删除的表项,则目的数据节点可以预先知道哪些表项对应的数据需要删除,从而在接收到复制日志或向源数据节点发送复制日志时预先进行处理,实现了升级情况下的数据同步。日志发送单元850,用于在根据数据操作指令的执行结果生成数据复制日志时,过滤所述需要删除的表项对应的数据,向所述源数据节点发送所述数据复制日志。其中,日志发送单元850可以将复制日志放到本机发送队列发送给所述源数据节点。在本实施例中,升级单元840对数据节点本身进行升级、日志发送单元850向源数据节点发送复制日志的具体过程参见上述方法实施例中的步骤404-405的描述。在本实施例中,目的数据节点是以功能单元的形式来呈现。这里的“单元”可以指特定应用集成电路(application-specificintegratedcircuit,asic),电路,执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,本领域的技术人员可以想到目的数据节点也可以采用图8所示的形式。例如,数据操作指令单元710、接收单元720、日志缓存单元730、升级单元740以及日志同步单元750所实现的功能都可以通过图8中的处理器101和存储器102来实现。例如,数据操作指令处理单元710执行应用客户端发送的数据操作指令可以通过由处理器101来执行存储器102中存储的代码来实现。其中,用于实现本发明上述目的数据节点的处理器可以是中央处理器(cpu),通用处理器、数字信号处理器(dsp)、专用集成电路(asic),现场可编程门阵列(fpga)或者其他可编程逻辑器件、晶体管逻辑器件,硬件部件或者其任意组合。其可以实现或执行结合本发明公开内容所描述的各种示例性的逻辑方框,模块和电路。所述处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,dsp和微处理器的组合等等。本领域普通技术人员将会理解,本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此外,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。当前第1页12当前第1页12