CN104216955B - 一种操作数据及管理事务的方法、装置及分布式系统 - Google Patents

一种操作数据及管理事务的方法、装置及分布式系统 Download PDF

Info

Publication number
CN104216955B
CN104216955B CN201410412574.XA CN201410412574A CN104216955B CN 104216955 B CN104216955 B CN 104216955B CN 201410412574 A CN201410412574 A CN 201410412574A CN 104216955 B CN104216955 B CN 104216955B
Authority
CN
China
Prior art keywords
affairs
old version
database
version number
operational order
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410412574.XA
Other languages
English (en)
Other versions
CN104216955A (zh
Inventor
陈不骄
廖强
尹博学
杨林
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chongqing duxiaoman Youyang Technology Co.,Ltd.
Original Assignee
Beijing Baidu Netcom Science and Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Baidu Netcom Science and Technology Co Ltd filed Critical Beijing Baidu Netcom Science and Technology Co Ltd
Priority to CN201410412574.XA priority Critical patent/CN104216955B/zh
Publication of CN104216955A publication Critical patent/CN104216955A/zh
Application granted granted Critical
Publication of CN104216955B publication Critical patent/CN104216955B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/219Managing data history or versioning

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明的目的是提供一种操作数据及管理事务的方法、装置及分布式系统。其中,本发明包括一种在数据库中用于操作数据的方法和装置。本发明还包括一种在分布式数据库系统中用于管理事务的方法和装置,其中,所述分布式数据库系统包含多个数据库,所述数据库适于执行上述用于操作数据的方法。并且本发明还包括一种分布式数据库系统,其包括包含多个上述在数据库中用于操作数据的装置的数据库设备,以及包含上述用于管理分布式数据库系统中的事务的装置的设备。与现有技术相比,本发明可以根据历史版本号来获取数据的历史版本,从而为数据操作提供了更加灵活的方式,并保证分布式数据的一致性。

Description

一种操作数据及管理事务的方法、装置及分布式系统
技术领域
本发明涉及数据库领域,尤其涉及数据操作及事务管理的方法与装置以及分布式数据库系统。
背景技术
当前,在保证分布式数据一致性方面典型地可以使用基于XA协议的两阶段提交方法。然而,当使用XA协议时,为了保证分布式数据的一致性,通常需要将在数据库实例上所执行的事务的隔离级别设置为可串行化(Serializable)级别。然而,可串行化隔离级别将会导致读、写操作相互阻塞,从而严重影响系统性能。现有技术中,在单机数据库或数据库集群中可以使用例如多版本并发控制MVCC(Multi Version Concurrency Control)来使系统运行在例如可重复读(Read Repeatable)隔离级别,并提供数据一致性保证。使用MVCC,系统性能得以提升,然而,将XA协议与MVCC技术相结合应用于分布式数据库系统时,对于一些特定的场景,例如全局事务仅在某些数据库实例上提交成功时,仍然存在一致性问题。
对于分布式数据一致性的另一种解决方案是在是应用层来进行保证,然而对于已有的应用层系统,通过改写代码以增加保证数据一致性支持的逻辑,代价很大。
因此,如何保证分布式数据的一致性是一个需要解决的问题。
发明内容
本发明的目的是提供一种在数据库中用于操作数据的方法和装置,以及一种在分布式数据库系统中用于管理事务的方法和装置,以及一种分布式数据存储与操作系统。
根据本发明的一个方面,提供一种在数据库中用于操作数据的方法,其中,该方法包括:
-获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号;
-根据所述查询操作命令执行所述查询操作,以获取所述数据库中的相关数据的相应的历史版本。
根据本发明的另一个方面,提供一种在分布式数据库系统中用于管理事务的方法,其中,所述分布式数据库系统包含多个数据库,所述数据库适于执行本发明一个上述方面的在数据库中用于操作数据的方法,所述用于管理事务的方法包括:
-获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令;
-根据该分布式数据库系统中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作所要使用的历史版本号;
-根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号;
-将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行。
根据本发明的又一个方面,提供一种在数据库设备中用于操作数据的装置,其包括:
-用于获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号的装置;
-用于根据所述查询操作命令执行所述查询操作,以获取所述数据库中的相关数据的相应的历史版本的装置。
根据本发明的还一个方面,提供一种在分布式数据库系统中用于管理事务的装置,其中,所述分布式数据库系统包含多个数据库,所述数据库适于执行本发明的一个上述方面的一种在数据库中用于操作数据的方法中所述的任一项所述的方法,所述用于管理分布式数据库系统中的事务的装置包括:
-用于获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令的装置;
-用于根据该分布式数据库系统中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作命令所要使用的历史版本号的装置;
-用于根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置;
-用于将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行的装置。
根据本发明的再一个方面,提供一种分布式数据库系统,其包括包含多个本发明的一个上述方面的在数据库设备中用于操作数据的装置的数据库设备,以及包含本发明的一个上述方面所述的在分布式数据库系统中用于管理事务的装置的设备。
与现有技术相比,依据本发明的数据库支持根据历史版本号来获取数据的历史版本,从而为数据操作提供了更加灵活的方式。尤其当数据的最新版本存在一致性问题时,依据本发明能够获取并操作数据的历史版本,以保证数据的一致性以及事务的正确处理。并且,依据本发明,可以根据事务的相关信息及操作状态,确定正在分布式数据库系统中运行的事务的操作中应包含的历史版本号,以操作对应于该历史版本号的历史数据。依据本发明的分布式数据库系统使用上述数据操作和事务处理的方法,从而当例如全局事务仅在某些数据库实例上提交成功从而造成分布式数据一致性问题时,仍能够获取和操作数据的历史版本以保证数据的一致性,从而保证事务的正确处理。因此,本发明提供了更加灵活的数据操作方式,并提供了对数据一致性问题的解决方案。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1示出根据本发明一个方面的实施例的用于在数据库中操作数据的方法的流程图;
图2示出根据本发明另一个方面的实施例的在分布式数据库系统中用于管理事务的方法的流程图;
图3示出根据本发明再一个方面的在数据库设备中用于操作数据的装置的示意图;
图4示出根据本发明还一个方面的在分布式数据存储和查询系统中用于事务处理的装置的示意图;
图5示出根据本发明又一个方面的分布式数据存储和查询系统的示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本发明作进一步详细描述。
在本文中,数据库是指按照数据结构来组织、存储和管理数据的仓库,典型地,其可以为关系数据库。数据库可以运行在单独的设备或共享的设备上。为简明起见,在下文中,如非另有说明,数据库将为关系数据库。本领域技术人员应能理解,其他的数据库类型如同样适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
一般地,数据库可以通过特定的接口或网络与客户端通信,从而客户端可以向数据库发送操作命令,并且从数据库接收操作命令的执行结果。此处客户端泛指可以与数据库进行上述交互的各种方式,其包括但不限于用户客户端、应用层、分布式数据库系统中用于管理事务的模块等。本领域技术人员应理解,此处,上述所列举的客户端仅为示例性而非限定性描述,存在各种其他的客户端而不背离本发明的精神或范畴,并以引用的方式包含于此。
此外,数据库可以指独立数据库,也可以指分布式数据库系统中的数据库实例。此处,分布式数据库系统指由分布在不同设备上的多个数据库通过网络连接所构成系统,其在逻辑上是统一的整体。
事务是指作为单个逻辑工作单元来执行的一系列操作,其具有原子性,也即事务或是完整地执行,或是完全不执行。通过将一组相关的操作组合成事务,可以确保除非事务中的所有操作都成功完成,并且事务被成功提交,否则该事务所涉及的数据更新(包括增加、删除、更改等)均将被回滚。
在数据库中,为支持多个事务的并发操作,可以为事务定义不同的隔离级别并使用不同的并发机制。其中,多版本并发控制(Multi-Version Concurrency Control,MVCC)维持数据的多个版本,以较小的开销实现并发控制,其允许非阻塞式读,并在写操作时只锁定必要的记录。为简明起见,在本文的实施例中,当涉及事务的并发控制时,将使用MVCC机制。本领域技术人员应理解,其他的事务并发控制方式如同样适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。并且在本文中,数据的历史版本是指存储在数据库中的数据由于被多个事务先后操作所生成的具有先后顺序的各个版本的数据。历史版本号是指由数据库所分配的指示数据的历史版本的编号。当数据库使用MVCC机制时,其可以为MVCC中所使用的数据的版本号。此外,对于某事务TXn,其所对应的历史版本号是指,该历史版本号所指示的该历史版本的数据为已经完成提交(对于分布式数据库系统来说,已经完成全局提交)的事务所引起的,并且对于该事务TXn为最新并且具有一致性的数据。并且,优选地,为每个事务,分布式数据库系统可以确定对于每个数据库实例,该事务所分别对应的历史版本号。从而,对于分布式数据库系统,该事务所对应的历史版本号可以为一个列表,其包括针对各个数据库实例,该事务所对应的各个历史版本号。为简明起见,在下文中,除非另有说明,我们将以对于各个数据库实例,事务所对应的历史版本号相同来进行举例说明。本领域技术人员应理解,对于不同的数据库实例,事务所对应的历史版本号可以不相同。并且,为简明起见,在本文中,除非另有说明,我们将以事务的事务号来指代该事务所对应的历史版本号。此外,本领域技术人员还应理解,历史版本号不仅限于上述MVCC中所使用的数据版本号或事务号,历史版本号可以为任意能够指示数据由于被各个事务所操作所生成历史版本的编号的整数、字符串或其他数据类型或数据结构。
在分布式数据库系统中,事务可以是指针对该分布式数据库系统的全局事务,也可以指仅针对该分布式数据库系统中的某一个数据库的本地事务。对于全局事务,其提交和回滚在所有数据库中必须产生统一的结果,也即或是在所有数据库中均全部提交,或是所有数据库中均全部回滚。在分布式事务处理中,可以采用XA规范来保证分布式数据的一致性。XA规范的基础是两阶段提交协议,其中,在第一阶段,所有数据库进行提交准备。在第二阶段,当收到所有数据库的提交准备就绪的应答后,所有数据库正式提交该事务。并且,当某个数据库提交失败时,所有数据库回滚该事务。
为简明起见,在下文中,当涉及分布式数据库系统的分布式事务处理时,如非另有说明,该分布式事务处理方式将符合XA规范。本领域技术人员应理解,其他的分布式事务处理方式如同样适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
然而,尽管使用了例如XA规范来保证分布式数据的一致性,但在某些情况下仍然可能出现分布式数据的一致性问题。例如,使用XA规范进行某个全局事务TX1的两阶段提交,假定在第一阶段,所有数据库均做好提交准备并发送了同意提交的应答。接着,在第二阶段,各个数据库,假定为数据库DB1,DB2,和DB3进行正式提交。然而,虽然DB1及DB2提交成功,DB3遭遇问题无法提交成功。此时,由于该分布式数据库系统可能仍在等待DB3对该事务的提交结果,该等待尚未超时,从而尚未发现DB3提交事务TX1时已出现问题。此时,DB1及DB2继续处理正在运行的另一个事务TX2,TX2恰好需要操作被事务TX1所修改的数据。此时,在DB1及DB2中,TX2将读取到TX1的修改。然而,当分布式数据库系统发现DB3未能正常提交TX1时,将在所有数据库上回滚TX1事务,因此,TX2所读取到的由TX1所做的修改实质上为无效的数据,从而导致问题。
由此可知,使用现有技术,分布式数据的一致性仍存在问题。
应注意,上述说明旨在帮助读者理解本发明下文的内容,其并不意在限制本发明目的仅为解决分布式数据的一致性,也并不意在限制本发明所使用的任何具体场景或保护范围。本发明保护范围应由所附权利要求而非上述说明限定。
此外,在本文中,设备包括但不限于网络设备、用户设备、或网络设备与用户设备直接或通过网络相集成所构成的设备。其中,所述网络设备包括但不限于计算机、网络主机、单个网络服务器、多个网络服务器集或多个服务器构成的云;在此,云由基于云计算(Cloud Computing)的大量计算机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个虚拟超级计算机。所述网络包括但不限于互联网、广域网、城域网、局域网、VPN网络、无线自组织网络(Ad Hoc网络)等。并且,其中,所述用户设备包括但不限于任何一种可与用户通过键盘、鼠标、遥控器、触摸板、或手写设备等方式进行人机交互的电子产品,例如计算机、手机、PDA、掌上电脑PPC等。本领域技术人员应能理解,其他的设备如同样适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
图1示出根据本发明一个方面的实施例的在数据库中用于操作数据的方法的流程图。
在下文中,将以数据库DB1中的数据库表employee为例来进行说明。该employee表具有两列“employee_ID”以及“employee_name”,并且为方便理解,我们将指示由各个第一事务所更改数据的版本的各个历史版本号(如上所述,为简明起见,该历史版本号为引起所述更改的事务的事务号)也在下表中列出:
表1
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
3 1 张翼德
1 2 李四
2 2 李白
3 2 李太白
以下将结合表1进行说明。在步骤S11中,数据库获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号。例如,数据库可以直接或通过网络来从客户端获取客户端所发出的正在运行的第一事务中的查询操作命令。例如,客户端开始第一事务TX1,并发出查询操作命令“select employee_namefrom employee where employee_ID=’1’with version=’2’”。则数据库获取到该正在运行的第一事务TX1所包含的查询操作命令,并且该查询操作命令包含历史版本号,也即“version=’2’”。
接着,数据库根据所述查询操作命令执行所述查询操作,以获取所述数据库中的相关数据的相应的历史版本。接上例,数据库所获取的查询操作命令为“select employee_name from employee where employee_ID=’1’with version=’2’”。从上述表1可知,当employee_ID=1时,当历史版本号为1时,employee_name为“张三”;而当历史版本号为2时,则employee_name为“张飞”;而当历史版本号为3时,则employee_name为“张翼德”。此处,从查询操作命令中可知该查询语句中包含的历史版本号为2,则数据库执行该查询操作并且将获取有关数据的历史版本号为2的版本,从而得到employee_name为“张飞”。
在一个实施例中,数据库基于所述第一事务提交操作命令,执行第一事务提交操作并提供相应的返回结果,所述返回结果中包含该第一事务所对应的历史版本号。
例如,对于运行中的第一事务4(记作TX4),客户端在进行了各个数据库数据操作,例如“update employee where employee_id=1value=’张益德’”之后,客户端发出事务提交操作命令“commit”,则数据库执行事务提交操作以提交TX4。并且,数据库向客户端提供该事务提交操作的返回结果,并且该返回结果中可以包含TX4所对应的历史版本号4。此时,数据库表employee被更新为如下:
表2
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
3 1 张翼德
4 1 张益德
1 2 李四
2 2 李白
3 2 李太白
再一次,如上所述,历史版本号是指数据的历史版本的编号,在本文中,为简明起见,以事务号作为历史版本号。
本领域技术人员应理解,此处,上述数据库、数据库表、数据库操作命令、历史版本号等仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
在一个优选实施例中,所述数据库(记做DB1),包括主数据库(DB1_M)及一个或多个从数据库(DB1_S1,…,DB1_Sn),所述主数据库维护数据的最新版本,并且所述主数据库中的数据可以被同步到所述从数据库中。
在一个实施例中,数据库在完成第一事务提交准备操作后,将所述第一事务的相关信息记入日志。具体地,事务的相关信息可以包括例如第一事务号,第一事务中所包含的语句等信息中的一项或多项。例如,接上例,对于TX1,当DB1完成提交准备操作后,可以将TX1的相关信息记入日志,其包括该第一事务号TX1,该第一事务中所包含的语句,如“update employee where employee_id=1value=’张益德’”。本领域技术人员应理解,此处,对于第一事务的相关信息的描述仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
然后,数据库进行提交操作,并且当提交操作未能成功时,例如,主数据库出现故障从而导致提交操作的失败,数据库执行以下任一操作:
-在主数据库上回滚所述第一事务并根据所述日志中所记录的所述第一事务的相关信息执行所述第一事务中所包含的操作并重新提交所述第一事务;
-根据所述日志中所记录的所述第一事务的相关信息在所述一个或多个从数据库中的一个从数据库上执行所述第一事务中所包含的操作重新并提交所述第一事务。
具体地,数据库可以根据例如主数据库从故障中恢复的情况以及耗时,来确定采取上述操作中的哪一种。本领域技术人员应理解,此处,数据库确定采取哪种操作的方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
例如,当主数据库快速恢复时,则数据库可以在主数据库上回滚该第一事务,并且根据所述日志中所记录的该第一事务的相关信息重新提交该第一事务。在本例中,假定数据库确定需要回滚的第一事务为TX1。从而数据库在主数据库上回滚该第一事务TX1,然后根据所述日记,得到该第一事务TX1中所包含的语句为“update employee whereemployee_id=1value=’张益德’”。随后,数据库在该主数据库上重新执行该语句,并重新提交该TX1。
又如,当主数据库不能快速恢复时,数据库可以从一个或多个从数据库中根据例如预先设定的优先级等选择一个从数据库作为新的主数据库,并根据所述日志中所记录的所述第一事务的相关信息在所述一个或多个从数据库中的一个从数据库上执行所述第一事务中所包含的操作重新并提交所述第一事务。例如,数据库选择一个从数据库DB1_S1作为新的主数据库,并在DB1_S1上执行该TX1所包含的语句“update employee whereemployee_id=1value=’张益德’”,并在DB1_S1上重新提交该TX1。本领域技术人员应理解,此处所描述的在从数据库中选择一个作为新的主数据库的方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
在又一个优选实施例中,数据库可以根据指定的历史版本号,清理所述数据库中的历史数据。例如,可以指定历史版本号为3,则数据库可以根据该历史版本号,清理数据库中的历史数据,例如,清理版本号不大于3的,并且不是该数据的最新版本的历史数据。对于上述employee表,当指定历史版本号为3,并进行清理完成后,该employee表中的内容为:
表3
历史版本号 employee_ID employee_name
4 1 张益德
3 2 李太白
图2示出根据本发明另一个方面的实施例的用于分布式数据库系统(记作DDBS)的事务处理的方法的流程图,其中,所述分布式数据库系统由多个数据库构成,所述数据库支持上文中所述的各种方法中的任意一种或多种。
在下面的说明中,假定该分布式数据库系统(记作DDBS)包括两个数据库实例(记作DB1,DB2),其中DB1中包括表employee,其具有列“employee_ID”以及“employee_name”;DB2中包括表employer,其具有列“employer_ID”,“employee_name”,“employee_ID”。
DB1中的数据库表employee如下:
表4
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
1 2 李四
2 2 李白
DB2中的数据库表employer如下:
表5
具体地,在步骤S21中,分布式数据库系统获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令。所述第二事务指正在运行的该分布式数据库系统中的全局事务。在第二事务运行过程中,客户端可以通过分布式数据库系统的相应的接口发出针对该分布式数据库系统的第一操作命令。分布式数据库系统通过相应的接口可以获取客户端所发出的第一操作命令。例如,在一个实例中,用户3在分布式数据库系统中运行第二事务3(记作TX3),DDBS获取到该正在运行的TX3中所包含的对于该DDBS的第一操作命令为“select employee_name,employer_name from employee,employer whereemployer.employee_id=employee.employee_id”。
接着,在步骤S22中,DDBS根据该DDBS中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作所要使用的历史版本号。
各个第二事务的相关信息可以为例如第二事务号,第二事务中所包含的语句等一项或多项。第二事务的操作状态信息是指对第二事务所进行的操作的状态信息,例如“运行中”,“提交准备完成”,“提交中”,“提交完成”等。第二事务所对应的历史版本号是指由DDBS中的各个数据库为各个第二事务所分配的与该事务相对应的历史版本号。在本文中,为简明起见,以第二事务的事务号作为与其相对应的历史版本号。当第二事务在DDBS中的各个数据库提交后,与该第二事务所对应的该历史版本号可以包含在各个数据库的提交操作结果的返回结果中。应注意,各个数据库所分配/返回的该历史版本号可能互不相同,因此与第二事务所对应的历史版本号可以为一个或多个。为简明起见,在下文中,除非另有说明,对于某个第二事务,各个数据库所分配/所返回的该历史版本号相同,并等于该第二事务号。本领域技术人员应理解,此处所描述的确定第二事务的相关的历史版本号的方式以及历史版本号的表示方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
DDBS根据各个第二事务的相关信息,可以获取到各个第二事务的事务号。并且DDBS根据各个第二事务的操作状态信息,可以获知该第二事务处于哪种操作运行状态,例如“运行中”,“提交准备完成”,“提交中”,“提交完成”等。并且,DDBS可以通过与各数据库进行交互,或查询所存储的各数据库在事务提交操作的返回结果中所包含的与该事务对应的历史版本号来获取与各个第二事务所对应的各历史版本号。应注意,对于该分布式数据库系统中的各数据库,DDBS将分别获取针对该数据库的,与各个第二事务所对应的各历史版本号。在实现中,一个第二事务TXn可能仅涉及该分布式数据库系统中的某些数据库,则对于该第二事务并未涉及的数据库,例如DBm,该第二事务所对应的历史版本号为假定该第二事务需要访问该DBm,该历史版本号所指示的该历史版本的数据为已经完成全局提交的事务所引起的,并且对于该事务TXn为最新并且具有一致性的数据。
然后,针对该分布式数据库系统中的各个数据库,DDBS将在所述第二事务开始之前已完成全局提交的各个第二事务中的提交时间最晚的第二事务所对应的针对该数据库的历史版本号确定为针对该数据库的,所述第一操作所要使用的历史版本号。并且,应注意,针对各个数据库,所述第一操作所要使用的历史版本号可能不相同。为了简明起见,除非另有说明,我们将以针对各个数据库,所述第一操作所要使用的历史版本号相同来进行说明。本领域技术人员应理解,此处所描述的确定第二事务的相关信息、操作状态信息仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
接上例,假定该DDBS中的第二事务包括正在运行的TX3,其第一操作命令为“select employee_name,employer_name from employee,employer whereemployer.employee_id=employee.employee_id”。并且该DDBS中还包括操作状态为“提交完成”的第二事务1(记作TX1),和操作状态为“提交中”的第二事务2(记作TX2)。其中TX1所对应的历史版本号为1,并且TX2所对应的历史版本号为2。并且其中,TX2比TX1提交时间更晚。则在TX3之前已完成提交的各个第二事务中的提交时间最晚的第二事务为TX1,则对于该分布式系统中的各个数据库,DDBMS将该TX1所对应的历史版本号作为针对该数据库的,所述第一操作要使用的历史版本号。此处,为简明起见,假定对于各个数据库,该TX1所对应的历史版本号均为1。
接着,在步骤S23中,DDBS根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号。
接上例,DDBS将根据上述第一操作命令“select employee_name,employer_namefrom employee,employer where employer.employee_id=employee.employee_id”,以及上述历史版本号“1”来生成一个或多个第二操作命令。例如,DDBS可以将上述命令进行分解,以生成所述第二事务的一个或多个第二操作命令。其中在一个实例中,DDBS可以按照每个第二操作命令仅涉及一个数据库表的原则来生成第二操作命令。例如,其将上述第一操作命令分解为针对employee表的查询的第二操作命令1“select employer_ID,employee_name from employee with version=’1’into employee_temp”,以及针对employer表的查询的第二操作命令2“select employer_ID,employer_name from employer withversion=’1’into employer_temp”,以及针对上述查询结果所产生的新表employee_temp和employer_temp的查询的第二操作命令3“select employee_name,employer name fromemployee_temp,employer_temp where employee_temp.employer_ID=employer_temp.employer_ID”。应注意,虽然在本实例中,第二操作命令1和第二操作命令2中所包含的历史版本号均为1,应理解,如上所述,各个第二操作命令中所包含的历史版本号分别为针对该操作命令所涉及的数据库的该第二事务所对应的历史版本号,其可以互不相同。
接着在步骤S24中,将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行根据上述查询。例如,在一个实现中,可以将该一个或多个第二操作命令发送至该分布式数据库系统中的所有数据库来执行。
在本例中,上述各个第二操作命令在执行完成后将得到如下表所示的查询结果:
表6
employee_name employer_name
张三 刘备
李四 李隆基
对于所述第一查询操作命令“select employee_name,employer_name fromemployee,employer where employer.employee_id=employee.employee_id”,按照现有技术的方法所得到的查询结果为,
表7
employee_name employer_name
张飞 刘备
李白 李隆基
然而,由于TX2的操作状态为“提交中”,也即其尚未在所有数据库中提交成功。其中,假定该TX2在DB1中已提交成功,其将原数据库表中的记录(employee_ID=1,employee_name=’张三’)更新为(employee_ID=1,employee_name=’张飞’),并将记录(employee_ID=2,employee_name=’李四’)更新为(employee_ID=2,employee_name=’李白’)。但由于该TX2在DB2中尚未提交成功,例如DB2发生了故障,从而不能完成该提交操作。这最终将导致DDBS对该TX2进行回滚,并且其中,上述DB1中的记录更新也将被回滚并不应为其他事务所用。因此,上述按照常规方法所得到的查询结果中的记录(employee_name=’张飞’,employer_name=‘刘备’),以及(employee_name=’李白’,employer_name=‘李隆基’)包含的是错误的数据。而上述按照本发明的方法所得到的查询结果中包含的记录为,(employee_name=’张三’,employer_name=‘刘备’),以及(employee_name=’李四’,employer_name=‘李隆基’),其为正确的数据。
在另一个实例中,假定TX1和TX2的操作状态信息均为“提交成功”。由于TX2所提交的时间晚于TX1,则DDBS将TX2相关的历史版本号“2”确定为该第一操作所要使用的历史版本号。按照上文所述的方法,DDBS生成包含历史版本号“2”的第二操作命令,然后将所述第二操作命令发送至数据库。所述第二操作命令被执行之后,得到如下查询结果,其包含了TX1和TX2所导致的更新。
表8
employee_name employer_name
张飞 刘备
李白 李隆基
在一个优选实施例中,可以根据该分布式数据库系统的配置信息来确定其中所述第一操作需要发送至的所述多个数据库中的一个或多个数据库;然后根据上述第一操作命令以及上述历史版本号,并根据上述其中所述第一操作命令需要发送至的所述多个数据库中的一个或多个数据库,生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号。
DDBS可以根据其配置信息来确定所述第一操作命令所涉及的一个或多个表所位于的一个或多个数据库,并将其作为所述第一操作命令需要发送至的一个或多个数据库。接上例,DDBS可以得知该第一操作命令所涉及的employee表位于DB1中,employer表位于DB2中,从而确定该第一操作命令需要发送至DB1以及DB2。DDBS并按照每个第二操作命令仅涉及一个数据库中的一个或多个表的原则来生成第二操作命令命令。此时,其所生成的第二操作命令为针对DB1中的employee表的查询的第二操作命令1“select employer_ID,employee_name from employee with version=’1’into employee_temp”,其将被发送至DB1来执行;以及针对DB2中的employer表的查询的第二查询操作命令2“select employer_ID,employer_name from employer with version=’1’into employer_temp”,其将被发送至DB2来执行;以及针对上述查询结果所产生的新表employee_temp和employer_temp的查询的第二查询操作命令3“select employee_name,employer name from employee_temp,employer_temp where employee_temp.employer_ID=employer_temp.employer_ID”,其可以由DDBS的相应模块来执行而不必再发送至任何数据库来执行。
在另一个实例中,当employee表和employer表均位于例如DB1上时,则DDBS确定该第一操作命令需要发送至的数据库为DB1,所生成的第二操作命令可以为“selectemployee_name,employer_name from employee,employer where employer.employee_id=employee.employee_id with version=’2’”,该第二操作命令将被发送至DB1来被执行。
在一个实施例中,DDBS接收所述第二操作命令的返回结果,并且当所述返回结果中包含相应的历史版本号时,记录所述第二事务与所述历史版本号的对应关系。
接上例,DDBS将所述一个或多个第二操作命令发送至一个或多个数据库,例如将“select employer_ID,employee_name from employee with version=’1’intoemployee_temp”发送至DB1来执行,并从DB1接收该命令的返回结果,其为:
表9
employee_ID employee_name
1 张三
2 李四
当第二操作命令为事务提交命令时,DDBS从数据库所接收的返回结果中可以包括历史版本号。例如,该TX3的第二操作命令为“commit”并被发送至DB1,从而DDBS可以从DB1接收到该提交命令的返回结果,其中包括的历史版本号为例如“3”。该历史版本号为数据库为该第二事务所分配的一个号码,数据库可以根据该号码获取到执行该第二事务中的操作后所对应的数据库中的数据的版本。
接着,当所述返回结果中包含历史版本号时,DDBS记录所述第二事务与所述历史版本号的对应关系。也即,接上例,DDBS将记录该TX3所对应的历史版本号为3。
再一次,尽管为描述简明起见,在上述描述中以事务号作为历史版本号,历史版本号可以为任意能够指示数据的历史版本的编号的整数、字符串或其他数据类型或数据结构。
在一个实施例中,DDBS对所述第二操作的返回结果进行合并处理,并将合并后的结果发送给客户端。例如,当employee表中的部分数据,例如记录(employee_ID=1,employee_name=’张三’),位于DB1;而另一部分数据,例如(employee_ID=2,employee_name=’李四’),位于DB2时,当第二操作命令为查询操作命令“select employer_ID,employee_name from employee”,其可以被发送至DB1以及DB2来自执行。然后DDBS对DB1和DB2所返回的结果进行合并从而得到如下表所示的结果:
表10
employee_ID employee_name
1 张三
2 李四
然后,DDBS将上述合并后的结果返回给客户端。
在一个实施例中,当所述第二操作命令的返回结果中包含历史版本号时,DDBS还可以将所述历史版本号从所述返回结果中去除。例如,当如上文所述,在如“commit”命令的返回结果中包含了历史版本号如“3”时,则将该历史版本号去除,然后再将去除了历史版本号的返回结果提供至客户端。
在又一个实施例中,当第二事务的执行时间超过预定阈值时,DDBS还可以回滚所述第二事务。在一个实施例中,DDBS可以监测第二事务的执行时间,并将其与预定阈值比较。其中该预定阈值可以按照如经验值来进行设置,并可以根据需要来动态调整。当第二事务的执行时间超过预定阈值时,DDBS回滚该第二事务。按照此种方法,DDBS可以回滚由例如死锁等原因所造成的事务,从而解除死锁。
图3示出根据本发明另一个方面的实施例的在数据库设备中用于操作数据的装置的示意图。
在下文中,将以数据库DB1中的数据库表employee为例来进行说明。该employee表具有两列“employee_ID”以及“employee_name”,并且为方便理解,我们将指示由各个第一事务所更改数据的版本的各个历史版本号(如上所述,该历史版本号为引起所述更改的事务的事务号)也在下表中列出:
表1
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
3 1 张翼德
1 2 李四
2 2 李白
3 2 李太白
以下将结合表1进行说明。首先,用于获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号的装置,以下简称为操作获取装置31,库获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号。例如,操作获取装置31可以直接或通过网络来从客户端获取客户端所发出的正在运行的第一事务中的查询操作命令。例如,客户端开始第一事务TX1,并发出查询操作命令“select employee_name from employee whereemployee_ID=’1’with version=’2’”。则操作获取装置31获取到该正在运行的第一事务TX1所包含的查询操作命令,并且该查询操作命令包含历史版本号,也即“version=’2’”。
接着,用于根据所述查询操作命令执行所述查询操作,以获取所述数据库中的相关数据的相应的历史版本的装置,以下简称为数据获取装置32,根据所述查询操作命令执行所述查询操作,以获取所述数据库中的相关数据的相应的历史版本。接上例,操作获取装置31所获取的查询操作命令为“select employee_name from employee where employee_ID=’1’with version=’2’”。从上述表1可知,当employee_ID=1时,并且历史版本号为1时,employee_name为“张三”;而当历史版本号为2时,则employee_name为“张飞”;而当历史版本号为3时,则employee_name为“张翼德”。此处,从查询操作命令中可知该查询语句中包含的历史版本号为2,则数据获取装置32执行该查询操作并且将获取有关数据的历史版本号为2的版本,从而得到employee_name为“张飞”。
在一个实施例中,用于基于所述第一事务提交操作命令,执行第一事务提交操作并提供相应的返回结果,所述返回结果中包含该第一事务所对应的历史版本号的装置,以下简称结果返回装置33(未示出),基于所述第一事务提交操作命令,执行第一事务提交操作并提供相应的返回结果,所述返回结果中包含该第一事务所对应的历史版本号。
例如,对于运行中的第一事务4(记作TX4),客户端在进行了各个数据库数据操作,例如“update employee where employee_id=1value=’张益德’”之后,客户端发出事务提交操作命令“commit”,则数据库执行事务提交操作以提交TX4。并且,结果返回装置33向客户端提供该事务提交操作的返回结果,并且该返回结果中可以包含TX4所对应的历史版本号4。此时,数据库表employee被更新为如下:
表2
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
3 1 张翼德
4 1 张益德
1 2 李四
2 2 李白
3 2 李太白
再一次,如上所述,历史版本号是指数据的历史版本的编号,在本文中,为简明起见,以事务号作为历史版本号。
本领域技术人员应理解,此处,上述数据库、数据库表、数据库操作命令、历史版本号等仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
在一个优选实施例中,所述数据库(记做DB1),包括主数据库(DB1_M)及一个或多个从数据库(DB1_S1,…,DB1_Sn),所述主数据库维护数据的最新版本,并且所述主数据库中的数据可以被同步到所述从数据库中。
在一个实施例中,用于在完成第一事务提交准备操作后,将所述第一事务的相关信息记入日志的装置,以下简称日志记录装置34(未示出),在数据库完成第一事务提交准备操作后,将所述第一事务的相关信息记入日志。具体地,事务的相关信息可以包括例如第一事务号,第一事务中所包含的语句等信息中的一项或多项。例如,接上例,对于TX1,当DB1完成提交准备操作后,日志记录装置34可以将TX1的相关信息记入日志,其包括该第一事务号TX1,该第一事务中所包含的语句,如“update employee where employee_id=1value=’张益德’”。本领域技术人员应理解,此处,对于第一事务的相关信息的描述仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
然后,数据库进行提交操作,并且当提交操作未能成功时,例如,主数据库出现故障从而导致提交操作的失败,用于对于应提交但主数据库未能完成提交操作的第一事务,执行以下任一操作的装置,以下简称事务恢复装置35(未示出),执行以下任一操作:
-在主数据库上回滚所述第一事务并根据所述日志中所记录的所述第一事务的相关信息执行所述第一事务中所包含的操作并重新提交所述第一事务;
-根据所述日志中所记录的所述第一事务的相关信息在所述一个或多个从数据库中的一个从数据库上执行所述第一事务中所包含的操作重新并提交所述第一事务。
具体地,事务恢复装置35可以根据例如主数据库从故障中恢复的情况以及耗时,来确定采取上述操作中的哪一种。本领域技术人员应理解,此处,事务恢复装置35确定采取哪种操作的方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
例如,当主数据库快速恢复时,则事务恢复装置35可以在主数据库上回滚该第一事务,并且根据所述日志中所记录的该第一事务的相关信息重新提交该第一事务。在本例中,假定事务恢复装置35确定需要回滚的第一事务为TX1。从而事务恢复装置35在主数据库上回滚该第一事务TX1,然后根据所述日记,得到该第一事务TX1中所包含的语句为“updateemployee where employee_id=1value=’张益德’”。随后,事务恢复装置35在该主数据库上重新执行该语句,并重新提交该TX1。
又如,当主数据库不能快速恢复时,事务恢复装置35可以从一个或多个从数据库中根据例如预先设定的优先级等选择一个从数据库作为新的主数据库,并根据所述日志中所记录的所述第一事务的相关信息在所述一个或多个从数据库中的一个从数据库上执行所述第一事务中所包含的操作重新并提交所述第一事务。例如,事务恢复装置35选择一个从数据库DB1_S1作为新的主数据库,并在DB1_S1上执行该TX1所包含的语句“updateemployee where employee_id=1value=’张益德’”,并在DB1_S1上重新提交该TX1。本领域技术人员应理解,此处所描述的在从数据库中选择一个作为新的主数据库的方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
在又一个优选实施例中,用于根据指定的历史版本号,清理所述数据库中的与所述第一事务有关的历史数据的装置,以下简称历史数据清理装置36(未示出),可以根据指定的历史版本号,清理所述数据库中的历史数据。例如,可以指定历史版本号为3,则历史数据清理装置36可以根据该历史版本号,清理数据库中的历史数据,例如,清理版本号不大于3的,并且不是该数据的最新版本的历史数据。对于上述employee表,当指定历史版本号为3,并进行清理完成后,该employee表中的内容为:
表3
历史版本号 employee_ID employee_name
4 1 张益德
3 2 李太白
图4示出根据本发明另一个方面的在分布式数据库系统(记作DDBS)中管理事务的装置示意图,其中,所述分布式数据库系统由多个数据库构成,所述数据库适于执行上文中所述的各种数据操作方法中的任意一种或多种。
在下面的说明中,假定该分布式数据库系统(记作DDBS)包括两个数据库实例(记作DB1,DB2),其中DB1中包括表employee,其具有列“employee_ID”以及“employee_name”;DB2中包括表employer,其具有列“employer_ID”,“employee_name”,“employee_ID”。
DB1中的数据库表employee如下:
表4
历史版本号 employee_ID employee_name
1 1 张三
2 1 张飞
1 2 李四
2 2 李白
DB2中的数据库表employer如下:
表5
具体地,用于获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令的装置,以下简称为第一操作命令获取装置41,获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令。所述第二事务指正在运行的该分布式数据库系统中的全局事务。在第二事务运行过程中,客户端可以通过分布式数据库系统的相应的接口发出针对该分布式数据库系统的第一操作命令。第一操作命令获取装置41通过相应的接口可以获取客户端所发出的第一操作命令。例如,在一个实例中,用户3在分布式数据库系统中运行第二事务3(记作TX3),第一操作命令获取装置41获取到该正在运行的TX3中所包含的对于该DDBS的第一操作命令为“select employee_name,employer_namefrom employee,employer where employer.employee_id=employee.employee_id”。
接着,用于根据该分布式数据库系统中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作所要使用的历史版本号的装置,以下简称为历史版本号获取装置42,根据该DDBS中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作所要使用的历史版本号。
各个第二事务的相关信息可以为例如第二事务号,第二事务中所包含的语句等一项或多项。第二事务的操作状态信息是指对第二事务所进行的操作的状态信息,例如“运行中”,“提交准备完成”,“提交中”,“提交完成”等。第二事务所对应的历史版本号是指由DDBS中的各个数据库为各个第二事务所分配的与该事务相对应的历史版本号。在本文中,为简明起见,以第二事务的事务号作为与其相对应的历史版本号。当第二事务在DDBS中的各个数据库提交后,与该第二事务所对应的该历史版本号可以包含在各个数据库的提交操作结果的返回结果中。应注意,各个数据库所分配/返回的该历史版本号可能互不相同,因此与第二事务所对应的历史版本号可以为一个或多个。为简明起见,在下文中,除非另有说明,对于某个第二事务,各个数据库所分配/所返回的该历史版本号相同,并等于该第二事务号。本领域技术人员应理解,此处所描述的确定第二事务的相关的历史版本号的方式以及历史版本号的表示方式仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
历史版本号获取装置42根据各个第二事务的相关信息,可以获取到各个第二事务的事务号。并且历史版本号获取装置42根据各个第二事务的操作状态信息,可以获知该第二事务处于哪种操作运行状态,例如“运行中”,“提交准备完成”,“提交中”,“提交完成”等。并且,历史版本号获取装置42可以通过与各数据库进行交互,或查询所存储的各数据库在事务提交操作的返回结果中所包含的与该事务对应的历史版本号来获取与各个第二事务所对应的各历史版本号。应注意,对于该分布式数据库系统中的各数据库,历史版本号获取装置42将分别获取针对该数据库的,与各个第二事务所对应的各历史版本号。在实现中,一个第二事务TXn可能仅涉及该分布式数据库系统中的某些数据库,则对于该第二事务并未涉及的数据库,例如DBm,该第二事务所对应的历史版本号为假定该第二事务需要访问该DBm,该历史版本号所指示的该历史版本的数据为已经完成全局提交的事务所引起的,并且对于该事务TXn为最新并且具有一致性的数据。
然后,针对该分布式数据库系统中的各个数据库,历史版本号获取装置42将在所述第二事务开始之前已完成全局提交的各个第二事务中的提交时间最晚的第二事务所对应的针对该数据库的历史版本号确定为针对该数据库的,所述第一操作所要使用的历史版本号。并且,应注意,针对各个数据库,所述第一操作所要使用的历史版本号可能不相同。为了简明起见,除非另有说明,我们将以针对各个数据库,所述第一操作所要使用的历史版本号相同来进行说明。本领域技术人员应理解,此处所描述的确定第二事务的相关信息、操作状态信息仅为示例性而非限定性描述,存在各种其他的实现方式而不背离本发明的精神或范畴,并以引用的方式包含于此。
接上例,假定该DDBS中的第二事务包括正在运行的TX3,其第一操作命令为“select employee_name,employer_name from employee,employer whereemployer.employee_id=employee.employee_id”。并且该DDBS中还包括操作状态为“提交完成”的第二事务1(记作TX1),和操作状态为“提交中”的第二事务2(记作TX2)。其中TX1所对应的历史版本号为1,并且TX2所对应的历史版本号为2。并且其中,TX2比TX1提交时间更晚。则在TX3之前已完成提交的各个第二事务中的提交时间最晚的第二事务为TX1,则对于该分布式系统中的各个数据库,历史版本号获取装置42将该TX1所对应的历史版本号作为针对该数据库的,所述第一操作要使用的历史版本号。此处,为简明起见,假定对于各个数据库,该TX1所对应的历史版本号均为1。。
接着,用于根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置,以下简称为第二操作命令生成装置43,根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号。
接上例,第二操作命令生成装置43将根据上述第一操作命令“select employee_name,employer_name from employee,employer where employer.employee_id=employee.employee_id”,以及上述历史版本号“1”来生成一个或多个第二操作命令。例如,第二操作命令生成装置43可以将上述命令进行分解,以生成所述第二事务的一个或多个第二操作命令。其中在一个实例中,第二操作命令生成装置43可以按照每个第二操作命令仅涉及一个数据库表的原则来生成第二操作命令。例如,其将上述第一操作命令分解为针对employee表的查询的第二操作命令1“select employer_ID,employee_name fromemployee with version=’1’into employee_temp”,以及针对employer表的查询的第二操作命令2“select employer_ID,employer_name from employer with version=’1’into employer_temp”,以及针对上述查询结果所产生的新表employee_temp和employer_temp的查询的第二操作命令3“select employee_name,employer name from employee_temp,employer_temp where employee_temp.employer_ID=employer_temp.employer_ID”。应注意,虽然在本实例中,第二操作命令1和第二操作命令2中所包含的历史版本号均为1,应理解,如上所述,各个第二操作命令中所包含的历史版本号分别为针对该操作命令所涉及的数据库的该第二事务所对应的历史版本号,其可以互不相同。
接着用于将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行的装置,以下简称操作命令发送装置44,将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行根据上述查询。例如,在一个实现中,操作命令发送装置44可以将该一个或多个第二操作命令发送至该分布式数据库系统中的所有数据库来执行。
在本例中,上述各个第二操作命令在执行完成后将得到如下表所示的查询结果:
表6
employee_name employer_name
张三 刘备
李四 李隆基
对于所述第一查询操作命令“select employee_name,employer_name fromemployee,employer where employer.employee_id=employee.employee_id”,按照现有技术的方法所得到的查询结果为,
表7
employee_name employer_name
张飞 刘备
李白 李隆基
然而,由于TX2的操作状态为“提交中”,也即其尚未在所有数据库中提交成功。其中,假定该TX2在DB1中已提交成功,其将原数据库表中的记录(employee_ID=1,employee_name=’张三’)更新为(employee_ID=1,employee_name=’张飞’),并将记录(employee_ID=2,employee_name=’李四’)更新为(employee_ID=2,employee_name=’李白’)。但由于该TX2在DB2中尚未提交成功,例如DB2发生了故障,从而不能完成该提交操作。这最终将导致DDBS对该TX2进行回滚,并且其中,上述DB1中的记录更新也将被回滚并不应为其他事务所用。因此,上述按照常规方法所得到的查询结果中的记录(employee_name=’张飞’,employer_name=‘刘备’),以及(employee_name=’李白’,employer_name=‘李隆基’)包含的是错误的数据。而上述按照本发明的方法所得到的查询结果中包含的记录为,(employee_name=’张三’,employer_name=‘刘备’),以及(employee_name=’李四’,employer_name=‘李隆基’),其为正确的数据。
在另一个实例中,假定TX1和TX2的操作状态信息均为“提交成功”。由于TX2所提交的时间晚于TX1,则历史版本号获取装置42将TX2相关的历史版本号“2”确定为该第一操作所要使用的历史版本号。按照上文所述的方法,第二操作命令生成装置43生成包含历史版本号“2”的第二操作命令,然后操作命令发送装置44将所述第二操作命令发送至数据库,所述第二操作命令执行之后,得到如下查询结果,其包含了TX1和TX2所导致的更新。
表8
employee_name employer_name
张飞 刘备
李白 李隆基
在一个优选实施例中,用于根据该分布式数据库系统的配置信息来确定其中所述第一操作需要发送至的所述多个数据库中的一个或多个数据库的装置,以下简称数据库确定装置431(未示出),可以根据该分布式数据库系统的配置信息来确定其中所述第一操作需要发送至的所述多个数据库中的一个或多个数据库;然后用于根据上述第一操作命令以及上述历史版本号,并根据上述其中所述第一操作需要发送至的所述多个数据库中的一个或多个数据库,生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置,以下简称第二操作命令第二生成装置432(未示出)根据上述第一操作命令以及上述历史版本号,并根据上述其中所述第一操作命令需要发送至的所述多个数据库中的一个或多个数据库,生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号。
数据库确定装置431可以根据其配置信息来确定所述第一操作命令所涉及的一个或多个表所位于的一个或多个数据库,并将其作为所述第一操作命令需要发送至的一个或多个数据库。接上例,数据库确定装置431可以得知该第一操作命令所涉及的employee表位于DB1中,employer表位于DB2中,从而确定该第一操作命令需要发送至DB1以及DB2。第二操作命令第二生成装置432按照每个第二操作命令仅涉及一个数据库中的一个或多个表的原则来生成第二操作命令。此时,其所生成的第二操作命令为针对DB1中的employee表的查询的第二操作命令1“select employer_ID,employee_name from employee with version=’1’into employee_temp”,其将被操作命令发送装置44发送至DB1来执行;以及针对DB2中的employer表的查询的第二查询操作命令2“select employer_ID,employer_name fromemployer with version=’1’into employer_temp”,其将被操作命令发送装置44发送至DB2来执行;以及针对上述查询结果所产生的新表employee_temp和employer_temp的查询的第二查询操作命令3“select employee_name,employer name from employee_temp,employer_temp where employee_temp.employer_ID=employer_temp.employer_ID”,其可以由DDBS的相应模块来执行而不必再发送至任何数据库来执行。
在另一个实例中,当employee表和employer表均位于例如DB1上时,则数据库确定装置431确定该第一操作命令需要发送至的数据库为DB1,第二操作命令第二生成装置432所生成的第二操作命令可以为“select employee_name,employer_name from employee,employer where employer.employee_id=employee.employee_id with version=’2’”,该第二操作命令将被操作命令发送装置44发送至DB1来被执行。
在一个实施例中,用于接收所述第二操作命令的返回结果的装置,以下简称结果接收装置45(未示出),接收所述第二操作命令的返回结果,并且用于当所述返回结果中包含历史版本号时,记录所述第二事务与所述历史版本号的对应关系的装置,以下简称历史版本号记录装置46(未示出),当所述返回结果中包含相应的历史版本号时,记录所述第二事务与所述历史版本号的对应关系。
接上例,操作命令发送装置44将所述一个或多个第二操作命令发送至一个或多个数据库,例如将“select employer_ID,employee_name from employee with version=’1’into employee_temp”发送至DB1来执行,并且结果接收装置45从DB1接收该命令的返回结果,其为:
表9
employee_ID employee_name
1 张三
2 李四
当第二操作命令为事务提交命令时,结果接收装置45从数据库所接收的返回结果中可以包括历史版本号。例如,该TX3的第二操作命令为“commit”并被发送至DB1,从而结果接收装置45可以从DB1接收到该提交命令的返回结果,其中包括的历史版本号为例如“3”。该历史版本号为数据库为该第二事务所分配的一个号码,数据库可以根据该号码获取到执行该第二事务中的操作后所对应的数据库中的数据的版本。
接着,当所述返回结果中包含历史版本号时,历史版本号记录装置46记录所述第二事务与所述历史版本号的对应关系。也即,接上例,历史版本号记录装置46将记录该TX3所对应的历史版本号为3。
再一次,尽管为描述简明起见,在上述描述中以事务号作为历史版本号,历史版本号可以为任意能够指示数据的历史版本的编号的整数、字符串或其他数据类型或数据结构。
在一个实施例中,用于对所述第二操作的返回结果进行合并处理的装置,以下简称结果合并装置47(未示出),对所述第二操作的返回结果进行合并处理,并且用于将合并后的结果发送给客户端的装置,以下简称结果发送装置48(未示出)将合并后的结果发送给客户端。例如,当employee表中的部分数据,例如记录(employee_ID=1,employee_name=’张三’),位于DB1;而另一部分数据,例如(employee_ID=2,employee_name=’李四’),位于DB2时,当第二操作命令为查询操作命令“select employer_ID,employee_name fromemployee”,其可以被操作命令发送装置44发送至DB1以及DB2来自执行。然后结果合并装置47对DB1和DB2所返回的结果进行合并从而得到如下表所示的结果:
表10
employee_ID employee_name
1 张三
2 李四
然后,结果发送装置48将上述合并后的结果返回给客户端。
在一个实施例中,当所述第二操作命令的返回结果中包含历史版本号时,结果合并装置47还可以将所述历史版本号从所述返回结果中去除。例如,当如上文所述,在如“commit”命令的返回结果中包含了历史版本号如“3”时,则结果合并装置47将该历史版本号去除,然后结果发送装置48再将去除了历史版本号的返回结果提供至客户端。
在又一个实施例中,当第二事务的执行时间超过预定阈值时,用于当第二事务的执行时间超过预定阈值时,回滚所述第二事务的装置,以下简称事务回滚装置49(未示出),还可以回滚所述第二事务。在一个实施例中,事务回滚装置49可以监测第二事务的执行时间,并将其与预定阈值比较。其中该预定阈值可以按照如经验值来进行设置,并可以根据需要来动态调整。当第二事务的执行时间超过预定阈值时,事务回滚装置49回滚该第二事务。按照此种方法,事务回滚装置49可以回滚由例如死锁等原因所造成的事务,从而解除死锁。
图5示出根据本发明又一个方面的分布式数据库系统的示意图,其包括包含多个本发明的一个上述方面的在数据库设备中用于操作数据的装置的数据库设备,以及包含本发明的一个上述方面所述的在分布式数据库系统中用于管理事务的装置的设备。
此外,在一个实施例中,所述分布式数据库系统还可以包括日志存储系统(未示出),其用于存储所述分布式存储和操作系统中各事务的相关信息以及操作状态信息。
需要注意的是,本发明可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本发明的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本发明的方法和/或技术方案。而调用本发明的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本发明的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本发明的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个装置也可以由一个装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (12)

1.一种在分布式数据库系统中用于管理事务的方法,其中,所述分布式数据库系统包含多个数据库,所述数据库适于执行:获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号,根据所述查询操作命令执行查询操作,以获取所述数据库中的相关数据的相应的历史版本,所述用于管理事务的方法包括:
-获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令;
-根据该分布式数据库系统中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作命令所要使用的历史版本号;
-根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号;
-将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行。
2.根据权利要求1所述的方法,其中,根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的步骤还包括:
-根据该分布式数据库系统的配置信息来确定其中所述第一操作需要发送至的所述多个数据库中的一个或多个数据库;
-根据上述第一操作命令以及上述历史版本号,并根据上述其中所述第一操作命令需要发送至的所述多个数据库中的一个或多个数据库,生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号。
3.根据权利要求1或2所述的方法,其中,所述方法还包括:
-接收所述第二操作命令的返回结果;
-当所述返回结果中包含历史版本号时,记录所述第二事务与所述历史版本号的对应关系。
4.根据权利要求1至2中任一项所述的方法,其中,所述方法还包括:
-对所述第二操作的返回结果进行合并处理;
-将合并后的结果发送给客户端;
并且其中,所述方法还包括:
-当所述第二操作的返回结果中包含历史版本号时,将所述历史版本号从所述返回结果中去除。
5.根据权利要求1至2中任一项所述的方法,其中,所述方法还包括:
-当第二事务的执行时间超过预定阈值时,回滚所述第二事务。
6.一种在分布式数据库系统中用于管理事务的装置,其中,所述分布式数据库系统包含多个数据库,所述数据库适于执行:获取正在运行的第一事务中所包含的对于所述数据库的查询操作命令,其中所述查询操作命令包含历史版本号,根据所述查询操作命令执行查询操作,以获取所述数据库中的相关数据的相应的历史版本,所述用于管理分布式数据库系统中的事务的装置包括:
-用于获取正在运行的第二事务中所包含的对于所述分布式数据库系统的第一操作命令的装置;
-用于根据该分布式数据库系统中各个第二事务的相关信息,各个第二事务的操作状态信息,以及各个第二事务所对应的各历史版本号来确定所述第一操作命令所要使用的历史版本号的装置;
-用于根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置;
-用于将所述一个或多个第二操作命令发送至该分布式数据库系统中的一个或多个数据库来执行的装置。
7.根据权利要求6所述的装置,其中,用于根据上述第一操作命令以及上述历史版本号来生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置还包括:
-用于根据该分布式数据库系统的配置信息来确定其中所述第一操作命令需要发送至的所述多个数据库中的一个或多个数据库的装置;
-用于根据上述第一操作命令以及上述历史版本号,并根据上述其中所述第一操作命令需要发送至的所述多个数据库中的一个或多个数据库,生成所述第二事务的一个或多个第二操作命令,所述第二操作命令包含所述历史版本号的装置。
8.根据权利要求6或7所述的装置,其中,所述装置还包括:
-用于接收所述第二操作命令的返回结果的装置;
-用于当所述返回结果中包含历史版本号时,记录所述第二事务与所述历史版本号的对应关系的装置。
9.根据权利要求6至7中任一项所述的装置,其中,所述装置还包括:
-用于对所述第二操作的返回结果进行合并处理的装置;
-用于将合并后的结果发送给客户端的装置;
其中,所述用于对所述第二操作的返回结果进行合并处理的装置还用于:
-当所述第二操作的返回结果中包含历史版本号时,将所述历史版本号从所述返回结果中去除。
10.根据权利要求6至7中任一项所述的装置,其中,所述装置还包括:
-用于当第二事务的执行时间超过预定阈值时,回滚所述第二事务的装置。
11.一种分布式数据库系统,其包括数据库设备,所述数据库设备包含用于操作数据的装置,所述用于操作数据的装置包括:用于获取正在运行的第一事务中所包含的对于数据库的查询操作命令,其中所述查询操作命令包含历史版本号的装置以及用于根据所述查询操作命令执行查询操作,以获取所述数据库中的相关数据的相应的历史版本的装置,并且所述分布式数据库系统包括包含权利要求6至10中任一项所述的用于管理分布式数据库系统中的事务的装置的设备。
12.根据权利要求11所述的分布式数据库系统,其还包括:
-日志存储系统,其用于存储所述分布式数据库系统中各事务的相关信息以及操作状态信息。
CN201410412574.XA 2014-08-20 2014-08-20 一种操作数据及管理事务的方法、装置及分布式系统 Active CN104216955B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410412574.XA CN104216955B (zh) 2014-08-20 2014-08-20 一种操作数据及管理事务的方法、装置及分布式系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410412574.XA CN104216955B (zh) 2014-08-20 2014-08-20 一种操作数据及管理事务的方法、装置及分布式系统

Publications (2)

Publication Number Publication Date
CN104216955A CN104216955A (zh) 2014-12-17
CN104216955B true CN104216955B (zh) 2017-12-26

Family

ID=52098445

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410412574.XA Active CN104216955B (zh) 2014-08-20 2014-08-20 一种操作数据及管理事务的方法、装置及分布式系统

Country Status (1)

Country Link
CN (1) CN104216955B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104486448B (zh) * 2014-12-29 2018-09-11 成都极驰科技有限公司 一种数据处理方法及装置
CN105574187B (zh) * 2015-12-23 2019-02-19 武汉达梦数据库有限公司 一种异构数据库复制事务一致性保障方法及系统
US11157517B2 (en) 2016-04-18 2021-10-26 Amazon Technologies, Inc. Versioned hierarchical data structures in a distributed data store
CN107783985B (zh) * 2016-08-25 2021-04-16 中兴通讯股份有限公司 一种分布式数据库查询方法、装置及管理系统
CN107025257B (zh) * 2016-11-30 2020-04-28 阿里巴巴集团控股有限公司 一种事务处理方法及装置
US10860550B1 (en) 2017-03-30 2020-12-08 Amazon Technologies, Inc. Versioning schemas for hierarchical data structures
US10671639B1 (en) 2017-03-30 2020-06-02 Amazon Technologies, Inc. Selectively replicating changes to hierarchial data structures
CN110309122B (zh) * 2018-03-28 2022-12-30 腾讯科技(深圳)有限公司 获取增量数据的方法、装置、服务器和存储介质
CN109002462B (zh) * 2018-06-04 2020-11-27 北京明朝万达科技股份有限公司 一种实现分布式事务的方法及系统
CN109725987A (zh) * 2018-12-15 2019-05-07 深圳壹账通智能科技有限公司 一种分布式事务一致性解决方法及相关设备
CN110347481A (zh) * 2019-07-17 2019-10-18 北京搜狐新媒体信息技术有限公司 一种实现分布式事务的方法及系统
CN111176907B (zh) * 2020-01-06 2021-03-05 中科驭数(北京)科技有限公司 硬件数据库回滚方法、软件数据库回滚方法及装置
CN112118140B (zh) * 2020-09-18 2024-05-14 平安科技(深圳)有限公司 Cdn配置方法、装置、计算机设备及存储介质
CN114925084B (zh) * 2022-05-31 2023-07-21 易保网络技术(上海)有限公司 分布式事务处理方法、系统、设备及可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0224681A2 (en) * 1985-11-26 1987-06-10 International Business Machines Corporation Method for managing obsolescence of data objects
CN103678556A (zh) * 2013-12-06 2014-03-26 华为技术有限公司 列式数据库处理的方法和处理设备
CN103714090A (zh) * 2012-10-09 2014-04-09 阿里巴巴集团控股有限公司 多索引数据库事务处理方法及数据库

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0224681A2 (en) * 1985-11-26 1987-06-10 International Business Machines Corporation Method for managing obsolescence of data objects
CN103714090A (zh) * 2012-10-09 2014-04-09 阿里巴巴集团控股有限公司 多索引数据库事务处理方法及数据库
CN103678556A (zh) * 2013-12-06 2014-03-26 华为技术有限公司 列式数据库处理的方法和处理设备

Also Published As

Publication number Publication date
CN104216955A (zh) 2014-12-17

Similar Documents

Publication Publication Date Title
CN104216955B (zh) 一种操作数据及管理事务的方法、装置及分布式系统
US10761946B2 (en) Transaction commit protocol with recoverable commit identifier
CN103116596B (zh) 在分布式数据库中执行快照隔离的系统和方法
US9747356B2 (en) Eager replication of uncommitted transactions
US9684566B2 (en) Techniques for backup restore and recovery of a pluggable database
CN107835983A (zh) 使用一致的数据库快照在分布式数据库中进行备份和还原
EP2746965B1 (en) Systems and methods for in-memory database processing
US10055440B2 (en) Database table re-partitioning using trigger-based capture and replay
US9069704B2 (en) Database log replay parallelization
US9208191B2 (en) Lock-free, scalable read access to shared data structures
US8200624B2 (en) Membership tracking and data eviction in mobile middleware scenarios
US9672126B2 (en) Hybrid data replication
US20130110873A1 (en) Method and system for data storage and management
JP2023546249A (ja) トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム
EP3391244B1 (en) Replication control among redundant data centers
CN107209704A (zh) 检测丢失的写入
CN107077495A (zh) 数据库管理系统中的高性能事务
US11442934B2 (en) Database calculation engine with dynamic top operator
EP2380090B1 (en) Data integrity in a database environment through background synchronization
US11449550B2 (en) Ad-hoc graph definition
US11176004B2 (en) Test continuous log replay
US20140052752A1 (en) Representation of business object in analytical application by combining replicated, analytical, and locally enriched data
Pankowski Consistency and availability of Data in replicated NoSQL databases
US11106698B2 (en) Multi-master with ownership transfer
US20210303583A1 (en) Ranking filter algorithms

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20191115

Address after: 201210 room j1328, floor 3, building 8, No. 55, Huiyuan Road, Jiading District, Shanghai

Patentee after: SHANGHAI YOUYANG NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd.

Address before: 100085 Baidu building, No. 10, ten Street, Haidian District, Beijing

Patentee before: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd.

EE01 Entry into force of recordation of patent licensing contract
EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20141217

Assignee: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd.

Assignor: SHANGHAI YOUYANG NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd.

Contract record no.: X2019110000009

Denomination of invention: Methods and devices for operating data and managing events and distributed system

Granted publication date: 20171226

License type: Exclusive License

Record date: 20191218

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 401120 b7-7-2, Yuxing Plaza, No.5, Huangyang Road, Yubei District, Chongqing

Patentee after: Chongqing duxiaoman Youyang Technology Co.,Ltd.

Address before: 201210 room j1328, 3 / F, building 8, 55 Huiyuan Road, Jiading District, Shanghai

Patentee before: SHANGHAI YOUYANG NEW MEDIA INFORMATION TECHNOLOGY Co.,Ltd.