CN117616411A - 用于处理分布式在线事务处理(oltp)数据库中数据库事务的方法和*** - Google Patents

用于处理分布式在线事务处理(oltp)数据库中数据库事务的方法和*** Download PDF

Info

Publication number
CN117616411A
CN117616411A CN202280045389.4A CN202280045389A CN117616411A CN 117616411 A CN117616411 A CN 117616411A CN 202280045389 A CN202280045389 A CN 202280045389A CN 117616411 A CN117616411 A CN 117616411A
Authority
CN
China
Prior art keywords
statement
transaction
slice
commit
write
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.)
Pending
Application number
CN202280045389.4A
Other languages
English (en)
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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN117616411A publication Critical patent/CN117616411A/zh
Pending legal-status Critical Current

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/23Updating
    • G06F16/2379Updates performed during online database operations; commit processing
    • 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/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/283Multi-dimensional databases or data warehouses, e.g. MOLAP or ROLAP
    • 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/24Querying
    • G06F16/245Query processing

Landscapes

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

Abstract

提供了一种处理分布式在线事务处理(distributed online transaction processing,OLTP)数据库中数据库事务的方法和***。通过确定传入语句是单分片还是多分片,减少了与全局事务管理器关联的开销和网络带宽,并提高了可扩展性。对于单分片语句,检索存储在所述语句引用的数据记录中并与所述数据记录关联的本地事务标识符(transaction identifier,TXID)。将检索到的TXID与在相应数据节点中待处理的准备事务列表的副本进行比较。如果所述TXID在准备列表的所述副本中,则使所述语句等待,直到前一个事务被提交或中止。然后确定所述前一个事务提交的更改的可见性,并处理所述语句。

Description

用于处理分布式在线事务处理(OLTP)数据库中数据库事务的 方法和***
相关申请的交叉引用
本申请要求于2021年12月14日提交的第17/550,547号美国专利申请的优先权和利益,其全部内容以引用的方式并入本文中。
技术领域
本申请涉及一种数据库管理,尤其涉及一种用于处理分布式在线事务处理(online transaction processing,OLTP)数据库中数据库事务的方法和***。
背景技术
使用计算机***管理事务数据称为在线事务处理(online transactionprocessing,OLTP)。事务数据可以包括与实体关联的更改记录,例如客户付款或库存更改,其特征通常是大量短期在线事务。一致性和性能是大多数OLTP***中的两个主要要求。
一致性,也称为隔离或可见性,在数据库级别可以指决定一个操作(例如语句)所做的更改如何或何时对其它操作(例如语句)可见的属性。较低的隔离级别会提高用户同时访问相同数据的能力,但会增加用户可能遇到的并发影响数量。相反,较高的隔离级别会减少用户可能遇到的并发影响类型,但需要更多的***资源,并增加了一个事务阻塞另一个事务的可能性。为了解决一致性问题,使用多版本并发控制(multi-version concurrencycontrol,MVCC),它是一种常见的并发控制机制,用于OLTP数据库的数据库管理***(database management system,DBMS)中,以确保并发数据库事务的正确结果。MVCC下的读事务通常使用时间戳或事务ID来确定要读取的数据的版本。此信息通常置于数据库的数据库快照中。
数据库快照是数据库在某个时间点的视图。数据库快照是在数据页级别数据库的数据和页状态的只读静态视图。数据库快照在生成数据库快照时与源数据库在事务上一致。数据库快照包括数据页的原始版本以及自生成数据库快照以来源数据库中的更改;但是,数据库快照不是数据库的完整副本。
OLTP数据库的性能通常使用事务处理性能委员会(Transaction ProcessingPerformance Council,TPC)基准C(TPC Benchmark C,TPC-C)评估,该基准C例如在http:// www.tpc.org/tpcc/上描述,其内容以引用的方式并入本文。性能反映在吞吐量和可扩展性等因素中。
解决分布式数据库***的一致性问题的主要方法有三种:(1)混合逻辑时钟;(2)真实时间服务;(3)集中化。混合逻辑时钟方案是一种相对复杂的方法,需要通过使用时间戳/计数器和消息交换进行同步。性能可能会受到同步基础设施的影响。等采用了这种方法。真实时间服务方案是/>采用的一种方法,需要特殊的硬件支持。性能在很大程度上取决于时间同步基础设施的质量。集中化方案是一种更常采用的方法,可在OLTP***中找到,包括Amazon/>和/>等。该方法利用集中式服务器进行一致性管理。因此,数据库性能将在很大程度上取决于集中式服务器(或节点)本身的网络带宽。
基于集中化方法的OLTP DBMS可以包括至少一个协调节点,其充当客户端与数据库的主要联系点,存储数据的至少一个数据节点,以及用于维护称为全局事务管理器(global transaction manager,GTM)或GTM节点的不同数据节点之间的一致性的中心管理节点(或中心节点)。在分布式OLTP DBMS中,实现高性能和一致性可能是一个困难的挑战,因为较高的一致性(也称为隔离级别)会导致性能较低,反之亦然。
至少出于上述原因,希望在处理分布式OLTP数据库中的数据库事务方面提供改进。
发明内容
本发明提供了一种用于分布式OLTP的方法、设备、***和介质,即用于处理分布式OLTP数据库中的数据库事务,其寻求在保持强隔离(一致性)的同时实现高性能。本发明的技术方案可以示例性地通过OLTP***的数据库管理***(database management system,DBMS)的数据库引擎来实现。传统的OLTP***包括全局事务管理器(global transactionmanager,GTM)。GTM是一个中心节点,通过同步OLTP***中的分布事务,确保全局(即整个***)一致的视图或数据库快照。本发明提供了一种方案,其寻求通过减少GTM的功能来减少到GTM的***通信流量。本发明提供了用于称为GTM-Lite的OLTP***的方法和***,所述OLTP***采用混合数据库快照方法,以有利地提供相对高水平的隔离(一致性),同时保持相对高速的性能。本地数据库快照用于单节点事务(即单分片语句),全局数据库快照用于多节点事务(即多分片语句)。事务管理和单分片语句生成从集中式GTM服务器卸载。OLTP***维护单调递增的提交序列号(commit sequence number,CSN)。CSN唯一标识事务提交到数据库的顺序,并且可以在后续事务中用于确定提交事务的顺序,用于MVCC可见性检查等。本发明的GTM-Lite***在GTM的控制和操作负载方面介于传统(或完全)GTM模式与无GTM模式之间。本文描述的OLTP***满足SELECT语句的RC级别隔离。在本发明的GTM-Lite***的一些实施例中,对于单分片读语句(例如单分片SELECT语句),取消GTM的集中并发控制,从而支持这些语句更快地执行。对于多分片语句,例如具有两阶段提交协议的多分片写语句,维护GTM的集中并发控制。因此,本发明的技术方案通过改进OLTP***的数据库事务的处理,改进了OLTP***的功能。
根据本发明的第一方面,提供了一种处理数据库事务的方法,所述方法包括:在协调节点处接收对包括一个或多个语句的事务的查询;在包括所述事务中单分片读语句中引用的一个或多个数据记录的数据节点处:从所述协调节点接收所述单分片读语句;生成本地数据库快照和准备列表的副本,其中,所述准备列表包括具有已准备但未提交的一个或多个多分片写语句的事务列表,其中,所述准备列表中的事务由相应的本地事务标识符(transaction identifier,TXID)标识;对于所述一个或多个数据记录中的每个数据记录,确定与所述单分片读语句中引用的所述一个或多个数据记录中的每个数据记录关联的前一个事务的TXID;对于所述一个或多个数据记录中的每个数据记录,通过将所述前一个事务的所述TXID与所述准备列表的所述副本中的所述TXID进行比较以确定是否存在匹配,确定所述准备列表的所述副本中是否存在与所述数据记录关联的事务;响应于确定所述准备列表的所述副本中存在所述单分片读语句中引用的一个或多个数据记录,使所述单分片读语句等待处理,直到所述准备列表中标识的所有匹配事务被提交或中止;在所述准备列表中标识的所有匹配的事务被提交或中止后,确定所述单分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;基于所述单分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述单分片读语句。
在第一方面的一些或所有示例中,所述方法还包括:响应于确定所述准备列表事务的所述副本中不存在所述单分片读语句中引用的一个或多个数据记录,允许处理所述单分片读语句。
在第一方面的一些或所有示例中,所述方法还包括:响应于确定所述准备列表的所述副本中不存在所述语句中引用的一个或多个数据记录,处理所述单分片读语句。
在第一方面的一些或所有示例中,所述单分片读语句是单分片SELECT语句或单分片QUERY语句中的一个。
在第一方面的一些或所有示例中,确定所述可见性包括:将本地数据库快照提交序列号(commit sequence number,CSN)与在所述准备列表的所述副本中标识的对应事务的CSN进行比较;其中,当所述准备列表的所述副本中标识的所述对应事务的所述CSN小于所述本地数据库快照CSN时,使所述单分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改可见;其中,当所述准备列表的所述副本中标识的所述对应事务的所述CSN大于所述本地数据库快照CSN时,使所述单分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改不可见。
在第一方面的一些或所有示例中,所述方法还包括:在包括所述事务中单分片写语句中引用的一个或多个数据记录的数据节点处:从所述协调节点接收所述单分片写语句;从所述协调节点接收全局数据库快照;处理所述单分片写语句。
在第一方面的一些或所有示例中,所述方法还包括:在包括所述事务中所述单分片写语句中引用的一个或多个数据记录的所述数据节点处:响应于所述单分片写语句是所述事务中的第一写语句,为所述事务生成TXID。
在第一方面的一些或所有示例中,所述单分片写语句是INSERT语句、UPDATE语句或DELETE语句中的一个。
在第一方面的一些或所有示例中,所述方法还包括:在包括所述事务中多分片读语句中引用的一个或多个数据记录的数据节点处:从所述协调节点接收所述多分片读语句;从所述协调节点接收全局数据库快照;确定所述多分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;基于所述多分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述多分片读语句。
在第一方面的一些或所有示例中,确定所述多分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的所述可见性包括:将全局数据库快照CSN与在所述准备列表的所述副本中标识的所述对应事务的CSN进行比较;其中,当所述数据记录的所述对应事务的所述CSN小于所述全局数据库快照CSN时,使所述多分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改可见;其中,当所述数据记录的所述对应事务的所述CSN大于所述全局数据库快照CSN时,使所述多分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改不可见。
在第一方面的一些或所有示例中,所述多分片读语句是多分片SELECT语句或多分片QUERY语句中的一个。
在第一方面的一些或所有示例中,所述方法还包括:在包括所述事务中多分片写语句中引用的一个或多个数据记录的数据节点处:从所述协调节点接收所述多分片写语句;从所述协调节点接收全局数据库快照;处理所述多分片读语句。
在第一方面的一些或所有示例中,根据权利要求12所述的方法还包括:在包括所述事务中所述多分片写语句中引用的一个或多个数据记录的所述数据节点处:响应于所述多分片写语句是所述事务中的第一写语句,为所述事务生成TXID。
在第一方面的一些或所有示例中,所述方法还包括:响应于所述事务是多分片写事务:在所述多分片写事务中的最后一个读语句或写语句被处理之后,执行两阶段提交过程,所述两阶段提交过程包括:在包括所述多分片写事务中所述多分片写语句中引用的一个或多个数据记录的所述数据节点处:从所述协调节点接收PREPARE TO COMMIT语句;响应于接收到所述PREPARE TO COMMIT语句,用所述事务的所述TXID附加所述准备列表;处理所述PREPARE TO COMMIT语句;从所述协调节点接收所述事务的COMMIT语句和全局事务标识符(global transaction identifier,GXID)以及所述事务的CSN;响应于接收到所述COMMIT语句,从所述准备列表中删除所述TXID;处理所述COMMIT语句。
在第一方面的一些或所有示例中,所述多分片写语句是多分片INSERT语句、多分片UPDATE语句或多分片DELETE语句中的一个。
在第一方面的一些或所有示例中,所述方法还包括:响应于所述事务是单分片写事务:在所述单分片写事务中的最后一个读语句或写语句被处理之后,执行一阶段提交过程,所述一阶段提交过程包括:在包括所述单分片写事务中所述单分片写语句中引用的一个或多个数据记录的所述数据节点处:从所述协调节点接收所述事务的COMMIT语句和CSN;处理所述COMMIT语句。
在第一方面的一些或所有示例中,所述数据库事务涉及在线事务处理(onlinetransaction processing,OLTP)数据库管理***(database management system,DBMS)的OLTP数据库。
在第一方面的一些或所有示例中,所述OLTP DBMA具有用于多分片写语句的两阶段提交协议,所述两阶段提交协议包括使用PREPARE TO COMMIT语句作为第一阶段的准备阶段和使用COMMIT语句作为第二阶段的提交阶段。
根据本发明的另一方面,提供了一种计算设备(例如,数据节点),包括一个或多个处理器、存储器和通信子***。所述存储器有形地存储有由所述一个或多个处理器执行的可执行指令。响应于一个或多个处理器的执行,可执行指令使计算设备执行上述和本文描述的方法。
根据本发明的另一方面,提供了一种非瞬时性机器可读介质,其上有形地存储用于由计算设备(例如,数据节点)的一个或多个处理器执行的可执行指令。响应于一个或多个处理器的执行,可执行指令使计算设备执行上述和本文描述的方法。
在结合附图阅读本申请的具体实现方式的以下描述时,本发明的其它方面和特征对于本领域普通技术人员来说是显而易见的。
附图说明
图1是可用于实现本发明的示例性实施例的计算设备的简化框图。
图2示出了本发明的示例性实施例提供的OLTP***。
图3示出了使用具有在传统(或完整)GTM模式下配置的GTM的OLTP***,使用全局数据库快照处理单分片事务的时序图。
图4示出了根据本发明,使用具有在GTM-Lite模式下配置的GTM的OLTP***,使用本地数据库快照处理单分片事务的时序图。
图5A和图5B示出了两个假设场景的简化时序图,其中,潜在的可见性异常可能发生在***中,所述***简单地将使用全局数据库快照的传统多分片查询和使用本地数据库快照的传统单分片查询组合在一起。
图6A示出了本发明的示例性实施例提供的处理数据库事务的方法的流程图。
图6B示出了本发明的示例性实施例提供的单分片写事务的提交处理的流程图。
图6C示出了本发明的示例性实施例提供的多分片写事务的提交处理的流程图。
具体实施方式
本发明是参考附图进行的,附图中示出了实施例。但是,可以使用许多不同的实施例,因此不应将描述解释为限于本文中阐述的实施例。相反,提供这些实施例,从而使本申请全面而完整。在可能的情况下,在附图和以下描述中使用相同的附图标记来指代相同的元件,并且在替代实施例中使用素数表示法来指示相同的元件、操作或步骤。所示***和设备的功能元件的单独框或所示分离不一定需要这些功能的物理分离,因为这些元件之间的通信可以在没有任何这种物理分离的情况下通过消息传递、函数调用、共享内存空间等方式发生。因此,尽管为了便于解释,本文分开示出了功能,但是这些功能不需要在物理或逻辑上分离的平台中实现。不同的设备可以具有不同的设计,使得尽管一些设备在固定功能硬件中实现一些功能,但其它设备可以在可编程处理器中实现这些功能,该处理器具有从机器可读介质获得的代码。最后,以单数提及的元件可以是复数,反之亦然,除非上下文明确或固有地指示。
在本发明中,以下术语集可以互换使用:服务器和节点;以及客户端和客户端设备。
在本发明中,DBMS可以指数据库实例,数据库实例是用于操作数据库中数据的软件实现的内存结构集合。数据库可以指存储数据和元数据的文件集合。在一些示例中,数据库文件可以写入持久读/写存储器,例如光盘存储器。DBMS(例如,数据库实例)可以通过计算设备和非瞬时性机器可读介质的组合来实现,所述非瞬时性机器可读介质上有形地存储可在计算设备上执行的机器可读指令。在一些示例中,DBMS可以由计算机等单个计算设备托管。在一些其它示例中,DBMS可以由多个计算设备托管。在一些其它示例中,多个DBMS可以托管在单个计算设备上。
数据库从用户/客户端接收事务。数据库事务是指独立执行用于数据检索或更新的逻辑原子工作单元。数据库事务可以包括一个或多个语句(也称为操作、命令、请求或动作),每个语句引用数据库的一个或多个数据记录以访问这些记录。语句可以是两种类型中的一种:读语句或写语句。SELECT和QUERY是读语句的示例。INSERT、UPDATE和DELETE是写语句的示例。可以由语句执行的动作的示例包括存储(即,INSERT)、修改(即,UPDATE)、删除(即,DELETE)和检索(即,SELECT或QUERY)数据。每个语句引用的一个或多个数据记录可以位于一个或多个数据节点中。因此,每个语句可以是单节点语句n或多节点语句,每个事务可以是单节点事务或多节点事务。
当一个事务包括多个语句时,事务中的一系列语句是不可分割和不可约的。数据库事务中的每个语句都必须提交(例如,完成和保存),并且必须按照语句在数据库事务中出现的顺序提交,否则事务将中止,事务中语句所做的任何更改都将回滚。
每个语句都有对应的数据库快照,即使在处理语句之后,也会维护该数据库快照。每个数据库快照都包括一个CSN。CSN用于MVCC可见性检查等。
为了实现可扩展性,分布式OLTP***通常使用数据库,所述数据库基于散列值或分布列的范围将数据划分为分片或分区。数据分片分发到数据库节点(服务器),每个节点独立于其它数据节点管理自己的数据。随着服务器和节点数量的增加,整个***的吞吐量也会增加,因为每个数据库分片或节点包括的数据更少,并且可能能够处理更多的并发数据查询。
在一些传统的OLTP***中,***中分布事务的同步是使用GTM实现的。如上所述,GTM是一个中心节点,它确保全局(即,在整个***中)一致的视图或数据库快照,并与多分片写事务的两阶段提交协议相结合,该两阶段提交协议在数据节点上提供一致的写事务。两阶段提交协议包括使用PREPARE TO COMMIT语句(也称为PREPARE命令)作为第一阶段的准备阶段和使用COMMIT语句作为第二阶段的提交阶段。单分片写事务是一阶段,不涉及PREPARE TO COMMIT语句,只涉及第二阶段的COMMIT语句。传统OLTP***中的GTM也会响应CN的请求生成CSN。CN在处理写事务时请求CSN。GTM还可以生成事务编号,这些事务编号单调递增,并指示事务的顺序。来自GTM的全局一致数据库快照或全局数据库快照包括全局数据库中每个事务的CSN和事务状态,以及每个事务的其它数据。事务状态为ACTIVE、PREPARETO COMMIT、COMMITTED或ABORTED中的一个。CSN和事务状态用于处理一致性,换句话说,用于确定数据库表/关系元组是否可见。如上所述,可见性是指数据是否对其它语句、事务或用户可见。例如,如果事务已***数据,但尚未提交***的数据,则***的数据将对以前的事务不可见。相反,如果修改数据的事务已提交,则更改的数据将对以前的事务可见。这种集中式方法通过确保强隔离来支持MVCC。例如,在PostgreSQL中实现的集中式OLTP***满足读取提交(read committed,RC)隔离级别。但是,GTM方法需要节点与GTM之间的多次通信,因此,与GTM的通信链路的带宽可能成为瓶颈,从而降低***吞吐量和速度方面的性能。
其它传统的OLTP***在无GTM模式下运行,该无GTM模式不利用GTM或中心节点来处理***中的语句和同步分布事务。在无GTM模式下,每个数据库语句关联一个或多个数据节点(data node,DN),并由DN本地处理。如果DN包括语句请求的数据记录,则DN与语句关联。无GTM模式在处理数据库语句时使用本地数据库快照。本地数据库快照类似于全局数据库快照,但只包括给定DN的事务,以及每个事务的其它数据。本地数据库快照包括DN生成和分配的CSN,以及本地数据库中每个事务的事务状态。随着与中心节点或GTM的通信减少,无GTM模式可以实现更快的性能。如果应用仅访问单个服务器(或数据节点)中的数据,则可以首选无GTM模式。但是,对于涉及多个数据节点的事务,组网和同步会引入开销,从而可以显著降低性能。此外,无GTM模式可能提供低隔离级别或不一致。例如,无GTM模式无法满足PostgreSQL中的RC隔离级别。RC隔离级别定义为一种状态,在这种状态下,SELECT语句只看到请求开始之前提交的数据,而看不到未提交的数据或并发事务在请求执行期间提交的更改。因此,在多分片情况下,如果没有受益于全局数据库快照,语句可能无法感知其它并发语句。这可能会导致多分片语句正确从一个DN读取数据,但无法正确从不同的DN读取数据的情况,其中,两个数据都来自单分片语句。
图1是可用于实现本文所述的方法和***的计算设备100的简化框图。可以使用适合于实现本发明的其它计算设备,这些计算设备可以包括与下文描述的那些组件不同的组件。在一些示例性实施例中,计算设备100可以跨一个以上物理硬件单元实现,例如在并行计算、分布式计算、虚拟服务器或云计算配置中。虽然图1示出了每个组件的单个实例,但是在计算设备100中可能存在每个组件的多个实例。
计算设备100可以包括一个或多个处理单元(“处理器”)102,例如具有可选硬件加速器的中央处理单元(central processing unit,CPU)、图形处理单元(graphicsprocessing unit,GPU)、张量处理单元(tensor processing unit,TPU)、神经处理单元(neural processing unit,NPU)、微处理器、专用集成电路(application-specificintegrated circuit,ASIC)、现场可编程门阵列(field-programmable gate array,FPGA)、专用逻辑电路、专用人工智能处理器单元或其组合。
计算设备100还可以包括一个或多个输入/输出(input/output,I/O)接口104,这些接口可以支持与一个或多个合适的输入设备106和/或输出设备108连接。在所示的示例中,一个或多个输入设备106(例如,键盘、鼠标、麦克风、触摸屏和/或小键盘)和一个或多个输出设备108(例如,显示器、扬声器和/或打印机)示出为可选且在计算设备100外部。在其它示例中,一个或多个输入设备106和/或一个或多个输出设备108中的一个或多个可以包括作为计算设备100的组件。在其它示例中,可能不存在任何输入设备106和输出设备108,在这种情况下,可能不需要I/O接口104。
计算设备100可以包括一个或多个网络接口110,用于与网络进行有线或无线通信。在示例性实施例中,网络接口110包括一个或多个无线接口,例如支持网络中通信的发送器112。一个或多个网络接口110可以包括用于网络内和/或网络间通信的有线链路(例如以太网线)和/或无线链路(例如一个或多个天线)的接口。一个或多个网络接口110可以通过一个或多个发送器112或发送天线、一个或多个接收器114或接收天线以及各种信号处理硬件和软件提供无线通信。在这方面,一些网络接口110可以包括类似于计算设备100的相应计算***。在本示例中,示出了单个天线116,可以同时用作发送天线和接收天线。但是,在其它示例中,可以存在多个单独的天线用于发送和接收。
计算设备100还可以包括一个或多个存储设备,例如存储单元118,所述一个或多个存储设备可以包括固态驱动器、硬盘驱动器、磁盘驱动器和/或光盘驱动器等非瞬时性存储单元。计算设备100的存储设备可以包括一个或多个存储器120,所述一个或多个存储器120可以包括易失性或非易失性存储器(例如,闪存、随机存取存储器(random accessmemory,RAM)和/或只读存储器(read-only memory,ROM))。存储设备(例如,存储单元118和/或一个或多个非瞬时性存储器120)可以存储用于由一个或多个处理单元102执行的指令,例如执行本发明。一个或多个存储器120可以包括其它软件指令,例如用于实现本文公开的操作***或DBMS和其它应用/功能。
在一些示例中,一个或多个数据集和/或一个或多个模块可以由外部存储器(例如,与计算设备100进行有线通信或无线通信的外部驱动器)提供,也可以由瞬时性或非瞬时性计算机可读介质提供。非瞬时性计算机可读介质的示例包括RAM、ROM、可擦除可编程ROM(erasable programmable ROM,EPROM)、电可擦除可编程ROM(electrically erasableprogrammable ROM,EEPROM)、闪存、CD-ROM或其它便携式存储器。
可以存在总线122,在计算设备100的组件之间提供通信,所述组件包括一个或多个处理单元102、一个或多个I/O接口104、一个或多个网络接口110、一个或多个存储单元118和/或一个或多个存储器120。总线122可以是任何合适的总线架构,例如包括存储器总线、***总线或视频总线。
图2示出了本发明的示例性实施例提供的OLTP***200。OLTP***200使用MVCC的混合数据库快照实现集中化方法。OLTP***200可以是具有布置在分片中的数据的分布式OLTP***。多个用户应用202a、202b和202c(统称为用户应用202)通过将事务204a、204b和204c(统称为事务204)发送到负责处理每个事务204的对应协调节点(coordinator node,CN)206a、206b和206c(统称为CN 206)中的一个,与OLTP***200交互。事务204可以包括一个或多个语句,每个语句可以是写语句或读语句。每个CN 206解释接收到的事务204,并确定事务204中的每个语句所引用的数据库分片或数据节点(data node,DN)208a和208b(使用附图标记208统称)。CN 206用于将语句转发到引用的DN 208进行处理。CN 206与GTM 210通信。根据本发明的实施例,GTM 210被配置为GMT-Lite模式,用于处理下文详细讨论的多分片语句。
每个CN 206用于为每个接收到的写事务(通常由GTM执行的任务)生成全局事务标识符(global transaction identifier,GXID)。对于多分片写事务,CN 206用于在多分片写事务的提交阶段生成GXID。CN 206将GXID转发到由多分片写事务引用的一个或多个DN208中的每一个。
GXID在OLTP***200中是唯一的,使得每个事务在OLTP***200中被唯一标识。GXID可以按升序,例如单调递增的标识符。GXID可以指示事务优先级的顺序。GXID可以包括由***范围内唯一的CN 206标识符组成的第一部分和由CN 206本地生成的标识符组成的第二部分。由于CN 206将GXID转发到多分片写事务引用的DN 208中的每一个,因此CN 206不再需要从GTM请求事务标识符,从而减少网络带宽。每个CN 206与OLTP***200内的所有其它CN 206共享GXID,而无需GTM 210的参与,以确保GXID在OLTP***200中是全局唯一的。
每个DN 208为每个写事务生成并分配本地事务标识符(transactionidentifier,TXID)。在提交对数据记录的更改后,提交更改的事务的TXID被存储或与DN208的本地数据库中的特定数据记录关联。TXID的本地性质表示TXID在OLTP***200内不是唯一的,并且TXID可以在一个或多个DN 208中复制。DN 208还响应于事务的提交生成CSN。当事务中的所有语句都提交时,事务就会提交。DN 208为存储在相应DN 208中的数据记录维护CSN与TXID之间的第一本地映射或逻辑表。
应当理解,每个多分片写事务与TXID和GXID关联,而每个单分片写事务仅与TXID关联。每个DN 208为存储在相应DN 208中的数据记录维护TXID与对应GXID之间的第二本地映射。
例如,第一本地映射和第二本地映射存储在日志文件中。在一些实施例中,第一本地映射和第二本地映射可以组合。第一本地映射和第二本地映射可以在可见性检查期间使用,以确定事务的顺序。在发生崩溃等情况下,映射也可以用于数据恢复目的。
每个DN 208还维护尚未提交的相应DN 208的准备事务列表。准备事务列表用于解决由于全局和本地数据库快照混合使用或其它原因而产生的可见性问题,如下所述。准备事务列表包括待处理事务,所述待处理事务包括一个或多个多分片写事务。准备事务列表中的每个待处理事务由相应的TXID标识。为了方便起见,准备事务列表也称为准备列表。响应于CN 206接收到对应的PREPARE TO COMMIT语句,相应的DN 208将待处理事务添加到准备列表中。如上所述,CN 206为引用包括在DN 208中的一个或多个数据记录的多分片写事务发送PREPARE TO COMMIT语句。PREPARE TO COMMIT语句是用于多分片写事务的两阶段提交协议的第一阶段。
GTM 210用于为写事务生成CSN,所述写事务包括一个或多个写语句,例如UPDATE、DELETE和/或INSERT语句。GTM 210还用于以全局数据库快照响应请求节点,所述全局数据库快照包括具有由GTM 210生成的最新CSN的事务。全局数据库快照可以用于通过允许读事务而不阻塞写事务,允许写事务而不阻塞读事务,以支持MVCC实现高度隔离。在一些实施例中,响应于数据记录被写语句更新,所述数据记录不被更新替换。而是生成记录的新版本。旧版本和新版本可以共存于***中,以便同一记录的读事务和写事务不会相互阻塞(即,彼此隔离,因此称为隔离)。具有全局数据库快照的事务可以通过将全局数据库快照中的最新CSN与负责更新的事务的CSN进行比较,访问所请求数据的正确版本。当更新事务(即UPDATE、DELETE或INSERT语句)的CSN比当前事务的CSN更早(或更低)时,对应的提交更改对当前事务可见。
除了以减少的***通信流量处理单分片读语句之外,根据本发明,OLTP***200还用于由于GTM的功能减少而以减少的***通信流量处理单分片写语句。
本文描述的混合数据库快照方法使用本地数据库快照处理单分片语句,而不是完全依赖全局数据库快照来实现高隔离级别。两种方法之间的消息传递通信的差异在图3和图4中更好地示出,图3和图4分别示出了使用传统GTM模式处理和本发明提供的GTM-Lite模式处理,在单分片INSERT语句之后处理单分片语句SELECT语句的时序图。
读语句的处理
当CN 206接收到包括引用一个或多个数据记录的单分片读语句(例如SELECT或QUERY语句)的事务时,所述语句由CN 206转发到与一个或多个数据记录关联的DN 208。当关联的DN 208接收到读语句时,DN 208生成本地数据库快照。然后,DN 208从本地数据库快照确定DN 208中的最新已知CSN,并确定与最新已知CSN关联的TXID。
然后,DN 208生成准备列表的副本。与准备列表本身不同,准备列表的副本不会更新。准备列表的副本是静态的,并标识优先级低于当前事务的待处理事务。在检查数据记录时,DN 208将TXID与准备列表的副本中的TXID进行比较,以确定是否找到匹配,从而检查数据记录的TXID以确定该TXID是否在准备列表的副本中。在DN 208接收到当前事务之后添加到准备列表中的任何事务将不会出现在准备列表的副本中,因为后续事务具有较低的优先级,并且任何潜在的提交更改对当前事务不可见。
应当理解,***或删除数据记录的事务将直接将对应的TXID写入数据记录中。为了确定前一个事务是否引用当前事务引用的数据记录,当前事务读取引用数据记录。如果前一个事务的TXID引用也被当前事务引用的数据记录,并且与准备列表的副本中的任何TXID匹配,则使当前事务等待(例如,它被暂时挂起或休眠),直到准备列表的副本中也在访问同一数据记录的前一个事务被提交或中止。事务将等待,直到发出信号唤醒。可以使用许多不同的方法来确定前一个事务已提交或中止的时间,并唤醒事务。例如,封锁协议可以锁定事务,使其免于进一步处理,直到准备列表的副本中的前一个事务被提交或中止,并且当准备列表的副本中的前一个事务被提交或中止时,释放锁,以便等待事务的进一步处理可以继续。DN 208可以使用***或观察器来确定本地数据库快照中的前一个事务的事务状态被更新为已提交或中止的时间。
在前一个事务被提交或中止之后,DN 208确定由与数据记录关联的前一个事务提交到当前事务的任何更改的可见性。在一些实施例中,DN 208将与当前事务关联的本地数据库快照CSN与和数据记录关联的前一个事务(即,最后修改数据记录的事务)的本地数据库快照CSN进行比较。本地数据库快照中事务的CSN称为本地数据库快照CSN。由于CSN是作为单调递增的标识符生成的,因此较小或较低的CSN值指示较早的优先级事务。因此,响应于与具有较低数据库快照CSN值的数据记录关联的前一个事务,使前一个事务提交的数据记录中的更改对当前事务可见,允许当前事务继续,并处理当前事务。可见数据记录被返回给客户端202。或者,如果与数据记录关联的前一个事务的本地数据库快照CSN值较高,则数据记录的更改对当前事务不可见。
如果与当前事务中的任何数据记录关联的前一个事务的TXID与准备列表的副本中的任何TXID不匹配,则允许当前事务继续,并处理当前事务。
多分片读语句的处理方式与单分片读语句的处理方式类似,区别如下。准备列表的副本不会像单分片读语句一样准备或考虑。CN 206从GTM 210请求并获得全局数据库快照,并将全局数据库快照转发到DN 208,DN 208通过将与当前事务关联的全局数据库快照CSN与和数据记录关联的前一个事务的全局数据库快照CSN比较来确定提交更改的可见性。如果与当前事务关联的全局数据库快照CSN的值较高,换句话说,优先级较高,则先前提交的更改将对当前事务可见。如果与当前事务关联的全局数据库快照CSN的值不高,则先前提交的更改对当前事务不可见。
通过与GXID的关联,可以防止因重复TXID而产生的问题。参考图2,用户应用202a向CN 206a发送包括多分片写语句(或分布式语句)的事务204a。事务204a中的多分片写语句尝试提交DN 208a和208b中变量a和b的值更新,分别为1。一旦提交了更改,事务204a的TXID就存储在数据记录a中(或与其关联)。CN 206a用于在提交阶段为事务生成和管理GXID。DN 208a和DN 208b中的每一个生成事务204a的相应TXID。DN 208a和208b中事务204a的两个TXID可以彼此相同,也可以彼此不同。TXID都通过由CN 206a管理的GXID与相同事务204a关联。如上所述,DN 208a和208b中的每一个将接收到的GXID与分配给事务204a的本地生成的TXID之间的本地映射记录到日志文件中并维护。CN 206a还负责从GTM 210请求用于多分片写语句的全局数据库快照。分配的TXID存储多分片写语句修改的数据记录或与其关联。
如图2所示,DN 208a维护准备列表212a,DN 208b维护准备列表212b。在从事务204a接收到用于多分片写事务的两阶段提交协议的PREPARE TO COMMIT语句后,事务204a的TXID分别被添加到DN 208a和208b的准备列表212a和212b中。在图2所示的示例中,DN208a和208b中的每一个还分别从事务204b和204c接收单分片读语句。来自事务204b的读语句尝试查询变量a的值。在DN 208a处接收到来自事务204b的单分片读语句后,生成准备列表212a的副本。确定(例如,检索)与数据记录a关联的TXID(在这种情况下是DN 208a分配给事务204a的TXID),并与准备列表的副本中的TXID进行比较。如果找到匹配(即,在准备列表的副本中找到事务204a的TXID),则意味着事务204a尚未被提交,并且使来自事务204b的当前语句等待,直到提交来自事务204a的语句,以确定由来自事务204a的写语句提交的更改的可见性。
虽然事务204a、204b和204c中的每一个被描述为具有单个语句,但应理解,事务204a、204b和204c中的每一个能够包括两个或两个以上语句。
写语句的处理
当CN 206接收到包括引用一个或多个数据记录的单分片写语句(例如UPDATE、DELETE或INSERT语句)的事务时,CN 206将语句转发到关联的DN 208。DN 208将生成本地数据库快照,并将在语句是事务中的第一个写语句时为当前事务生成TXID。然后,DN 208接收并处理单分片写语句。在对应事务的提交时间,负责处理事务的CN 206从GTM 210请求CSN。然后,GTM 210向CN 206返回CSN。然后,CN 206向DN 208发送COMMIT语句和CSN,DN 208接收并处理COMMIT语句。下文结合图6A、图6B和图6C更全面地描述提交处理。
多分片写语句的处理方式与单分片写语句的处理方式类似,区别如下。CN 206从GTM 210获得全局数据库快照。CN 206将多分片写语句和全局数据库快照转发到每个相应的DN 208,DN 208接收并随后处理多分片写语句。在对应事务的提交时间,将为多分片写事务生成GXID,如下文结合图6A、图6B和图6C更全面地描述的。
图3示出了具有在传统GTM模式下配置的GTM的OLTP***在单分片INSERT语句之后处理单分片语句SELECT语句的时序图。如图3所示,客户端302向CN 306发送包括INSERT语句的事务304。在接收到事务304后,CN 306继续向GTM 310发送请求308,以请求新的事务标识符(identifier,ID)。作为响应,GTM 310生成所请求的事务ID,并在响应312中将所请求的事务ID发送到CN 304。CN 306在确定来自事务304的语句是具有一个关联DN 314的单分片INSERT语句后,将事务304转发到DN 314。在CN 306从DN 314接收就绪确认后,CN 306以对CSN的请求316联系GTM 310,以提交事务。然后,GTM 310分配值为100的CSN。在响应318中,分配的CSN值100从GTM 310发送到CN 306。在分配了CSN的情况下,CN 306将更改(例如,包括在INSERT语句中的数据)提交给具有对应CSN的DN 314。随后,CN 306接收包括SELECT语句的后续事务320。CN 306在请求322中从GTM 310请求全局数据库快照,并在响应324中从GTM 310接收该全局数据库快照。然后,CN 306将请求320和全局数据库快照转发到DN314。通过全局数据库快照,事务320意识到先前事务304,并且使事务304提交的更改对事务320可见。一旦从DN 314检索到查询的数据记录,对第二事务320可见的结果元组被发送回CN 306,然后,CN 306将元组转发到客户端302。
图4示出了根据本发明,具有在GTM-Lite模式下配置的GTM的OLTP***在单分片INSERT语句之后处理单分片语句SELECT语句的时序图。在CN 206处从客户端202接收包括单分片INSERT语句的事务404。不需要GTM-Lite模式来生成本地事务ID,事务404直接转发到与事务关联的DN 208,该DN 208生成TXID并由DN 208分配给事务。响应于从DN 208接收到就绪确认,CN 206联系GTM 210以获得CSN。然后,GTM 210分配值为100的CSN。分配的CSN值100从GTM 210发送到CN 206。在分配了CSN的情况下,CN 206将更改(例如,包括在INSERT语句中的数据)提交给具有对应CSN的DN 208。在CN 206处接收包括SELECT语句的后续事务420。在确定语句是仅引用DN 208的单分片读语句之后,事务420被直接转发到DN 208,因为不需要来自GTM 210的事务ID或全局数据库快照。在接收到事务420后,生成DN 208的本地数据库快照。通过本地数据库快照,事务420意识到先前事务404,并且使事务404提交的更改对事务420可见。一旦从DN 308检索到查询的数据记录,对第二事务420可见的结果元组被发送回CN 206,然后,CN 206将元组转发到客户端202。
从图3和图4可以看出,使用本地数据库快照和本地生成的事务标识符,对于单分片语句,可以减少网络通信,特别是CN与GTM之间的网络通信。但是,至少部分由于本地数据库快照的范围有限,响应于与多分片语句结合使用,使用本地数据库快照的单分片语句可能会导致提交更改的可见性异常。
图5A和图5B示出了两个假设场景的简化时序图,其中,响应于使用全局数据库快照的多分片语句和使用本地数据库快照的单分片语句在传统OLTP***中简单组合,在处理读取语句期间可能会发生可见性异常。应理解,图5A和图5B是为了说明可能导致异常的场景,为了简洁起见,可以省略通信序列中的一个或多个步骤。
如图5A所示,CN 502接收包括多分片读语句504(即,SELECT)的事务T3,以从相应的数据节点DN1和DN2访问数据记录a和b。CN 502负责处理事务T3。数据记录a和b的初始值各自为0。读语句504作为多分片,获得数据库快照CSN为100的全局数据库快照。如图5A所示,读语句504准时到达DN1,但延迟到达DN2。在读语句504传输到DN2期间,在CN 502处接收两个事务T1和T2。相应本地数据库快照CSN为101和102的事务T1和T2用于使用单分片写语句(即UPDATE或DELETE)提交DN1和DN2中数据记录a和b的值的相应更改。
在DN1处,写语句510和来自事务T1的后续提交相对于事务T3以正确时间顺序到达。因此,由于事务T3能够正确读取a=0的值,并且数据记录a的值随后被更改为事务T1提交的a=1,因此不会出现可见性异常。
但是,在DN2处出现异常,其中,事务T2在语句512中提交的b=1的更改在事务T3的读语句504之前到达,尽管事务T3在事务T2之前被***接收。在这种场景下,事务T3应读取值b=0。但是,由于语句504延迟到达DN2,并且事务T2使用不知道待处理事务T3的本地数据库快照,事务T3可能读取b=1。
在图5B中,CN 502接收包括多分片写入语句520(即,INSERT、UPDATE或DELETE)的事务T3,用于提交CN 502接收的数据记录a和b的值的更改。如图5A所示,DN1中的数据记录a和DN2中的数据b各自具有初始值0。CN 502作为用于多分片语句的两阶段提交协议的一部分,向关联的DN(DN1和DN2)发送PREPARE TO COMMIT语句522。当接收到来自DN1和DN2的就绪确认时,CN 502向DN1和DN2发送COMMIT语句524。如图5B所示,COMMIT语句524准时到达DN1,但延迟到达DN2。在COMMIT语句524传输到DN2期间,在CN 502处接收两个事务T1和T2。这两个事务T1和T2是单分片读语句,分别尝试访问数据记录a和b。
在DN1处,来自事务T3中的多分片语句的写提交524在来自事务T1的读语句之前到达。在这种情况下,当事务T3提交数据记录a从0到1的更改时,不会出现可见性异常,并且随后接收到的事务T1将数据记录a的值读取为1。
但是,在DN2处出现异常,其中,事务T3在写提交524中提交的b=1的更改在来自事务T2的读语句526之后到达,尽管事务T3在事务T2之前被接收。在这种场景下,事务T2应读取由先前事务T3提交的值b=1。但是,由于提交请求524的延迟到达和事务T2使用的本地数据库快照的范围有限,事务T2可能读取b=0。
图6A至图6C示出了本发明的示例性实施例提供的处理数据库事务的方法600的流程图。方法600可以由用于维护OLTP数据库(例如OLTP DMBS)的OLTP***实现。OTLP***包括在GTM-Lite模式下运行的GTM、多个协调节点(coordinator node,CN)和多个数据节点。方法600的至少各部分由计算设备100的处理单元102执行的软件执行。
在步骤602中,在CN 206处接收包括事务的查询。事务包括一个或多个语句,每个语句引用一个或多个数据节点,供语句访问。每个语句可以是读语句或写语句。
在步骤603中,当事务中存在一个以上语句时,基于语句的顺序从事务中选择语句。
在步骤604中,CN 206确定语句的类型。例如,CN 206基于语句的类型和语句中的数据记录引用的DN 208确定语句是单分片读语句、单分片写语句、多分片读语句还是多分片写语句。如上所述,引用单个DN的语句是单分片语句,引用两个或两个以上DN的语句是多分片语句。例如,可以由CN 206的数据库编译器(未示出)进行确定,该数据库编译器编译事务的一个或多个语句。
在步骤606中,响应于确定语句是单分片读语句,CN 206将语句发送到由语句引用的DN 208(例如,与语句关联的DN)。
在步骤608中,DN 208生成本地数据库快照。本地数据库快照捕获DN 208当时的状态。
在步骤610中,DN 208生成准备列表的副本。准备列表的副本是静态的,不会用随后接收到的TXID更新。因此,准备列表的副本仅包括在当前单分片读语句之前在DN 208处已经准备好提交的事务的TXID。
在步骤612中,DN 208通过读取引用的记录来确定与语句引用的一个或多个数据记录中的每个数据记录关联的TXID。
在步骤614中,DN 208确定与当前事务中的任何数据记录关联的前一个事务的TXID是否与准备列表的副本中的任何TXID匹配。
在步骤616中,响应于确定与当前事务中的数据记录关联的前一个事务的TXID与准备列表的副本中的TXID匹配,使当前事务等待,直到准备列表的副本中也正在访问同一数据记录的前一个事务被提交或中止。
在步骤618中,在前一个事务已经被提交或中止之后,DN 208通过将与当前事务关联的本地数据库快照CSN与和数据记录关联的前一个事务的本地数据库快照CSN进行比较,确定由与数据记录关联的前一个事务提交到当前事务的任何更改的可见性。如果与当前事务关联的本地数据库快照CSN的值较高,换句话说,优先级较高,则先前提交的更改将对当前事务可见。如果与当前事务关联的本地数据库快照CSN的值不高,则先前提交的更改对当前事务不可见。
在步骤620中,允许当前语句继续,并处理当前语句,由前一个事务提交给当前事务的任何更改的可见性取决于步骤616的结果。返回步骤614,响应于确定与当前事务中的数据记录关联的先前事务的TXID与准备列表的副本中的任何TXID不匹配,处理还进行到步骤618,在步骤618中,确定与数据记录关联的前一个事务提交给当前事务的任何更改的可见性。
在步骤622中,确定事务中的任何读语句或写语句是否仍待处理。如果是,处理返回步骤603。如果不是,则该方法进行到步骤670,在步骤670中,可选择地发生提交处理(当事务包括单分片或多分片写语句时),之后该方法在672中结束。
返回步骤604,响应于确定语句是单分片写语句,步骤606至610如上文针对单分片读语句所描述的那样执行。接下来,在步骤630中,当语句是当前事务中的第一个语句时,DN208为当前事务生成TXID。当前事务中的后续语句与相同的TXID关联。接下来,在步骤620中处理语句。接下来,在步骤622中,确定事务中的任何读语句或写语句是否仍待处理。如果是,处理返回步骤603。如果不是,则该方法进行到步骤670,在步骤670中,可选择地发生提交处理(当事务包括单分片或多分片写语句时),之后该方法在672中结束。
图6B示出了本发明的示例性实施例提供的单分片写事务的提交处理。在处理单分片写事务中的最后一个读语句或写语句之后,将执行一阶段提交过程。在步骤656中,负责处理事务的CN 206从GTM 210请求CSN。然后,GTM 210向CN 206返回CSN。在步骤658中,CN206向DN 208发送COMMIT语句和CSN。然后,在步骤620中,DN 208接收并处理COMMIT语句。在步骤620中处理COMMIT语句期间,DN 208更新DN 208中的关联数据记录,并更新存储在DN208中的数据记录的CSN与TXID之间的本地映射。
返回步骤604,响应于确定语句是多分片读语句,CN 206在步骤640中从GTM 210请求全局数据库快照。全局数据库快照捕获***200的DN 208在当时的状态。GTM 210将全局数据库快照发送到CN 206,CN 206继而将全局数据库快照转发到引用的DN 208。接下来,在步骤606中,CN 206将语句发送到由语句引用的每个DN 208(例如,与语句关联的DN)。
在步骤642中,DN 208通过将与当前事务关联的全局数据库快照CSN与和数据记录关联的前一个事务的全局数据库快照CSN进行比较,确定由与数据记录关联的前一个事务提交给当前事务的任何更改的可见性。如果与当前事务关联的全局数据库快照CSN的值较高,换句话说,优先级较高,则先前提交的更改将对当前事务可见。如果与当前事务关联的全局数据库快照CSN的值不高,则先前提交的更改对当前事务不可见。
在步骤620中,允许当前语句继续,并处理当前语句,由前一个事务提交给当前事务的任何更改的可见性取决于步骤642的结果。接下来,在步骤622中,确定事务中的任何读语句或写语句是否仍待处理。如果是,处理返回步骤603。如果不是,则该方法进行到步骤670,在步骤670中,可选择地发生提交处理(当事务包括单分片或多分片写语句时),之后该方法在672中结束。
返回步骤604,响应于确定语句是多分片写语句,CN 206在步骤640中从GTM 210请求全局本地数据库快照。接下来,在步骤606中,CN 206将语句发送到由语句引用的每个DN208(例如,与语句关联的DN)。
接下来,在步骤630中,当语句是当前事务中的第一个语句时,每个引用的DN 208为当前事务生成TXID。当前事务中的后续语句与相同的TXID关联。
接下来,在步骤620中处理语句。接下来,在步骤622中,确定事务中的任何读语句或写语句是否仍待处理。如果是,处理返回步骤603。如果不是,则该方法进行到步骤670,在步骤670中,可选择地发生提交处理(当事务包括单分片或多分片写语句时),之后该方法在672中结束。
图6C示出了本发明的示例性实施例提供的多分片写事务的提交处理。在处理多分片写事务中的最后一个读语句或写语句之后,将执行两阶段提交过程。在步骤660中,负责处理事务的CN 206向DN 208发送PREPARE TO COMMIT语句,DN 208接收PREPARE TO COMMIT语句。在步骤662中,DN 208将当前事务的TXID添加或附加到由相应DN 208维护的准备列表中。在步骤620中,DN 208然后以通常的方式处理PREPARE TO COMMIT语句。在步骤656中,负责处理事务的CN 206然后从GTM 210请求CSN。然后,GTM 210向CN 206返回CSN。接下来,在步骤664中,CN 206为多分片写事务生成GXID。接下来,在步骤666中,CN 206向每个关联的DN 208发送COMMIT语句、CSN和GXID。在步骤620中,每个关联的DN 208接收COMMIT语句。在步骤666中,DN 208将当前事务的TXID从由相应DN 208维护的准备列表中删除。接下来,在步骤620中,DN 208然后以通常的方式处理COMMIT语句。在步骤620中处理COMMIT语句期间,关联的DN 208更新存储在相应DN 208中的关联数据记录,更新存储在相应DN 208中的数据记录的CSN与TXID之间的本地映射,并且更新存储在相应DN 208中的数据记录的TXID与对应GXID之间的本地映射。
本文描述的流程图和附图中的步骤(也称为操作)仅用于示例目的。在不脱离本发明指导的情况下,这些步骤/操作可以有许多变化。例如,可以按不同的顺序执行步骤,或者可以视情况添加、删除或修改步骤。
综述
通过上述实施例的描述,本发明可以仅通过硬件实现,也可以通过软件和必要的通用硬件平台实现,也可以通过硬件和软件的组合实现。考虑到本发明,用于执行描述的上述方法的软件编码在本领域普通技术人员的范围内。基于这样的理解,本发明的技术方案可以以软件产品的形式体现。软件产品可以存储在非易失性或非瞬时性存储介质中,所述非易失性或非瞬时性存储介质可以是光存储介质、闪存驱动器或硬盘。软件产品包括许多指令,这些指令使计算设备(个人计算机、服务器或网络设备)能够执行本发明的实施例中提供的方法。
还公开了公开范围内的所有值和子范围。此外,虽然本文所公开和示出的***、设备和过程可以包括特定数量的元件,但是可以修改这些***、设备和组件以包括更多或更少此类元件。虽然本文描述了几个示例性实施例,但可以进行修改、适配和采取其它实现方式。例如,可以对附图中所示的元件进行替换、添加或修改,并且可以通过替换、重新排序或添加所公开的方法的步骤来修改本文所描述的示例性方法。
可以选择一个或多个上述实施例中的特征,以创建由上文可能没有明确描述的特征的子组合组成的可选实施例。另外,可以选择和组合一个或多个上述实施例中的特征,以创建由上文可能没有明确描述的特征的组合组成的可选实施例。适用于这类组合和子组合的特征对于本领域技术人员而言在作为一个整体审查本发明时是显而易见的。
此外,阐述了许多具体细节,以便于透彻理解本文所描述的示例性实施例。但是,本领域的普通技术人员应理解,可以在没有这些具体细节的情况下实践本文所描述的示例性实施例。此外,为了不模糊本文所描述的示例性实施例,没有详细描述公知的方法、过程和元件。本文以及所引用的权利要求中描述的主题旨在覆盖和涵盖所有适当的技术更改。
虽然本发明及其优点已详细描述,但应理解,在不脱离所附权利要求书界定的本发明的情况下,可以作出各种改变、替代和更改。
在不脱离权利要求书的主题的前提下,本发明可以通过其它特定形式实现。所描述的示例性实施例在所有方面均被视为仅是说明性的而非限制性的。本发明旨在覆盖和涵盖所有适当的技术更改。因此,本发明的范围由所附权利要求书而不是由上述说明书进行描述。权利要求的范围不应受到示例中阐述的实施例的限制,而应给予与整个描述一致的最广泛的解释。

Claims (20)

1.一种处理数据库事务的方法,其特征在于,所述方法包括:
在协调节点处接收对包括一个或多个语句的事务的查询;
在包括所述事务中单分片读语句中引用的一个或多个数据记录的数据节点处:
从所述协调节点接收所述单分片读语句;
生成本地数据库快照和准备列表的副本,其中,所述准备列表包括具有已准备但未提交的一个或多个多分片写语句的事务列表,其中,所述准备列表中的事务由相应的本地事务标识符(transactionidentifier,TXID)标识;
对于所述一个或多个数据记录中的每个数据记录,确定与所述单分片读语句中引用的所述一个或多个数据记录中的每个数据记录关联的前一个事务的TXID;
对于所述一个或多个数据记录中的每个数据记录,通过将所述前一个事务的所述TXID与所述准备列表的所述副本中的所述TXID进行比较以确定是否存在匹配,确定所述准备列表的所述副本中是否存在与所述数据记录关联的事务;
响应于确定所述准备列表的所述副本中存在所述单分片读语句中引用的一个或多个数据记录,使所述单分片读语句等待处理,直到所述准备列表中标识的所有匹配事务被提交或中止;
在所述准备列表中标识的所有匹配的事务被提交或中止后,确定所述单分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;
基于所述单分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述单分片读语句。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于确定所述准备列表事务的所述副本中不存在所述单分片读语句中引用的一个或多个数据记录,允许处理所述单分片读语句。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:
响应于确定所述准备列表的所述副本中不存在所述语句中引用的一个或多个数据记录,处理所述单分片读语句。
4.根据权利要求1所述的方法,其特征在于,所述单分片读语句是单分片SELECT语句或单分片QUERY语句中的一个。
5.根据权利要求1所述的方法,其特征在于,确定所述可见性包括:
将本地数据库快照提交序列号(commit sequence number,CSN)与在所述准备列表的所述副本中标识的对应事务的CSN进行比较;
其中,当所述准备列表的所述副本中标识的所述对应事务的所述CSN小于所述本地数据库快照CSN时,使所述单分片读语句中引用的所述一个或多个数据记录中的所述一个或多个提交更改可见;
其中,当所述准备列表的所述副本中标识的所述对应事务的所述CSN大于所述本地数据库快照CSN时,使所述单分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改不可见。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在包括所述事务中单分片写语句中引用的一个或多个数据记录的数据节点处:
从所述协调节点接收所述单分片写语句;
从所述协调节点接收全局数据库快照;
处理所述单分片写语句。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
在包括所述事务中所述单分片写语句中引用的一个或多个数据记录的所述数据节点处:
响应于所述单分片写语句是所述事务中的第一写语句,为所述事务生成TXID。
8.根据权利要求6所述的方法,其特征在于,所述单分片写语句是INSERT语句、UPDATE语句或DELETE语句中的一个。
9.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在包括所述事务中多分片读语句中引用的一个或多个数据记录的数据节点处:
从所述协调节点接收所述多分片读语句;
从所述协调节点接收全局数据库快照;
确定所述多分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;
基于所述多分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述多分片读语句。
10.根据权利要求9所述的方法,其特征在于,确定所述多分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的所述可见性包括:
将全局数据库快照CSN与在所述准备列表的所述副本中标识的所述对应事务的CSN进行比较;
其中,当所述数据记录的所述对应事务的所述CSN小于所述全局数据库快照CSN时,使所述多分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改可见;
其中,当所述数据记录的所述对应事务的所述CSN大于所述全局数据库快照CSN时,使所述多分片读语句中引用的所述一个或多个数据记录中的所述一个或多个数据记录的所述一个或多个提交更改不可见。
11.根据权利要求10所述的方法,其特征在于,所述多分片读语句是多分片SELECT语句或多分片QUERY语句中的一个。
12.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在包括所述事务中多分片写语句中引用的一个或多个数据记录的数据节点处:
从所述协调节点接收所述多分片写语句;
从所述协调节点接收全局数据库快照;
处理所述多分片读语句。
13.根据权利要求12所述的方法,其特征在于,所述方法还包括:
在包括所述事务中所述多分片写语句中引用的一个或多个数据记录的所述数据节点处:
响应于所述多分片写语句是所述事务中的第一写语句,为所述事务生成TXID。
14.根据权利要求12所述的方法,其特征在于,所述方法还包括:
响应于所述事务是多分片写事务:
在所述多分片写事务中的最后一个读语句或写语句被处理之后,执行两阶段提交过程,所述两阶段提交过程包括:
在包括所述多分片写事务中所述多分片写语句中引用的一个或多个数据记录的所述数据节点处:
从所述协调节点接收PREPARE TO COMMIT语句;
响应于接收到所述PREPARE TO COMMIT语句,用所述事务的所述TXID附加所述准备列表;
处理所述PREPARE TO COMMIT语句;
从所述协调节点接收所述事务的COMMIT语句和全局事务标识符(globaltransactionidentifier,GXID)以及所述事务的CSN;
响应于接收到所述COMMIT语句,从所述准备列表中删除所述TXID;
处理所述COMMIT语句。
15.根据权利要求14所述的方法,其特征在于,所述多分片写语句是多分片INSERT语句、多分片UPDATE语句或多分片DELETE语句中的一个。
16.根据权利要求6所述的方法,其特征在于,所述方法还包括:
响应于所述事务是单分片写事务:
在所述单分片写事务中的最后一个读语句或写语句被处理之后,执行一阶段提交过程,所述一阶段提交过程包括:
在包括所述单分片写事务中所述单分片写语句中引用的一个或多个数据记录的所述数据节点处:
从所述协调节点接收所述事务的COMMIT语句和CSN;
处理所述COMMIT语句。
17.根据权利要求1所述的方法,其特征在于,所述数据库事务涉及在线事务处理(online transaction processing,OLTP)数据库管理***(database managementsystem,DBMS)的OLTP数据库。
18.根据权利要求17所述的方法,其特征在于,所述OLTP DBMA具有用于多分片写语句的两阶段提交协议,所述两阶段提交协议包括使用PREPARE TO COMMIT语句作为第一阶段的准备阶段和使用COMMIT语句作为第二阶段的提交阶段。
19.一种数据节点,其特征在于,所述数据节点包括:
一个或多个处理器,用于:
从协调节点接收单分片读语句,其中,所述单分片读语句是包括一个或多个语句的事务中的一个语句;
生成本地数据库快照和准备列表的副本,其中,所述准备列表包括具有已准备但未提交的一个或多个多分片写语句的事务列表,其中,所述准备列表中的事务由相应的本地事务标识符(transactionidentifier,TXID)标识;
对于所述一个或多个数据记录中的每个数据记录,确定与所述单分片读语句中引用的所述一个或多个数据记录中的每个数据记录关联的前一个事务的TXID;
对于所述一个或多个数据记录中的每个数据记录,通过将所述前一个事务的所述TXID与所述准备列表的所述副本中的所述TXID进行比较以确定是否存在匹配,确定所述准备列表的所述副本中是否存在与所述数据记录关联的事务;
响应于确定所述准备列表的所述副本中存在所述单分片读语句中引用的一个或多个数据记录,使所述单分片读语句等待处理,直到所述准备列表中标识的所有匹配事务被提交或中止;
在所述准备列表中标识的所有匹配的事务被提交或中止后,确定所述单分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;
基于所述单分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述单分片读语句。
20.一种非瞬时性机器可读介质,其特征在于,其上有形地存储用于由数据节点的一个或多个处理器执行的可执行指令,其中,响应于所述一个或多个处理器的执行,所述可执行指令使所述数据节点:
从协调节点接收单分片读语句,其中,所述单分片读语句是包括一个或多个语句的事务中的一个语句;
生成本地数据库快照和准备列表的副本,其中,所述准备列表包括具有已准备但未提交的一个或多个多分片写语句的事务列表,其中,所述准备列表中的事务由相应的本地事务标识符(transaction identifier,TXID)标识;
对于所述一个或多个数据记录中的每个数据记录,确定与所述单分片读语句中引用的所述一个或多个数据记录中的每个数据记录关联的前一个事务的TXID;
对于所述一个或多个数据记录中的每个数据记录,通过将所述前一个事务的所述TXID与所述准备列表的所述副本中的所述TXID进行比较以确定是否存在匹配,确定所述准备列表的所述副本中是否存在与所述数据记录关联的事务;
响应于确定所述准备列表的所述副本中存在所述单分片读语句中引用的一个或多个数据记录,使所述单分片读语句等待处理,直到所述准备列表中标识的所有匹配事务被提交或中止;
在所述准备列表中标识的所有匹配的事务被提交或中止后,确定所述单分片读语句中引用的所述一个或多个数据记录的一个或多个提交更改的可见性;
基于所述单分片读语句中引用的所述一个或多个数据记录的所述一个或多个提交更改的确定可见性,处理所述单分片读语句。
CN202280045389.4A 2021-12-14 2022-12-13 用于处理分布式在线事务处理(oltp)数据库中数据库事务的方法和*** Pending CN117616411A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US17/550,547 2021-12-14
US17/550,547 US11669518B1 (en) 2021-12-14 2021-12-14 Method and system for processing database transactions in a distributed online transaction processing (OLTP) database
PCT/CN2022/138569 WO2023109793A1 (en) 2021-12-14 2022-12-13 Method and system for processing database transactions in a distributed online transaction processing (oltp) database

Publications (1)

Publication Number Publication Date
CN117616411A true CN117616411A (zh) 2024-02-27

Family

ID=86609256

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202280045389.4A Pending CN117616411A (zh) 2021-12-14 2022-12-13 用于处理分布式在线事务处理(oltp)数据库中数据库事务的方法和***

Country Status (3)

Country Link
US (1) US11669518B1 (zh)
CN (1) CN117616411A (zh)
WO (1) WO2023109793A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220391378A1 (en) * 2021-06-08 2022-12-08 Salesforce.Com, Inc. Time proposals in director-based database system for transactional consistency
US11989051B2 (en) 2021-06-08 2024-05-21 Salesforce, Inc. Time alignment in director-based database system for transactional consistency
CN117131060A (zh) * 2023-07-26 2023-11-28 泽拓科技(深圳)有限责任公司 分布式数据库并发控制方法、***、计算机设备

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9779128B2 (en) * 2014-04-10 2017-10-03 Futurewei Technologies, Inc. System and method for massively parallel processing database
US11829349B2 (en) * 2015-05-11 2023-11-28 Oracle International Corporation Direct-connect functionality in a distributed database grid
US10296632B2 (en) * 2015-06-19 2019-05-21 Sap Se Synchronization on reactivation of asynchronous table replication
US10268743B2 (en) * 2015-06-19 2019-04-23 Sap Se Distributed database transaction protocol
US10572510B2 (en) * 2015-12-21 2020-02-25 Sap Se Distributed database transaction protocol
US10503725B2 (en) * 2016-10-13 2019-12-10 Futurewei Technologies, Inc. Decentralized distributed database consistency
US10936578B2 (en) * 2017-06-01 2021-03-02 Sap Se Client-driven commit of distributed write transactions in a database environment
US10810268B2 (en) 2017-12-06 2020-10-20 Futurewei Technologies, Inc. High-throughput distributed transaction management for globally consistent sharded OLTP system and method of implementing
CN109189608B (zh) * 2018-08-13 2019-07-26 武汉达梦数据库有限公司 一种保证复制事务一致性的方法以及相应的复制装置
GB2592222A (en) * 2020-02-19 2021-08-25 Nchain Holdings Ltd Distributed database
CN114661816B (zh) * 2020-12-24 2023-03-24 金篆信科有限责任公司 数据同步方法、装置、电子设备、存储介质

Also Published As

Publication number Publication date
US11669518B1 (en) 2023-06-06
WO2023109793A1 (en) 2023-06-22
US20230185795A1 (en) 2023-06-15

Similar Documents

Publication Publication Date Title
US20220237166A1 (en) Table partitioning within distributed database systems
Taft et al. Cockroachdb: The resilient geo-distributed sql database
CN107787490B (zh) 分布式数据库网格中的直接连接功能
CN117616411A (zh) 用于处理分布式在线事务处理(oltp)数据库中数据库事务的方法和***
US7653668B1 (en) Fault tolerant multi-stage data replication with relaxed coherency guarantees
US9305056B1 (en) Results cache invalidation
US11321273B2 (en) Single-sided distributed storage system
CN113535656B (zh) 数据访问方法、装置、设备及存储介质
US8856068B2 (en) Replicating modifications of a directory
US10749955B2 (en) Online cache migration in a distributed caching system using a hybrid migration process
CN111386522A (zh) 数据库表的多区多主复制
EP3818454B1 (en) Asynchronous cache coherency for mvcc based database systems
US11366802B1 (en) Batch undo processing for transaction rollbacks in a multi-writer database
KR102174957B1 (ko) 관계형 데이터베이스의 DML문장을 NoSQL 데이터베이스로 동기화하기 위한 트랜잭션 제어 방법
CN111984696A (zh) 一种新型数据库和方法
JP5416490B2 (ja) 分散データ管理システム、データ管理装置、データ管理方法、およびプログラム
WO2023097229A1 (en) Fast database scaling utilizing a decoupled storage and compute architecture
US11379463B1 (en) Atomic enforcement of cross-page data constraints in decoupled multi-writer databases
US11514080B1 (en) Cross domain transactions
US20240143371A1 (en) Data Deduplication for Replication-Based Migration of Virtual Machines
US11914571B1 (en) Optimistic concurrency for a multi-writer database
Agrawal et al. Transactions on Co-located Data

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination