一种同步活动事务表的方法及装置与流程

文档序号:15385699发布日期:2018-09-08 00:32阅读:205来源:国知局

本申请涉及数据库技术领域,尤其涉及一种同步活动事务表的方法及装置。



背景技术:

事务(transaction)是数据库系统中由用户定义的一个数据库操作序列,这些操作要么全部执行要么全不执行,是一个不可分割的工作单位。活动事务表(activetransactionlist)用于记录尚未提交事务的事务号,分布式数据库集群中的节点之间需要同步活动事务表,以保证数据库的一致性。

现有技术中,执行事务的节点在进行组提交时,将自身的活动事务表发送给数据库集群中的其它节点,使得这些节点将自身的活动事务表与执行事务的节点的活动事务表同步。

但是,节点通常存在大量的并发事务,使得节点的活动事务表变得非常大,通过网络同步活动事务表不仅消耗大量的传输资源,而且活动事务表的传输耗时较长,导致节点间活动事务表的同步存在较大的时延,降低数据库系统的效率。



技术实现要素:

本申请提供一种同步活动事务表的方法及装置,用以解决现有技术中存在节点间同步活动事务表的数据传输量较大,传输耗时较长的问题。

第一方面,本申请提供了一种同步活动事务表的方法,该方法可以应用包括一个主节点以及多个备节点的一主多备架构的集群数据库系统,也可以应用于包括一个协作节点以及多个数据节点的多写架构的集群数据库系统。该方法可以由一主多备架构的集群数据库系统中的主节点执行,也可以由多写架构的集群数据库系统中的协作节点执行。在该方法中,第一节点(上述主节点或协作节点)在事务表增量日志缓冲区中记录上一次同步活动事务表之后的事务表增量日志,所述事务表增量日志用于表示所述第一节点的活动事务表中所记录事务的变化,包括表示在所述活动事务表中新增事务的新增事务日志以及表示从所述活动事务表中删除事务的提交事务日志,所述活动事务表用于记录尚未提交的事务。然后,在对提交事务日志所记录的事务进行组提交时,第一节点向数据库集群中除自己之外的第二节点发送事务表增量日志缓冲区中记录的事务表增量日志,该第二节点的个数可以为1个或多于1个,在第一节点为前述主节点时,第二节点为前述备节点;在第一节点为前述协作节点时,第二节点为前述数据节点。第二节点接收第一节点发送的事务表增量日志以后,根据事务表增量日志对本地保存的活动事务表进行更新。

上述技术方案中,第一节点向第二节点发送组提交时的事务表增量日志,第二节点可以根据该事务表增量日志将自身的活动事务表更新为与第一节点的活动事务表一致。由于组提交时事务表增量日志的数量通常远小于第一节点的活动事务表中活动事务的数量,所以,事务表增量日志的大小远小于整个活动事务表的大小,通过传输事务表增量日志实现活动事务表的同步,能够减小占用的传输资源,且能够减少传输耗时,减小活动事务表同步的延时。

在第一方面的一种可选的实现方式中,第一节点将事务表增量日志缓冲区配置为由redo日志锁保护,第一节点在针对新增事务获得redo日志锁并写入redo日志的过程中,还可以使用该redo日志锁锁定事务表增量日志缓冲区,一并在事务表增量日志缓冲区中写入新增事务日志,第一节点在事务表增量日志缓冲区中写入新增事务日志的过程没有产生额外的锁开销。第一节点在针对提交事务获得redo日志锁并写入redo日志的过程中,还可以使用该redo日志锁锁定事务表增量日志缓冲区,一并在事务表增量日志缓冲区中写入提交事务日志,第一节点在事务表增量日志缓冲区中写入提交事务日志的过程也没有产生额外的锁开销。上述技术方案中,第一节点记录事务表增量日志时利用已有的redo日志锁,不会产生额外的锁开销,能够有效缓减记录事务表增量日志时的锁权限抢夺,提高事务的吞吐量。

在第一方面的一种可选的实现方式中,事务表增量日志缓冲区由重做redo日志锁保护时,第一节点先获得所述redo日志锁,锁定所述事务表增量日志缓冲区,将事务表增量日志缓冲区中的事务表增量日志拷贝至内存中无锁保护的缓冲区,然后,将该无锁保护的缓冲区中的事务表增量日志发送至第二节点,其中,从该无锁保护的缓冲区向第二节点发送事务表增量日志的过程不占用redo日志锁。通过上述方案可以有效减少发送事务表增量日志时的redo日志锁的占用,提高事务的吞吐量。

在第一方面的一种可选的实现方式中,第一节点在根据redo日志锁将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区之后,重置事务表增量日志缓冲区,使得第一节点能够及时在事务表增量日志缓冲区中记录组提交之后新增事务的事务表增量日志以及提交事务的事务表增量日志,提高事务的吞吐量以及事务处理的效率。

在第一方面的一种可选的实现方式中,在所述第一节点向至少一个第二节点发送所述事务表增量日志之前,从事务表增量日志中删除针对同一事务所记录的新增事务日志以及提交事务日志。第一节点删除针对同一事务所记录的新增事务日志以及提交事务日志不会对节点间活动事务表的同步造成影响,而且能够显著减少日志传输量,减少传输资源的消耗,缩短事务表同步的耗时。

在第一方面的一种可选的实现方式中,如果事务表增量日志的总大小本身不大于预设阈值,为一较小值,第一节点可以不点检索针对同一事务所记录的新增事务日志以及提交事务日志,减少计算资源的消耗。反之,只有在该事务表增量日志的总大小大于预设阈值,为一较大值时,第一节点才点检索针对同一事务所记录的新增事务日志以及提交事务日志,删除针对同一事务所记录的新增事务日志以及提交事务日志,减少日志传输量。

在第一方面的一种可选的实现方式中,在第二节点加入第一节点所在的数据库集群后,第一节点将自身当前的活动事务表发送给第一节点,进而使第二节点保存该活动事务表,实现第二节点的活动事务表初始化。

第二方面,本申请提供了一种同步活动事务表的方法,该方法可以应用包括一个主节点以及多个备节点的一主多备架构的集群数据库系统,也可以应用于包括一个协作节点以及多个数据节点的多写架构的集群数据库系统。该方法可以由一主多备架构的集群数据库系统中的备节点执行,也可以由多写架构的集群数据库系统中的数据节点执行。在该方法中,第二节点(上述备节点或数据节点)接收第一节点(在第二节点为上述备节点时,第一节单为主节点,在第二节点为前述数据节点时,第一节点为协作节点)发送的事务表增量日志,的上一次同步活动事务表之后的事务表增量日志,所述事务表增量日志用于表示所述第一节点的活动事务表中所记录事务的变化,包括表示在所述活动事务表中新增事务的新增事务日志以及表示从所述活动事务表中删除事务的提交事务日志,所述活动事务表用于记录尚未提交的事务;所述第二节点根据所述事务表增量日志对本地的活动事务表进行更新。

上述技术方案中,第一节点向第二节点发送组提交时的事务表增量日志,第二节点可以根据该事务表增量日志将自身的活动事务表更新为与第一节点的活动事务表一致。由于组提交时事务表增量日志的数量通常远小于第一节点的活动事务表中活动事务的数量,所以,事务表增量日志的大小远小于整个活动事务表的大小,通过传输事务表增量日志实现活动事务表的同步,能够减小占用的传输资源,且能够减少传输耗时,减小活动事务表同步的延时。

在第二方面的一种可选的实现方式中,所述第二节点根据所述事务表增量日志对本地的活动事务表进行更新的过程中,若所述事务表增量日志中包括新增第一事务的日志且未包括提交所述第一事务的日志,则所述第二节点在所述活动事务表中新增所述第一事务;若所述活动事务表中包括第二事务且所述事务表增量日志中包括提交第二事务的日志,则所述第二节点从所述活动事务表中删除所述第二事务。

第三方面,本申请提供一种同步活动事务表的装置,该装置用于执行上述第一方面或第一方面的任意可能的实现中的方法。具体的,该装置包括用于执行上述第一方面或第一方面的任意可能的实现中的方法的模块。

第四方面,本申请提供一种同步活动事务表的装置,该装置用于执行上述第二方面或第二方面的任意可能的实现中的方法。具体的,该装置包括用于执行上述第二方面或第二方面的任意可能的实现中的方法的模块。

第五方面,本申请提供一种同步活动事务表的设备,该设备用于执行上述第一方面或第一方面的任意可能的实现中的方法。该设备包括:处理器、存储器以及通信接口,存储器包括事务表增量日志缓冲区,该事务表增量日志缓冲区用于记录事务表增量日志;通信接口用于向第二节点发送事务表增量日志;处理器,分别与存储器、通信接口通信连接,用于通过存储器、通信接口执行上述第一方面或第一方面的任意可能的实现中的方法。

第六方面,本申请提供一种同步活动事务表的设备,该设备用于执行上述第二方面或第二方面的任意可能的实现中的方法。该设备包括:处理器、存储器以及通信接口,存储器用于存储活动事务表;通信接口用于接收第一节点发送的事务表增量日志;处理器,分别与存储器、通信接口通信连接,用于通过存储器、通信接口执行上述第二方面或第二方面的任意可能的实现中的方法。

第七方面,本申请还提供了一种计算机可读存储介质,用于存储为执行上述第一方面、第一方面的任意一种设计的功能所用的计算机软件指令,其包含用于执行上述第一方面、第一方面的任意一种设计的方法所设计的程序。

第八方面,本申请还提供了一种计算机可读存储介质,用于存储为执行上述第二方面、第二方面的任意一种设计的功能所用的计算机软件指令,其包含用于执行上述第二方面、第一方面的任意二种设计的方法所设计的程序。

本申请在上述各方面提供的实现的基础上,还可以进行进一步组合以提供更多实现。

附图说明

图1为数据库系统的架构示意图;

图2a为共享磁盘架构的集群数据库系统示意图;

图2b为无共享磁盘架构的集群数据库系统示意图;

图2c为多写架构的集群数据库系统示意图;

图3为本申请提供的同步活动事务表的方法的流程示意图;

图4a分别为本申请提供的同步活动事务表的方法的另一流程示意图;

图4b分别为本申请提供的同步活动事务表的方法的又一流程示意图;

图5为本申请中事务表增量日志结构的示意图;

图6a至图6e为本申请中同步活动事务表的过程的示意图;

图7为本申请提供的同步活动事务表的装置的结构示意图;

图8为本申请提供的同步活动事务表的装置的另一结构示意图;

图9为本申请提供的同步活动事务表的另一装置的结构示意图。

具体实施方式

为了使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。

本申请提供一种同步活动事务表的方法及装置,用以解决现有技术中存在的节点之间同步活动事务表耗时较长的问题。其中,方法和装置是基于同一发明构思的,由于方法及装置解决问题的原理相似,因此装置与方法的实施可以相互参见,重复之处不再赘述。

本申请中所涉及的多个,是指两个或两个以上。另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。

数据库系统的架构如图1所示,该数据库信系统包括数据库11和数据库管理系统(databasemanagementsystem,dbms)12。

其中,数据库11是指长期存储在数据存储器(datastore)中的有组织的数据集合,即按照一定的数据模型组织、存储和使用的相关联的数据集合,比如,数据库11可以包括一个或者多个表数据。

dbms12用于建立、使用和维护数据库11,以及对数据库11进行统一的管理和控制,以保证数据库11的安全性和完整性。用户可以通过dbms12访问数据库11中的数据,数据库管理员也通过dbms12进行数据库的维护工作。dbms12提供多种功能,可使多个应用程序和用户设备使用不同的方法,在同一时刻或不同时刻去建立,修改和询问数据库,应用程序和用户设备可以统称为客户端。dbms12所提供的功能可以包括以下几项:(1)数据定义功能,dbms12提供数据定义语言(datadefinitionlanguage,ddl)来定义数据库结构,ddl用于刻画数据库框架,并可以被保存在数据字典中;(2)数据存取功能,dbms12提供数据操纵语言(datamanipulationlanguage,dml),实现对数据库数据的基本存取操作,比如检索、插入、修改和删除;(3)数据库运行管理功能,dbms12提供数据控制功能,即是数据的安全性、完整性和并发控制等对数据库运行进行有效地控制和管理,以确保数据正确有效;(4)数据库的建立和维护功能,包括数据库初始数据的装入,数据库的转储、恢复、重组织,系统性能监视、分析等功能;(5)数据库的传输,dbms12提供处理数据的传输,实现客户端与dbms12之间的通信,通常与操作系统协调完成。

具体地,图2a为采用共享磁盘(shared-storage)架构的集群数据库系统示意图,包括多个节点(如图2a中的主节点以及备节点1-3),每个节点部署有数据库管理系统,分别为用户提供数据库的查询和修改等服务,多个数据库管理系统存储有共享的数据在共享数据存储器中,并且通过交换机对数据存储器中的数据执行读写操作。共享数据存储器可以为共享磁盘阵列。集群数据库系统中的节点可以为物理机,比如数据库服务器,该数据库服务器可以包括多个处理器,所有的处理器共享资源,如总线,内存和i/o系统等,数据库管理系统的功能可由一个或多个处理器执行内存中的程序来实现。集群数据库系统中的节点也可以为运行在抽象硬件资源上的虚拟机。若节点为物理机,则交换机为存储区网络(storageareanetwork,san)交换机、以太网交换机,光纤交换机或其它物理交换设备。若节点为虚拟机,则交换机为虚拟交换机。

图2b为采用无共享(shared-nothing)架构的集群数据库系统示意图,每个节点具有各自独享的硬件资源(如数据存储器)、操作系统和数据库,节点之间通过网络来通信。该体系下,数据将根据数据库模型和应用特点被分配到各个节点上,查询任务将被分割成若干部分,在所有节点上并行执行,彼此协同计算,作为整体提供数据库服务,所有通信功能都在一个高宽带网络互联体系上实现。如同图2a所描述的共享磁盘架构的集群数据库系统一样,这里的节点既可以是物理机,也可以是虚拟机。

在图2a或者图2b所述的集群数据库系统中,可以由一个节点作为主节点,用于实现对数据库的更新操作,如插入、修改和删除数据。集群数据库系统中除主节点之外的节点(如节点1-3)作为备节点,用于实现对数据库中数据的读取操作,这种系统又称为一主多备的数据库系统。

图2c为采用多写架构的集群数据库系统示意图,该系统包括共享协作节点(coordinatornode)以及数据节点(datenode),协作节点以及数据节点共享磁盘,数据节点用于实现数据存取功能,协作节点用于管理全局的锁资源以及为数据节点分配事务号等。

在本发明所有实施例中,数据库系统的数据存储器(datastore)包括但不限于固态硬盘(ssd)、磁盘阵列或其他类型的非瞬态计算机可读介质。图2a-2c中虽未示出数据库,应理解,数据库存储在数据存储器中。所属领域的技术人员可以理解一个数据库系统可能包括比图2a-2c中所示的部件更少或更多的组件,或者包括与图2a-2c中所示组件不同的组件,图2a-2c仅仅示出了与本发明实施例所公开的实现方式更加相关的组件。例如,虽然图2a至2c中已经描述了有限个数的节点,但所属领域的技术人员可理解成一个集群数据库系统可包含任何数量的节点。各节点的数据库管理系统功能可分别由运行在各节点上的软件、硬件和/或固件的适当组合来实现。

本领域技术人员根据本发明实施例的教导可以很清楚地理解,本发明实施例的方法应用于数据库管理系统,该数据库管理系统可应用于图2a所示的shared-storage架构的集群数据库系统、图2b所示的shared-nothing架构的集群数据库系统以及图2c所示的多写架构的集群数据库系统中任一数据库系统,或其它类型的数据库系统。

进一步地,参见图1,dbms12在新增事务时,在活动事务表中添加该新增事务的事务号,dbms12在提交事务时,在活动事务表中删除提交的事务的事务号,使得当前活动的事务(即,尚未提交的事务)均记录在活动事务表中,以及使得活动事务表只记录当前活动的事务。并且,dbms12在新增事务以及提交事务时,均要记录重做日志(redolog),用以记录事务对数据库的更改。dbms12在提交事务时,为了避免磁盘页面的随机写,只需要保证事务的redo日志写入磁盘即可,这样可以通过redo日志的顺序写代替页面的随机写,并且可以保证事务的持久性,提高了数据库系统的性能。进一步地,为了减少频繁地进行磁盘输入/输出(input/output,i/o)操作,dbms12将多个事务的redo日志的写入磁盘的动作合并,dbms12一次将多个redo日志的写入磁盘的动作称为组提交。

其中,dbms12可以位于数据库服务器中,比如,该数据库服务器具体可以为图2a或者图2b中所述的主节点或备节点,其中,主节点用于实现对数据的更新操作,备节点用于实现对数据的读取操作。dbms12也可以应用于图2c所示的协作节点或数据节点,其中,数据节点在新建事务时,向协作节点申请事务号以及redo日志锁,协作节点响应数据节点的请求,为数据节点分配事务号以及redo日志锁,并在保存的活动事务表中添加该新增事务的事务号。数据节点在提交事务时,协作节点在保存的活动事务表中删除该提交的事务。数据节点在进行组提交时,向协作节点申请redo日志锁,并在获得redo日志锁后,将提交的多个事务的redo日志写入磁盘。

下面以一主多备的集群数据库系统为例,介绍本发明实施例提供的同步活动事务表的方法。图3为该同步活动事务表的方法的流程示意图,包括:

步骤201、在备节点加入主节点所在的数据库集群后,主节点将自身当前的活动事务表发送给备节点。

步骤202、备节点保存该活动事务表。

步骤201~步骤202介绍备节点的活动事务表初始化的一种实现方式,需要说明的是,步骤201~步骤202是为了方案的完整性而做的介绍,而并不是为实现本发明实施例所必须的步骤。例如,在数据库集群初始化时,主节点上没有活动事务,主节点上的活动事务表为空表,主节点可以不向备节点发送自身的活动事务表。

步骤203、主节点在事务表增量日志缓冲区中记录上一次同步活动事务表之后的事务表增量日志。

活动事务表用于记录尚未提交的事务,事务表增量日志用于表示第一节点的活动事务表中所记录事务的变化,包括表示在活动事务表中新增事务的新增事务日志以及表示从活动事务表中删除事务的提交事务日志。新增事务日志可以包括表征事务状态类型为新增(或开启)的字段以及事务的事务号,提交事务日志可以包括表征事务状态类型为提交的字段以及事务的事务号。主节点在新增一个事务以及提交一个事务时,均会在事务表增量日志缓冲区中记录对应的事务表增量日志。

步骤204、在对提交事务日志所记录的事务进行组提交时,主节点向备节点发送事务表增量日志。

备节点的个数可以为1个或多个,主节点可以向多个备节点发送在主节点进行组提交时主节点的事务表增量日志。

步骤205、备节点根据接收的事务表增量日志,对本地保存的活动事务表进行更新。

备节点对活动事务表进行更新包括如下方式:

若事务表增量日志中包括提交事务a的日志,且备节点本地原保存的活动事务表中包括事务a,则确定事务a已提交,备节点将事务a从活动事务表中删除。若事务表增量日志中包括新增事务b的日志,且不包括提交事务b的日志,则确定事务b处于活动状态,备节点在活动事务表中加入事务b。若事务表增量日志中既包括新增事务c的日志,又包括提交事务c的日志,则确定事务c处于非活动状态,不在活动事务表中添加事务c。

上述技术方案中,在主节点向备节点发送事务表增量日志之前,备节点上的活动事务表与主节点上的活动事务表同步,其实现方式可以为前述步骤201~步骤202,也可以为在上一次组提交时,备节点根据主节点发送的事务表增量日志对活动事务表进行更新。因此,主节点向备节点发送组提交时的事务表增量日志,备节点可以根据该事务表增量日志将自身的活动事务表更新为与主节点的活动事务表一致。由于组提交时事务表增量日志的数量通常远小于主节点的活动事务表中活动事务的数量,所以,事务表增量日志的大小远小于整个活动事务表的大小,通过传输事务表增量日志实现活动事务表的同步,能够减小占用的传输资源,且能够减少传输耗时,减小活动事务表同步的延时。

作为一种可选的方式,在步骤204之后,还包括:

步骤206、主节点重置事务表增量日志缓冲区。

主节点在将事务表增量日志发送至备节点后,重置事务表增量日志缓冲区,使得事务表增量日志缓冲区在每次同步事务表之后被清空,进而使得事务表增量日志缓冲区中不存在组提交(不妨称为第一次组提交)之前记录的事务表增量日志,而是存储组提交之后新纪录的事务表增量日志,以便在下次组提交(不妨称为第二次组提交)时根据步骤204向备节点发送表征第一次组提交之后活动事务表变更的事务表增量日志,进而使得备节点能够根据该事务表增量日志对本地活动事务表更新,将备节点的活动事务表与主节点在第二次组提交时的活动事务表同步。因此,通过上述方案,在主节点的每次组提交后,主节点与数据库集群中其它节点之间始终能保持活动事务表的同步。

作为一种可选的方式,事务表增量日志缓冲区由重做redo日志锁保护,主节点在事务表增量日志缓冲区中写入新增事务日志的过程为:主节点获得redo日志锁,锁定redo日志缓冲区,在redo日志缓冲区中写入新建事务所产生的redo日志,并且,锁定事务表增量日志缓冲区,在事务表增量日志缓冲区中写入新增事务日志。

主节点在事务表增量日志缓冲区中写入提交事务日志的过程为:主节点获得redo日志锁,锁定redo日志缓冲区,在redo日志缓冲区中写入提交事务所产生的redo日志,并且,锁定事务表增量日志缓冲区,在事务表增量日志缓冲区中写入提交事务日志。

主节点在新增事务以及提交事务时,均需要持有redo日志锁,在redo日志缓冲区中分别写入redo日志。本申请上述技术方案中,将事务表增量日志缓冲区配置为由redo日志锁保护,主节点在针对新增事务获得redo日志锁并写入redo日志的过程中,还可以根据该redo日志锁一并在事务表增量日志缓冲区中写入新增事务日志,因此,主节点在事务表增量日志缓冲区中写入新增事务日志的过程没有产生额外的锁开销。同理,主节点在针对提交事务获得redo日志锁并写入redo日志的过程中,还可以根据该redo日志锁一并在事务表增量日志缓冲区中写入提交事务日志,主节点在事务表增量日志缓冲区中写入提交事务日志的过程也没有产生额外的锁开销。

因此,本申请提供的技术方案中,主节点记录事务表增量日志时利用已有的redo日志锁,不会产生额外的锁开销,能够有效缓减记录事务表增量日志时的锁权限抢夺,提高事务的吞吐量。

作为一种可选的方式,事务表增量日志缓冲区由重做redo日志锁保护时,主节点向至少一个备节点发送事务表增量日志的过程如下:

主节点申请redo日志锁,在获得redo日志锁后,锁定事务表增量日志缓冲区,将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区,然后,主节点向至少一个备节点发送无锁保护的缓冲区中事务表增量日志。

由于直接从事务表增量日志缓冲区中向备节点发送事务表增量日志的过程需要占用redo日志锁,为了减少对redo日志锁的占用,主节点先根据redo日志锁将事务表增量日志缓冲区中的事务表增量日志拷贝至内存中无锁保护的缓冲区,然后,将该无锁保护的缓冲区中的事务表增量日志发送至备节点,其中,从该无锁保护的缓冲区向备节点发送事务表增量日志的过程不占用redo日志锁。因此,通过上述方案可以有效减少发送事务表增量日志时的redo日志锁的占用,提高事务的吞吐量。

作为一种可选的方式,主节点在根据redo日志锁将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区之后,重置事务表增量日志缓冲区,使得主节点能够及时在事务表增量日志缓冲区中记录组提交之后新增事务的事务表增量日志以及提交事务的事务表增量日志,提高事务的吞吐量以及事务处理的效率。

作为一种可选的方式,主节点在根据redo日志锁将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区之后,可以释放redo日志锁,进而使得其他事务能够及时获得redo日志锁,提高事务的吞吐量。

作为一种可选的方式,参照图4a,在步骤204之前,还包括:

步骤207、主节点从事务表增量日志中删除针对同一事务所记录的新增事务日志以及提交事务日志。

以事务表增量日志缓冲区中既存在新增事务a的事务表增量日志又存在提交事务a的事务表增量日志为例,主节点在组提交之前新增事务a表明该事务a在上次组提交时尚未建立,因此备节点中的活动事务表中不存在事务a。主节点在组提交之前提交事务a表明事务a已经被提交,事务a不再是活动事务,不会出现在活动事务表中。因此,如果既存在新增事务a的事务表增量日志又存在提交事务a的事务表增量日志,则该事务a既不存在于备节点更新前的活动事务表之中,又不存在于备节点更新后的活动事务表之中,该事务a对备节点的活动事务表没有影响。

步骤207可以包括但不限于如下实施方式:

其一,主节点在组提交的任一时刻均可以在事务表增量日志缓冲区中检索针对同一事务所记录的新增事务日志以及提交事务日志,然后将其删除。

其二,主节点在组提交时,在从事务表增量日志缓冲区向备节点发送事务表增量日志之前,先检索针对同一事务所记录的新增事务日志以及提交事务日志,然后将其删除,然后向备节点发送上述删除操作之后的事务表增量日志。

其三,主节点在根据redo日志锁从事务表增量日志缓冲区向前面实施例提到的该无锁保护的缓冲区拷贝事务表增量日志之前,先检索针对同一事务所记录的新增事务日志以及提交事务日志,然后将其删除,然后向该无锁保护的缓冲区拷贝事务表增量日志。

其四,主节点在从该无锁保护的缓冲区向备节点发送事务表增量日志之前,先检索针对同一事务所记录的新增事务日志以及提交事务日志,然后将其删除,然后从该无锁保护的缓冲区向备节点发送上述删除操作之后的事务表增量日志。

上述技术方案中,主节点删除针对同一事务所记录的新增事务日志以及提交事务日志,不会对节点间活动事务表的同步造成影响,而且能够显著减少日志传输量,减少传输资源的消耗,缩短事务表同步的耗时。

作为另一种可选的方式,继续参照图4b,在步骤204之前,还包括:

步骤208、主节点判断事务表增量日志的总大小是否大于预设阈值。若大于,则执行步骤207,并在执行步骤207之后执行步骤204;若事务表增量日志的总大小不大于预设阈值,则执行步骤204。

由于主节点检索针对同一事务所记录的新增事务日志以及提交事务日志需要耗费时间,如果事务表增量日志的总大小本身不大于预设阈值,为一较小值,主节点可以不执行该检索工作,减少计算资源的消耗。反之,只有在该事务表增量日志的总大小大于预设阈值,为一较大值时,主节点才执行步骤207,删除针对同一事务所记录的新增事务日志以及提交事务日志,减少日志传输量。

需要说明的是,上述步骤201至步骤208所描述的方法也可以应用在图2c所示的多写的集群数据库系统中,在多写的集群数据库系统中,上述步骤201至步骤204、步骤206至步骤208由多写的集群数据库系统中的协作节点执行,上述步骤205由数据节点执行。

其中,步骤203执行过程为:数据节点在新建事务时,向协作节点申请事务号以及redo日志锁,协作节点在向数据节点分配事务号以及redo日志锁之后,在本地保存的全局活动事务表中添加该新增事务的事务号以及在事务表增量日志缓冲区中记录新建该事务的日志。数据节点在提交事务时,向协作节点申请redo日志锁,协作节点在向数据节点分配redo日志锁之后,在本地保存的全局活动事务表中删除该新增事务的事务号以及在事务表增量日志缓冲区中记录提交该事务的日志。

步骤204执行时过程为:数据节点在组提交时,向协作节点申请redo日志锁,协作节点在给数据节点分配redo日志锁之后,向所有数据节点发送事务表增量日志,以使数据节点根据事务表增量日志将本地保存的活动事务表与协作节点保存的全局活动事务表保持一致。

图2c所示的多写架构的集群数据库系统中,步骤205至步骤208的实现方式与图2a或图2b所示的主备架构的集群数据库系统中相一致,在此不再重复。

图5所示为本申请中事务表增量日志的结构的一种可能实现。事务表增量日志缓冲区中的多个事务表增量日志称为一组事务表增量日志,一组事务表增量日志包括元数据(metadata)以及1条或多条事务表增量日志。一组事务表增量日志的元数据包括日志头(logheader)以及基础事务号(basetranscationid)。其中,日志头可以占用1个字节,为一组事务表增量日志的编号;基础事务号可以占用8个字节,用于表征该组事务表增量日志中新增事务第一个事务号,例如,原事务表中事务地最大事务号为2119,则事务表增量日志中的基础事务号为2200。每一条事务表增量日志包括表征事务变化类型的记录头(recordheader)以及事务在事务表内的索引下标(arrayindex),例如,记录头字段可以占用1位,记录头“0”表征提交事务,记录头“1”表征新增事务,索引下标可以占用(7+8*n)位,n为数据库系统的最大并发事务数,索引下标表示事务距离事务表中第一个事务的偏移量。对于新增事务日志而言,还可以包括占用8*n位的事务号增量字段,事务号增量字段表示事务的事务号减去基础事务号的差值。

图6a为主节点新建事务以及提交事务时,主节点的活动事务表的变化,图中每个方框表示一个活动事务,框中的数字为活动事务的号码,其中图6a左侧所示为主节点的原活动事务表(或者为上一次同步活动事务表之后的活动事务表),图6a右侧为本次组提交时主节点的活动事务表,其中“0”表示该位置空缺,并通过斜纹表示事务表中发生变更的位置。

图6b所示为在两次同步活动事务表之间主节点记录的事务表增量日志。

图6c所示为对图6b所示的事务表增量日志进行步骤207所述的删除同一事物的新增事务日志以及提交事务日志之后形成的事务表增量日志,如将图6b中的新增事务2201的日志以及提交事务2201的日志删除。图6c所述的事务表增量日志采用图5所示的结构进行表示。

例如,对于图6a左侧所示活动事务表中的事务1805,不妨设其距离事务表的第一个事务1210的偏移量为196。结合图5所示的事务表增量日志的结构,图6c的各字段的含义如下:元数据字段:该组事务表增量日志的编号为2,基础事务号为2200。元数据字段之后的“0”“1”字段表示提交事务日志,提交的事务的偏移量为1,即可确定提交的事务为图6a左侧活动事务表中的事务1211。再之后的“1”“4”“+0”字段表示新增事务日志,新增事务在事务表中的位置为距离事务1210偏移量为4的位置,即图6a左侧活动事务表中第一行最后一个位置,新增事务的事务号为基础事务号2200加上0,即为2200。再之后的字段“1”“197”“+5”表示新增事务日志,新增事务在事务表中的位置为距离事务1210偏移量为197的位置,即图6a左侧活动事务表中事务1805之后的第一个位置,新增事务的事务号为基础事务号2200加上5,为2205。再之后的字段“0”“196”表示提交事务日志,提交的事务的偏移量为196,即可确定提交的事务为图6a左侧活动事务表中的事务1805。

图6d所示为主节点向数据库集群中的多个备节点发送图6c所示的事务表增量日志。

图6e所示为任一备节点根据图6c所示的事务表增量日志对备节点保存的活动事务表进行更新的示意图,其中,图6e左上角所示的备节点的原活动事务表与图6a左侧所示的主节点的原活动事务表一致,图6e右侧所示的备节点更新后的活动事务表也与图6a右侧所示的主节点在组提交时的活动事务表相一致。

可见,通过本发明实施例的上述技术方案,可以使得每次组提交后主节点与备节点的活动事务表同步。

图7所示为本申请提供的一种同步活动事务表的装置300,用于实现本申请前述实施例中种同步活动事务表的方法中主节点或协作节点的功能,装置300包括:

记录模块301,用于在事务表增量日志缓冲区中记录上一次同步活动事务表之后的事务表增量日志,事务表增量日志用于表示装置的活动事务表中所记录事务的变化,包括表示在活动事务表中新增事务的新增事务日志以及表示从活动事务表中删除事务的提交事务日志,活动事务表用于记录尚未提交的事务;

发送模块302,用于在对提交事务日志所记录的事务进行组提交时,向至少一个第二节点发送事务表增量日志,以使至少一个第二节点根据接收的事务表增量日志对至少一个第二节点保存的活动事务表进行更新。

作为一种可选的方式,事务表增量日志缓冲区由重做redo日志锁保护,记录模块301用于:获得redo日志锁,锁定事务表增量日志缓冲区,在事务表增量日志缓冲区中记录新增事务日志以及提交事务日志。

作为一种可选的方式,发送模块302用于:

获得redo日志锁,锁定事务表增量日志缓冲区,将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区,向至少一个第二节点发送无锁保护的缓冲区中事务表增量日志。

作为一种可选的方式,装置300还包括:

重置模块303,用于在发送模块将事务表增量日志缓冲区中的事务表增量日志拷贝至无锁保护的缓冲区之后,重置事务表增量日志缓冲区。

作为一种可选的方式,装置300还包括:

第一删除模块304,用于在发送模块向至少一个第二节点发送事务表增量日志之前,从事务表增量日志中删除针对同一事务所记录的新增事务日志以及提交事务日志。

作为一种可选的方式,装置300还包括:

第二删除模块305,用于在发送模块向至少一个第二节点发送事务表增量日志之前,判断事务表增量日志的总大小是否大于预设阈值;若事务表增量日志的总大小大于预设阈值,则从事务表增量日志中删除针对同一事务所记录的新增事务日志以及提交事务日志。

作为一种可选的方式,发送模块302还用于:在第二节点加入装置所在的数据库集群时,装置向第二节点发送装置的活动事务表。

本申请实施例中对装置300的模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

其中,集成的模块既可以采用硬件的形式实现时,如图8所示,同步活动事务表的装置400可以包括处理器401,上述记录模块301、重置模块303、第一删除模块304、第二删除模块305对应的实体的硬件可以为处理器401。处理器401,可以是一个中央处理模块(centralprocessingunit,简称cpu),或者为数字处理模块等等。同步活动事务表的装置400还可以包括通信接口402,上述发送模块302对应的实体的硬件可以为通信接口402,同步活动事务表的装置通过通信接口402向所在的数据库集群中的其他节点发送事务表增量日志。该同步活动事务表的装置400还包括:存储器403,用于存储处理器401执行的程序。存储器403可以是非易失性存储器,比如硬盘(harddiskdrive,hdd)或固态硬盘(solid-statedrive,ssd)等,还可以是易失性存储器(volatilememory),例如随机存取存储器(random-accessmemory,ram)。存储器403是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。

处理器401用于执行存储器403存储的程序代码,具体用于执行图3、图4a、图4b任一所示实施例所述的方法。可以参见图3、图4a、图4b所示实施例所述的方法,本申请在此不再赘述。

本申请实施例中不限定上述通信接口402、处理器401以及存储器403之间的具体连接介质。本申请实施例在图8中以存储器403、处理器401以及通信接口402之间通过总线404连接,总线在图8中以粗线表示,其它部件之间的连接方式,仅是进行示意性说明,并不引以为限。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图8中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。

本发明实施例还提供了一种计算机可读存储介质,用于存储为执行上述处理器401所需执行的计算机软件指令,其包含用于执行上述处理器所需执行的程序。

图9所示为本发明实施例提供一种同步活动事务表的装置500,用于实现本申请前述实施例中种同步活动事务表的方法中备节点或数据节点的功能,装置500包括:

接收模块501,用于接收第一节点发送的上一次同步活动事务表之后的事务表增量日志,事务表增量日志用于表示第一节点的活动事务表中所记录事务的变化,包括表示在活动事务表中新增事务的新增事务日志以及表示从活动事务表中删除事务的提交事务日志,活动事务表用于记录尚未提交的事务;

更新模块502,用于根据事务表增量日志对本地的活动事务表进行更新。

作为一种可选的方式,更新模块502具体用于:

若事务表增量日志中包括新增第一事务的日志且未包括提交第一事务的日志,则在活动事务表中新增第一事务;和/或

若活动事务表中包括第二事务且事务表增量日志中包括提交第二事务的日志,则从活动事务表中删除第二事务。

本申请实施例中对装置500的模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,另外,在本申请各个实施例中的各功能模块可以集成在一个处理器中,也可以是单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。

其中,集成的模块既可以采用硬件的形式实现时,同步活动事务表的装置可以包括处理器,上述更新模块502对应的实体的硬件可以为处理器。同步活动事务表的装置还可以包括通信接口,上述接收模块501对应的实体的硬件可以为通信接口,同步活动事务表的装置通过通信接口接收主节点或协作节点发送的事务表增量日志。该同步活动事务表的装置500还包括:存储器,用于存储处理器执行的程序。上述处理器、通信接口以及存储器的实现方式在图8所示的实施例中已有介绍,在此不再重复。

本发明实施例还提供了一种计算机可读存储介质,用于存储为执行上述处理器所需执行的计算机软件指令,其包含用于执行上述处理器所需执行的程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

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