CN112463311A - 事务处理方法、装置、计算机设备及存储介质 - Google Patents

事务处理方法、装置、计算机设备及存储介质 Download PDF

Info

Publication number
CN112463311A
CN112463311A CN202110115847.4A CN202110115847A CN112463311A CN 112463311 A CN112463311 A CN 112463311A CN 202110115847 A CN202110115847 A CN 202110115847A CN 112463311 A CN112463311 A CN 112463311A
Authority
CN
China
Prior art keywords
transaction
time
logic
target transaction
target
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.)
Granted
Application number
CN202110115847.4A
Other languages
English (en)
Other versions
CN112463311B (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202110115847.4A priority Critical patent/CN112463311B/zh
Publication of CN112463311A publication Critical patent/CN112463311A/zh
Application granted granted Critical
Publication of CN112463311B publication Critical patent/CN112463311B/zh
Priority to EP22745183.8A priority patent/EP4254183A4/en
Priority to JP2023524479A priority patent/JP2023546249A/ja
Priority to PCT/CN2022/073455 priority patent/WO2022161308A1/zh
Priority to US18/070,758 priority patent/US20230100223A1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction 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/23Updating
    • G06F16/2308Concurrency control
    • G06F16/2315Optimistic concurrency control
    • G06F16/2322Optimistic concurrency control using timestamps
    • 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/2365Ensuring data consistency and integrity
    • 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

Landscapes

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

Abstract

本申请公开了一种事务处理方法、装置、计算机设备及存储介质,属于数据库技术领域。本申请通过在目标事务的执行阶段,获取目标事务的读写集合,在验证阶段,根据目标事务的逻辑开始时刻和逻辑提交时刻,验证目标事务是否符合自身的并发一致性级别,并基于预定策略动态更新逻辑开始时刻,使得最终更新后的逻辑开始时刻和逻辑提交时刻能够在合法的情况下,不会发生自身的并发一致性级别所不允许的数据异常,进而提交目标事务,能够使得整个系统内不同的事务对应于不同的并发一致性级别,大大提升的数据异常检测准确程度,提高了事务处理效率以及数据库系统的性能。

Description

事务处理方法、装置、计算机设备及存储介质
技术领域
本申请涉及数据库技术领域,特别涉及一种事务处理方法、装置、计算机设备及存储介质。
背景技术
数据处理技术需要事务的语义并借用关系数据库的ACID四个特性,来保证系统的事务特性,以满足电子交易的需求。其中,A是原子性,C是一致性,I是隔离性,D是持久性。电子交易类操作,需要由这四个特性来保证交易的安全与可靠。分布式事务处理技术同样需要满足事务的ACID四个特性,为满足ACID四个特性,数据处理技术需要多种技术做保障,其中最重要的就是数据的一致性和隔离性,其中,数据的一致性决定了数据的正确性问题,而隔离性决定了并发系统的性能问题。
实现事务一致性,也就是发现、解决事务并发操作在数据项上是否造成数据异常且如何消除数据异常的问题,主要依赖的相关技术包括四种数据异常与隔离级别、数据库的事务处理技术中的并发访问控制技术,例如,基于封锁的并发访问控制技术、基于时间戳排序的并发访问控制技术、基于多版本并发控制(Multi-Version Concurrency Control,MVCC)并发访问控制技术和基于运行控制中心(Operation Control Center,OCC)并发访问控制技术等。这些技术需要保证数据不出现异常,即满足事务的可串行化调度,从而来保证数据的正确性。
以上所述的事务一致性是数据库范畴内定义的和事务相关的如何避免数据异常的一致性。数据库领域范围内的可串行化技术、多种并发访问控制技术仅是解决事务一致性相关问题,无法解决其他一致性问题(例如,共享数据对象一致性问题),由此通过可串行化技术,无法检测到部分异常问题。也就是说,存在部分满足可串行化要求,但仍具备异常的事务,可串行化调度技术无法检测,也就是说,在事务一致性下与其他一致性(例如,共享数据对象一致性)下的数据异常问题,无法进行识别,对系统的状态检测准确率低。
发明内容
本申请实施例提供了一种事务处理方法、装置、计算机设备及存储介质。能够提升数据库系统的异常检测准确程度。该技术方案包括如下内容。
一方面,提供了一种事务处理方法,该方法包括:
响应于目标事务的读写操作,获取所述目标事务的读集和写集;
响应于所述目标事务的验证指令,确定所述目标事务的逻辑开始时刻和逻辑提交时刻;
响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻;
响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,提交所述目标事务。
一方面,提供了一种事务处理装置,该装置包括:
获取模块,用于响应于目标事务的读写操作,获取所述目标事务的读集和写集;
确定模块,用于响应于所述目标事务的验证指令,确定所述目标事务的逻辑开始时刻和逻辑提交时刻;
更新模块,用于响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻;
提交模块,用于响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,提交所述目标事务。
在一种可能实施方式中,所述更新模块包括:
获取子模块,用于获取所述写集中的至少一个数据项的至少一个待写事务信息,所述至少一个待写事务信息分别用于标识正在修改所述至少一个数据项的事务;
调整子模块,用于响应于所述至少一个待写事务信息均为空,调整所述逻辑开始时刻;
回滚子模块,用于响应于所述至少一个待写事务信息中的任一待写事务信息不为空,回滚所述目标事务。
在一种可能实施方式中,所述调整子模块包括:
获取单元,用于对于所述至少一个数据项中的任一数据项,将所述任一数据项的待写事务信息获取为所述目标事务的事务标识;
更新单元,用于将所述逻辑开始时刻更新至大于所述任一数据项的最大读事务时间戳,所述最大读事务时间戳用于表示读取过所述任一数据项的事务的逻辑提交时刻中的最大值;
调整单元,用于响应于更新后的逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于活跃事务集合调整所述逻辑开始时刻,所述活跃事务集合用于标识已开始执行但未提交完毕的事务;
所述回滚子模块,还用于响应于更新后的逻辑开始时刻和所述逻辑提交时刻不符合所述目标事务的并发一致性级别,回滚所述目标事务。
在一种可能实施方式中,所述活跃事务集合包括第一事务集合和第二事务集合,所述第一事务集合用于标识处于提交中状态或者验证通过状态的事务,所述第二事务集合用于标识处于运行中状态的事务;
所述调整单元,用于:将所述逻辑开始时刻更新至大于所述第一事务集合中的最大逻辑提交时刻;响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,将所述第二事务集合中的事务的逻辑提交时刻调整至小于所述更新后的逻辑开始时刻;
所述回滚子模块,还用于响应于所述更新后的逻辑开始时刻大于所述逻辑提交时刻,回滚所述目标事务。
在一种可能实施方式中,所述回滚子模块还用于:
响应于所述第二事务集合中任一事务的逻辑开始时刻大于调整后的所述逻辑提交时刻,回滚所述任一事务。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为串行化,获取所述目标事务的并发事务;响应于所述目标事务的逻辑提交时刻小于所述并发事务的逻辑开始时刻,或者所述目标事务的逻辑开始时刻大于所述并发事务的逻辑提交时刻,获取所述目标事务所属会话的最新已完成事务时间戳;响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为严格化且所述目标事务为写事务,获取所述目标事务的并发写事务;响应于所述目标事务的逻辑提交时刻小于所述并发写事务的逻辑开始时刻,或者所述目标事务的逻辑开始时刻大于所述并发写事务的逻辑提交时刻,获取所述并发写事务的并发只读事务;响应于所述并发只读事务的逻辑开始时刻大于所述并发写事务的逻辑开始时刻,获取所述目标事务所属会话的最新已完成事务时间戳;响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为线性化且所述目标事务为写事务,获取所述目标事务的并发写事务;响应于所述目标事务和所述并发写事务通过可串行化验证,获取所述并发写事务的并发只读事务;响应于所述并发只读事务的逻辑开始时刻大于所述并发写事务的逻辑开始时刻,获取所述目标事务所属会话的最新已完成事务时间戳;响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为顺序化,获取所述目标事务的并发事务;响应于所述目标事务和所述并发事务通过可串行化验证,确定与所述目标事务属于同一会话的第一事务;响应于所述目标事务的逻辑提交时刻小于所述第一事务的逻辑开始时刻,获取所述会话的最新已完成事务时间戳;响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别;其中,若所述目标事务与所述第一事务具有因果关系,则调整所述因果关系中结果事务的逻辑开始时刻大于原因事务的逻辑提交时刻。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为可串行化,获取所述目标事务的并发事务;响应于所述目标事务和所述并发事务通过可串行化验证,确定与所述目标事务属于同一会话的第一事务;响应于所述目标事务的逻辑提交时刻小于所述第一事务的逻辑开始时刻且所述逻辑开始时刻小于或等于所述逻辑提交时刻,确定符合所述并发一致性级别。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为因果可重复读,获取与所述目标事务具有因果关系且以所述目标事务为因的结果事务;调整所述结果事务的逻辑开始时刻大于所述目标事务的逻辑提交时刻,确定符合所述并发一致性级别。
在一种可能实施方式中,所述装置还包括:
获取确定模块,用于响应于所述并发一致性级别为可重复读、读已提交或者读写未提交,确定符合所述并发一致性级别。
一方面,提供了一种计算机设备,该计算机设备包括一个或多个处理器和一个或多个存储器,该一个或多个存储器中存储有至少一条计算机程序,该至少一条计算机程序由该一个或多个处理器加载并执行以实现如上述任一种可能实现方式的事务处理方法。
一方面,提供了一种存储介质,该存储介质中存储有至少一条计算机程序,该至少一条计算机程序由处理器加载并执行以实现如上述任一种可能实现方式的事务处理方法。
一方面,提供一种计算机程序产品或计算机程序,所述计算机程序产品或所述计算机程序包括一条或多条程序代码,所述一条或多条程序代码存储在计算机可读存储介质中。计算机设备的一个或多个处理器能够从计算机可读存储介质中读取所述一条或多条程序代码,所述一个或多个处理器执行所述一条或多条程序代码,使得计算机设备能够执行上述任一种可能实施方式的事务处理方法。
本申请实施例提供的技术方案带来的有益效果至少包括:
通过在目标事务的执行阶段,获取目标事务的读写集合,在验证阶段,根据目标事务的逻辑开始时刻和逻辑提交时刻,验证目标事务是否符合自身的并发一致性级别,并基于预定策略动态更新逻辑开始时刻,使得最终更新后的逻辑开始时刻和逻辑提交时刻能够在合法的情况下,不会发生自身的并发一致性级别所不允许的数据异常,进而提交目标事务,能够使得整个系统内不同的事务对应于不同的并发一致性级别,大大提升的数据异常检测准确程度,提高了事务处理效率以及数据库系统的性能。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还能够根据这些附图获得其他的附图。
图1是本申请实施例提供的一种事务处理方法的实施环境示意图;
图2是本申请实施例提供的一种HTAC系统的架构示意图;
图3是本申请实施例提供的一种线性化级别的演化原理图;
图4是本申请实施例提供的一种事务处理方法的流程图;
图5是本申请实施例提供的一种事务处理方法的交互流程图;
图6是本申请实施例提供的一种事务处理装置的结构示意图;
图7是本申请实施例提供的一种计算机设备的结构示意图;
图8是本申请实施例提供的一种计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请中术语“第一”“第二”等字样用于对作用和功能基本相同的相同项或相似项进行区分,应理解,“第一”、“第二”、“第n”之间不具有逻辑或时序上的依赖关系,也不对数量和执行顺序进行限定。
本申请中术语“至少一个”是指一个或多个,“多个”的含义是指两个或两个以上,例如,多个第一位置是指两个或两个以上的第一位置。
在介绍本申请实施例之前,需要引入一些云技术领域内的基本概念。
云技术(Cloud Technology):是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术,也即是基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云计算技术将变成云技术领域的重要支撑。技术网络系统的后台服务需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,将来每个物品都有可能存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾支撑,均能通过云计算来实现。
云存储(Cloud Storage):是在云计算概念上延伸和发展出来的一个新的概念,分布式云存储系统(以下简称存储系统)是指通过集群应用、网格技术以及分布存储文件系统等功能,将网络中大量各种不同类型的存储设备(存储设备也称之为存储节点)通过应用软件或应用接口集合起来协同工作,共同对外提供数据存储和业务访问功能的一个存储系统。
数据库(Database):简而言之可视为一种电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、查询、更新、删除等操作。所谓“数据库”是以一定方式储存在一起、能与多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。
数据的全态(Full State):对于数据库系统中的数据项,基于状态属性的不同,可以划分为三种状态:当前态、过渡态和历史态,该三种状态合称为“数据的全态”,简称全态数据,全态数据中的各个不同状态属性,可以用于标识数据在其生命周期轨迹中所处的状态。
其一,当前态(Current State):最新版本的数据项,是处于当前阶段的数据项。
其二,历史态(Historical State):数据项在历史上的一个状态,其值是旧值,不是当前值。多个历史态数据项可以对应于同一主键标识,反映了具有该主键标识的各个数据项的状态变迁的过程。处于历史态的数据项,只能被读取而不能被修改或删除。
其三,过渡态(Transitional State):不是当前态数据项也不是历史态数据项,处于从当前态向历史态转变的过程中,这种处于过渡态的数据也称为半衰数据。
基于上述名词解释,不同的数据项可以具有相同的主键标识(Primary Key,PK),此时,具有相同主键标识的各个数据项可以构成一个全态数据集,该全态数据集内的各个数据项在本质上用于表示全态数据,也即是说,在对具有该主键标识的初始数据项进行多次修改(或删除)的过程中,由于修改(或删除)时刻不同而产生的多个不同的版本,即可构成一个全态数据集。在一个全态数据集中,有的数据项处于当前态,有的数据项处于过渡态,有的数据项处于历史态数据。这里的全态数据集是指一个抽象的、虚拟的集合概念,同一个全态数据集内的各个数据项可以分布式地存储在不同的物理机上。数据库系统在存储各个数据项时,可以采用指针将对应于同一主键标识的各个数据项按照时序链接起来,便于查询全态数据的生命周期轨迹。
数据项的可见性:数据项的可见与否(数据项的可见性)是针对于事务而言的,某个数据项可能针对一些事务可见,针对一些事务不可见。在本申请实施例中,提出了数据库系统的并发一致性级别,并在此基础上针对不同的并发一致性级别,提供了不尽相同的事务并发控制识别算法,上述算法将在后文进行详细说明,这里不做赘述。
本申请实施例所涉及的数据库系统,可以是单机数据库系统、单机以事务为主的数据库系统、单机以分析型为主但需要事务处理能力的数据库系统,可以是NoSQL(Non-relational SQL,泛指非关系型数据库)体系,还可以是分布式数据库系统、分布式大数据处理系统。
在数据库系统中可以包括至少一个节点设备,每个节点设备的数据库中可以存储有多个数据表,每个数据表可以用于存储一个或多个数据项(也称为变量版本)。其中,节点设备的数据库可以为任一类型的分布式数据库,可以包括关系型数据库或者非关系型数据库中至少一项,例如SQL(Structured Query Language,结构化查询语言)数据库、NoSQL、NewSQL(泛指各种新式的可拓展/高性能数据库)等,在本申请实施例中对数据库的类型不作具体限定。
在一些实施例中,本申请实施例还可以应用于一种基于区块链技术的数据库系统(以下简称为“区块链系统”),上述区块链系统在本质上属于一种去中心化式的分布式数据库系统,采用共识算法保持区块链上不同节点设备所记载的账本数据一致,通过密码算法保证不同节点设备之间账本数据的加密传送以及不可篡改,通过脚本系统来拓展账本功能,通过网络路由来进行不同节点设备之间的相互连接。
在区块链系统中可以包括一条或多条区块链,区块链是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。
区块链系统中节点设备之间可以组成点对点(Peer To Peer,P2P)网络,P2P协议是一个运行在传输控制协议(Transmission Control Protocol,TCP)协议之上的应用层协议。在区块链系统中,任一节点设备可以具备如下功能:(A)路由,节点设备具有的基本功能,用于支持节点设备之间的通信;(B)应用,用于部署在区块链中,根据实际业务需求而实现特定业务,记录实现功能相关的数据形成账本数据,在账本数据中携带数字签名以表示数据来源,将账本数据发送至区块链系统中的其他节点设备,供其他节点设备在验证账本数据来源以及完整性成功时,将账本数据添加至临时区块中,其中,应用实现的业务可以包括钱包、共享账本、智能合约等;(C)区块链,包括一系列按照先后的时间顺序相互接续的区块,新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链系统中节点设备提交的账本数据。
在一些实施例中,每个区块中可以包括本区块存储交易记录的哈希值(本区块的哈希值)以及前一区块的哈希值,各区块通过哈希值连接形成区块链,另,区块中还可以包括有区块生成时的时间戳等信息。
在介绍本申请实施例之前,由于数据库系统中事务并发控制的正确程度可以通过一致性和隔离性来描述,下面对一致性和隔离性进行解释说明。
一、隔离性
事务隔离级别通过能否规避某种数据异常而进行定义,可能涉及到的数据异常包括:A、脏读,指一个事务读取到了另一事务尚未提交的数据项;B、不可重复读,指一个事务对同一数据项重复读取两次却得到了不同的结果;C、幻读,指事务在操作过程中进行两次谓词查询(范围查询),第二次查询的结果包含了第一次查询的结果中未出现的数据项或者缺少了第一次查询的结果中出现的数据项。
基于能够解决上述三种数据异常,数据库国际标准ANSI(American NationalStandards Institute,美国国家标准学会) SQL提出四种隔离级别,以对上述三种已知的数据异常加以区分,目的是在允许某些数据异常存在的情况下提高事务处理效率。
这四种隔离级别分别包括:a、读未提交:允许如上三种数据异常发生;b、读已提交:不允许脏读发生;c、可重复读:不允许脏读、不可重复读发生;d、可串行化:如上三种数据异常均不能发生。
可以看出,这四种隔离级别均不允许脏写异常发生,脏写异常是指两个未提交事务修改了同一个数据项。在ANSI SQL制定标准时已知的数据异常种类不多,后续不断有新的数据异常被发现,除了上述几种数据异常之外,目前已知的数据异常还包括:丢失更新异常、读偏序异常、写偏序异常、读写偏序异常、锯齿波写偏序异常、串行并发现象(Serial-Concurrent-Phenomenon)异常、交叉现象(Cross-Phenomenon)异常、因果丢失异常、因果反转异常、旧读异常、未来读异常等。
二、一致性
在数据库技术中,“一致性”一词可以表达两重含义,其一是指事务一致性,其二是指分布式一致性。
数据库的事务一致性定义为:在事务的操作下,数据库的数据状态从一个一致的状态变迁为另一个一致的状态。上述“一致的状态”是指满足数据库系统预先定义的一些规则的数据状态,比如,这些规则可以包括约束、级联、触发器以及三者之间任意的组合(属于数据的逻辑语义),写偏序异常违反的就是特定数据之间的约束,这里的约束属于用户语义所限定的数据的一致性。
数据库的事务处理技术中的并发访问控制技术,旨在发现、解决事务并发操作在数据项上是否会造成数据异常、如何消除数据异常的问题,ANSI SQL提出了四种数据异常和隔离级别,各种并发访问控制算法也得以发展,例如,基于封锁的并发访问控制技术、基于时间戳的并发访问控制技术、基于MVCC(Mutil-Version Concurrency Control,多版本并发控制)的并发访问控制技术、基于OCC(Optimistic Concurrency Control,乐观并发控制)的并发访问控制技术等。
数据库的分布式一致性定义为:分布式一致性也称为共享数据对象操作一致性,是针对整个数据库系统的系统级含义,是指要想保证数据在数据库系统中保持一致,还要求数据库系统符合两个特性,一个是可串行性(Serializability),另一个是可恢复性(Recoverability)。可串行性也即是说上述在隔离性中所定义到的可串行化隔离级别,可串行性保证了数据不会被并发操作改坏,而可恢复性是指已经提交的事务未曾读过被回滚的事务写过的数据(指不会发生脏读异常),可恢复性保证了事务被回滚后数据回到之前的一致的状态,被回滚的事务不会对数据的一致性造成影响,数据库系统的一致性状态是可恢复的。
尤其在分布式数据库系统(但不排除更新对象的内存系统和分布式存储等具备类似问题的系统)中,基于共享对象的操作,旨在解决各种操作之间在分布式环境下在数据项上读写排序的语义问题,例如涉及各种强弱程度不同的一致性模型,一致性较强的模型如线性一致性、顺序一致性等,一致性较弱的模型如原子一致性、快照一致性、因果一致性等。
在上述两种层面均涉及到一致性概念,但各自属于不同的范畴,前者事务一致性是数据库范畴内讨论的和事务相关的如何避免数据异常的一致性,后者分布式一致性是并发操作范畴内讨论的和并发操作、非并发操作相关的如何保证操作间的语义连贯的一致性,在分布式数据库系统内,这两种层面的一致性相遇并结合在一起,可以达到一个唯一的结合维度,称为严格可串行化(Strict Serializability,Strong-1SR)。
针对上述两种一致性分别进行分析,在事务一致性层面,其体系单一、语义强烈、灵活性不够,且整个数据库系统只能有一种一致性级别,在应用层难以满足具有不同一致性要求的实际业务需求;此外,由于这类一致性要求非常严格,需要满足线性一致性(Linearizability)的Real-Time(实时)机制,因此系统的并发度较低、性能较差。在分布式一致性层面,其将事务一致性与分布式一致性之间的体系割裂,两者间的关联关系无法被有效建立,本质上仍然只有严格可串行化这一个单一结合维度能够建立起关联关系;此外,一致性模型不能把事务一致性和分布式一致性有效且全面的统一起来,因此理论体系不完备,缺乏实践价值。
有鉴于此,本申请实施例涉及一种并发一致性模型,能够建立起多种一致性级别的并发访问控制算法,能够高效地确保用户并发操作在数据对象上满足多种强弱程度不同的一致性语义,以适应不同类型的用户对正确性、性能的需求,此外,系统地提出分布式系统下的多种一致性级别,能够使得理论体系完整,并对应提出各种一致性级别的实现算法,以及对部分级别可进行去中心化涉及的算法规则,还提出多种一致性并存于同一个系统的基本规则和实现技术(也即同一系统内不同事务具有相同或不同的一致性级别),使得分布式系统下的多种一致性级别的重要难题得到讨论、定义以及具体实现。换言之,在对一致性按照强弱程度进行分级后,用时间戳排序的方式,对多种一致性进行时间戳排序检测(也即判断逻辑开始时刻、逻辑提交时刻是否符合一致性级别),能够避免相关技术中检测环(指事务的依赖关系环)所耗费的时间,能够提高事务处理效率。
图1是本申请实施例提供的一种事务处理方法的实施环境示意图。参见图1,本申请实施例可以应用于分布式数据库系统,该系统中可以包括网关服务器101、全局时间戳生成集群102以及分布式存储集群103,在分布式存储集群103中可以包括数据节点设备和协调节点设备。
其中,网关服务器101用于接收外部的读写请求,并将读写请求对应的读写事务分发至分布式存储集群103,比如,用户在登录终端上的应用客户端之后,触发应用客户端生成读写请求,调用分布式数据库系统提供的API(Application Programming Interface,应用程序编程接口)将该读写请求发送至网关服务器101,比如,该API可以是MySQL API(一种关系型数据库系统提供的API)。
可选地,上述终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。其中,终端以及网关服务器101能够通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
在一些实施例中,该网关服务器101可以与分布式存储集群103中的任一个数据节点设备或任一协调节点设备合并在同一个物理机上,也即是,让某个数据节点设备或协调节点设备充当网关服务器101。
全局时间戳生成集群102用于生成全局事务的全局时间戳,该全局时间戳至少包括逻辑开始时刻Bts和逻辑提交时刻Ets,该全局事务又称为分布式事务,是指涉及到多个数据节点设备的事务,例如全局读事务可以涉及到对多个数据节点设备上存储数据的读取,又例如,全局写事务可以涉及到对多个数据节点设备上的数据写入。全局时间戳生成集群102在逻辑上可以视为一个单点,但在一些实施例中可以通过一主三从的架构来提供具有更高可用性的服务,采用集群的形式来实现该全局时间戳的生成,可以防止单点故障,也就规避了单点瓶颈问题。
可选地,全局时间戳是一个在分布式数据库系统中全局唯一且单调递增的时间戳标识,能够用于标志每个事务全局提交的顺序,以此来反映出事务之间在真实时间上的先后关系(事务的全序关系),全局时间戳可以采用物理时钟、逻辑时钟、混合物理时钟或者混合逻辑时钟(Hybrid Logical Clock,HLC)中至少一项,本申请实施例不对全局时间戳的类型进行具体限定。
在一个示例性场景中,全局时间戳,也即一个事务的逻辑开始时刻Bts和逻辑提交时刻Ets,可以采用混合物理时钟的方式生成,由八字节组成,其中,前44位可以为物理时间戳的取值(也即Unix时间戳,精确到毫秒,标识全局的系统时间,用符号Gts来表示),这样共计可以表示244个无符号整数,因此理论
上一共可以表示约为557.8(
Figure 917183DEST_PATH_IMAGE001
)年的物理时间戳,
其中,后20位可以为在某一毫秒内的单调递增计数,这样每毫秒有220个(约100万个,标识单节点内在全局时间点上的相对时间,用符号Lts表示)计数,基于上述数据结构,如果单机(任一数据节点设备)的事务吞吐量为10w/s,理论上可以支持包含1万个节点设备的分布式存储集群103,同时,全局时间戳的数量代表了系统理论上所能支持的总事务数,基于上述数据结构,理论上系统可以支持(244-1)*220个事务。
需要说明的是,这里仅仅是对一种全局时间戳的定义方法的示例性说明,根据业务需求的不同,可以对全局时间戳的位数进行扩展,以满足对更多的节点数、事务处理数的支持,例如,根据实际需要,单个事务的逻辑开始时刻Bts和逻辑提交时刻Ets可以由大于八字节的数据组成,比如调整至由十字节组成等,使得Lts增大以应对更大的并发事务数量,本申请实施例不对全局时间戳的定义方法进行具体限定。
在一些实施例中,该全局时间戳生成集群102可以是物理独立的,也可以和网关服务器101或者分布式存储集群103合并到一起。
其中,分布式存储集群103可以包括数据节点设备和协调节点设备,每个协调节点设备可以对应于至少一个数据节点设备,数据节点设备与协调节点设备的划分是针对不同事务而言的,以某一全局事务为例,全局事务的发起节点可以称为协调节点设备,全局事务所涉及的其他节点设备称为数据节点设备,数据节点设备或协调节点设备的数量可以是一个或多个,本申请实施例不对分布式存储集群103中数据节点设备或协调节点设备的数量进行具体限定。
在该系统中可以采用XA(eXtended Architecture,X/Open组织分布式事务规范)/2PC(Two-Phase Commit,二阶段提交)技术来支持跨节点的事务(全局事务),保证跨节点写操作时数据的原子性和一致性,此时,协调节点设备用于充当2PC算法中的协调者,而该协调节点设备所对应的各个数据节点设备用于充当2PC算法中的参与者。
可选地,每个数据节点设备或协调节点设备可以是单机设备,也可以采用主备结构(也即是为一主多备集群),如图1所示,以节点设备(数据节点设备或协调节点设备)为一主两备集群为例进行示意,每个节点设备中包括一个主机和两个备机,可选地,每个主机或备机都对应配置有代理(Agent)设备,代理设备可以与主机或备机是物理独立的,当然,代理设备还可以作为主机或备机上的一个代理模块,以节点设备1为例,节点设备1包括一个主数据库及代理设备(主database+agent,简称主DB+agent),此外还包括两备数据库及代理设备(备database+agent,简称备DB+agent)。
在一个示例性场景中,每个节点设备所对应的主机或备机的数据库实例集合称为一个SET(集合),例如,假设某一节点设备为单机设备,那么该节点设备的SET仅为该单机设备的数据库实例,假设某一节点设备为一主两备集群,那么该节点设备的SET为主机数据库实例以及两个备机数据库实例的集合,此时可以基于云数据库的强同步技术来保证主机的数据与备机的副本数据之间的一致性,可选地,每个SET可以进行线性扩容,以应付大数据场景下的业务处理需求,在一些金融业务场景下,全局事务通常是指跨SET的转账。
上述图1仅是提供了一种类分布式数据库系统的架构图。整个分布式数据库系统可以看作是共同维护一个逻辑上的大表,这个大表中存储的数据通过主键被打散到分布式存储集群103中的各个节点设备中,每个节点设备上存储的数据是独立于其他节点设备的,从而实现了节点设备对逻辑大表的水平切分。由于在上述系统中能够将各个数据库中各个数据表水平切分后进行分布式地存储,因此,这种系统也可以形象地称为具有“分库分表”的架构。
本申请实施例提供的事务处理方法,可以应用于上述采用了分库分表架构的分布式系统中,例如,该分布式系统为分布式事务型数据库系统,当然也可以是分布式关系型数据库系统,此外,本申请实施例提供的事务处理方法也可以应用于任何其他架构的分布式系统或者单机数据库系统中,对于分布式系统而言,需要分布式事务处理能力,且为了提高事务处理效率以应对不同用户在不同场景的应用需求,还需要提供丰富灵活的并发一致性级别。
在一些实施例中,上述网关服务器101、全局时间戳生成集群102以及分布式存储集群103所构成的分布式数据库系统,可以视为一种向用户终端提供数据服务的服务器,该服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN(Content Delivery Network,内容分发网络)、以及大数据和人工智能平台等基础云计算服务的云服务器。
基于上述实施环境,在一些实施例中,上述分布式数据库系统可以为HTAC(HybridTransaction / Analytical Cluster,混合事务/分析集群)系统。图2是本申请实施例提供的一种HTAC系统的架构示意图,参见图2,在HTAC系统内可以包括TP(TransactionProcessing,事务处理)集群201和AP(Analytical Processing,分析处理)集群202。
其中,该TP集群201可以用于提供事务处理服务,在TP集群201中可以包括多个TP节点设备,在事务处理过程中,各个TP节点设备用于处理当前态数据,其中,每个TP节点设备可以是单机设备,也可以是一主多备集群,本申请实施例不对TP节点设备的类型进行具体限定。
其中,该AP集群202可以用于存储历史态数据并提供历史态数据的查询及分析服务,AP集群202可以包括上述实施环境中的全局时间戳生成集群102和分布式存储集群103。在分布式存储集群103中可以包括多个AP节点设备,当然,各个AP节点设备可以是单机设备,也可以是一主多备集群,本申请实施例不对AP节点设备的类型进行具体限定。
在上述架构中,每个TP节点设备所对应主机或备机的数据库实例集合称为一个SET(集合),例如,如果某一TP节点设备为单机设备,那么该TP节点设备的SET仅为该单机设备的数据库实例,如果该TP节点设备为一主两备集群,那么该TP节点设备的SET为主机数据库实例以及两个备机数据库实例的集合,此时可以基于云数据库(Cloud Database)的强同步技术来保证主机的数据与备机的副本数据之间的一致性,可选地,每个SET可以进行线性扩容,以应付大数据场景下的业务处理需求。
可选地,各个AP节点设备可以在本地数据库中存储TP集群201产生的历史态数据,还可以通过存储接口接入分布式文件系统203,从而可以通过该分布式文件系统203对TP集群201产生的历史态数据提供无限存储功能,例如,该分布式文件系统203可以是HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)、Ceph(一种Linux系统下的分布式文件系统)、Alluxio(一种基于内存的分布式文件系统)等。
在一些实施例中,由于该多个TP节点设备可以提供事务处理服务,当任一事务提交完成时,在生成新的当前态数据的同时,也会生成与该当前态数据所对应的历史态数据,而由于历史态数据会占用较多存储空间,而历史态数据又具有保存价值,因此该多个TP节点设备可以通过预定义的历史态数据迁移策略,将产生的历史态数据原子化地迁移至AP集群202,AP集群202中各个AP节点设备基于本地执行器(LocalExecutor,LE)实现历史态数据的转储,并将每次数据迁移的元信息注册到元数据(Metadata,MD)管理器中,从而便于AP集群202基于MD管理器来统计已储备数据的元信息。
在一些实施例中,用户可以基于SQL路由(Structured Query Language Router,SQL Router,简称SR)层中提供的查询语句、查询操作的语义和元数据,路由查询到TP集群201或AP集群202内存储的任一数据,当然,TP集群201主要提供对当前态数据的查询服务,AP集群202则主要提供对历史态数据的查询服务。
需要说明的是,在本申请实施例提供的HTAC系统中,TP集群201和AP集群202之前可以分别配置有上述实施例中的网关服务器101。
上述HTAC系统是一种分布式数据库系统的示例性说明,也是一种分布式事务型数据库系统的示例性说明,需要分布式事务处理的能力,且需要共享数据上的一致性模型。在上述HTAC系统上运用本申请实施例提供的事务处理方法,能够实现更多、更高效的数据异常识别,实现高效的可串行化隔离级别,从而使得HTAC系统能够适应于多种业务场景。例如,使用严格可串行化级别时,能够很好地适用于金融领域,保证数据的可靠性,而目前主流的分布式数据库系统均无法高效地提供此一致性级别。又例如,使用较弱的一致性级别时,能够很好地适用于互联网场景,从而提供高并发、实时地数据库服务,为互联网用户提供良好的产品体验。此外,还能够实现更多、更高效的共享数据一致性模型,且在分布式环境下,能够避免诸如因果丢失、因果反转、旧读、未来读等各种不一致性问题。进一步地,还能够在保证正确性的基础上,大幅提升系统性能,原因在于:(a)由于提供了多级并发一致性级别,使得不同级别有着不同的正确性表现和性能表现;(b)由于提供了对应级别下的并发访问控制算法,以去中心化为基础,使得单点性能瓶颈消失;(c)不同的并发访问控制算法有各自不同的实现方式,致力于效率构造算法,使得算法更加高效。进一步地,对于单机数据库系统,本申请实施例涉及的并发级别“顺序一致性”和“可串行化”对于可串行化理论的优化也大有裨益(传统的可串行化技术完全没有考虑会话因果关系对并发事务的影响)。综上,这一事务处理方法及相关理论能够有效保障用户数据的正确性、用户应用语义的准确性,且具有更好的系统性能,也即能够提升产品技术含量、提高技术门槛和竞争力、技术影响力,具有很强的现实意义。
在介绍本申请实施例之前,首先将对数据库系统中所涉及到的一些基本术语以及符号表示进行介绍。
事务:事务是数据库管理系统在执行操作的过程中的一个逻辑单位,由一个有限的数据库操作序列构成,是数据库系统操作的最小执行单位。在一个系统的内部,每个操作系列的单位,称为一个事务,单个操作也可以称为一个事务。
变量:事务是数据库关系系统中的一个数据单位,变量是数据库操作的作用者(或者说操作对象),一个变量可以包含若干变量版本(在后文中也简称为“版本”),每当事务对变量进行更新时,则会添加新的变量版本,变量的各个变量版本可以以自然数作为版本号标识,版本号越大,则表示变量版本越新。
操作:一个数据库操作由操作类型、事务、变量版本三部分构成,其中,操作类型可以包括读(R)和写(W)两种。例如,事务T对变量x进行更新,生成了变量x的新版本i,上述读操作则可以记为
Figure 900182DEST_PATH_IMAGE002
;又比如,事务T读取变量x的版本i的值,上述写操作可以记为
Figure 560971DEST_PATH_IMAGE003
事务数据集合:数据集合是由若干个变量版本所构成的集合,且集合中每个变量至多仅包含一个版本,可以记为数据集合DS(T)={xi, yj, zk, ... | x,y,z为变量,i,j,k为版本号}。
数据库系统中的每个事务拥有两个事务数据集合,分别为事务的写集和事务的读集,其含义为:写集DSW(T)用于存储事务T所写入的新的数据版本,读集DSR(T)用于存储事务T所读取的数据版本。
在上述基础上,事务之间的关联关系分为两种,一是相关事务,二是非相关事务。相关事务又包括:对象生命周期重叠相关以及因果相关。非相关事务是指不满足相关事务定义的其他事务。
其中,对象生命周期重叠相关事务,是指两个事务需要操作共同的数据对象,且存在重叠的时间。相关事务可以细分为2种:第一种、直接并发事务,是指事务T1和T2执行时间有重叠,且通过偏序关系操作了共同的数据项;第二种、间接并发事务,是指事务T1和T2是直接并发事务,事务T2和T3是直接并发事务,但事务T1和T3不满足直接并发事务的2个条件之一或都不满足,但则事务T1和T3是间接并发事务。
其中,因果相关事务,是指执行时间不重叠,但在同一个进程/会话发生;或者对于同一个共享数据对象,存在事务T1先写、事务T2后读到T1所写的值,则事务T1和T2之间存在因果关系;满足上述2种情况的事务称为因果相关事务。
其中,非相关事务,是指事务T1和T2不满足前述的2种关系(对象生命周期重叠相关或者因果相关),则互为非相关事务。
由于本申请实施例中的并发一致性级别涉及到检测是否满足偏序关系,因此在介绍并发一致性级别之前,还需要对偏序关系进行说明。基于共享的操作数据项所定义的偏序关系可以划分为并发偏序关系(Concurrent Partial Order,CPO)、因果偏序关系(Program Order,PO)、相似因果偏序关系(Similar Program Order,SPO),下面分别进行说明。
1、在共享的操作数据项上,对于并发事务范围内的偏序关系定义,包含以下4种并发偏序关系。
(1-1)RW偏序(读写偏序关系):事务T1读了数据项X的版本x0,事务T2写了数据项X的版本x1,则事务T1与事务T2构成偏序关系,并表示为(T1—>T2|X)。
(1-2)WR偏序(写读偏序关系):事务T1写了数据项X的版本x0,事务T2读了数据项X的版本x0,则事务T1与事务T2构成偏序关系,并表示为(T1—>T2|X)。
(1-3)WW偏序(并发写偏序关系):事务T1写了数据项X的版本x0,事务T2写了数据项X的版本x1,则事务T1与事务T2构成偏序关系,并表示为(T1—>T2|X)。
(1-4)WRA偏序(反向偏序关系):事务T1写了数据项X的版本x0,事务T2读了数据项X的版本x0;随后,事务T1发生回滚操作,由此该回滚操作对事务T2的读操作产生了一个撤销的偏序关系,该偏序关系是由事务T2所发出并指向事务T1的,故在事务T1与事务T2之间,构成一个反向的偏序关系,并表示为(T2—>T1|X)。
2、在共享的操作数据项上,对于因果相关事务范围内的偏序关系定义,包含以下的3种因果偏序关系。
(2-1)RCW偏序(无偏序关系):事务T1读了数据项X,并提交在前,随后事务T2写了数据项X,因为前者对后者并不构成影响,所以事务T1与事务T2之间不具备偏序关系。
(2-2)WCR偏序(因果写读偏序关系):事务T1写了数据项X,并提交在前,随后,读数据项X的事务T2发生。因为事务T2读到的肯定是先提交的事务T1所写的值,则事务T1与事务T2之间是具有因果关系的,且事务T1是因,事务T2是果。若当事务T1与事务T2是同一个进程中,则可以确定事务T1与事务T2之间构成在一个进程中的因果偏序关系,并表示为(T1—>T2|X)。
(2-3)WCW偏序(因果写偏序关系):事务T1写了数据项X的版本x0,并进行提交,随后,事务T2写了数据项X的版本x1,版本发生了变化。若事务T1与事务T2是同一个进程中,则可以确定事务T1与事务T2之间构成在一个进程中的因果偏序关系,并表示为(T1—>T2|X)。
3、在共享的操作数据项上,对于相似因果相关事务范围内的偏序关系定义,包含以下的2种相似因果偏序关系。
(3-1)相似因果写读偏序关系:事务T1写了数据项X,并提交在前,随后,读数据项X的事务T2发生。因为事务T2读到的是先提交的事务T1所写的值,则事务T1与事务T2之间是具有因果关系的,且事务T1是因,事务T2是果。若当事务T1与事务T2是在不同的进程中,则可以确定事务T1与事务T2之间构成在不同进程中的因果偏序关系,并表示为(T1—>T2|X)。
(3-2)相似因果写偏序关系:事务T1写了数据项X的版本x0,并进行提交,随后,事务T2写了数据项X的版本x1,版本发生了变化。若事务T1与事务T2是同一个进程中,则可以确定事务T1与事务T2之间构成在一个进程中的因果偏序关系,并表示为(T1—>T2|X)。
基于上述对隔离性和一致性的概念描述,可知隔离级别一词源于数据库系统的并发访问控制技术,但隔离级别只是在有限的数据异常(如ANSI SQL标准限定的三种异常)访问的基础上进行定义,但缺乏对其他各式各样的异常检测敏感度。本申请实施例涉及的并发一致性级别,也可简称为“并发级别”。
并发级别:对数据库中所有类型的事务(直接并发事务、间接并发事务、因果相关事务、非相关事务)的在数据项上的行为进行级别划分,从强到弱,定义如下多种不同的并发一致性级别。这里需要注意的是,并发一致性级别是以事务为单位进行定义的,而并非以系统为单位进行定义,也即同一个数据库系统内,允许不同的事务满足不同的并发一致性级别。
在并发一致性级别下,每个事务至少会涉及到两个全局时间戳,一个是事务的逻辑开始时刻Bts(Begin Time Stample,开始时间戳值),一个是事务的逻辑提交时刻Ets(EndTime Stample,提交时间戳值)。其中,回滚的事务Ets值置为NULL。此外,每个会话(Session)都会维护一个Newts表示本会话上发生的最新已经完成事务的时间戳值,也即最新已完成事务时间戳Newts,用于确保偏序关系(顺序一致性)。下面对9种并发一致性级别进行定义。
1)串行化(Serialization Consistency):所有事务在一个逻辑的系统内部都串行排队执行。其中,系统内可以存在一个或多个可执行节点,即适用于单机系统和分布式系统,单机系统内可支持单处理器和多处理器,串行化级别是最强的一致性级别,任何数据异常、不一致都不可发生。
2)严格化(Strict SerializabilityConsistency):也即严格可串行化。所有事务中,写事务串行执行,但允许只读事务和非只读事务并发执行。然而一个只读事务,不可以发生“TimeTravel(时空旅行)”事件,即从当前时刻读取最新数据,即不允许“旧读、未来读”这两种不一致的数据异常发生。严格化级别也不允许“因果丢失、因果反转”这两种不一致的数据异常发生。
需要说明的是,上述TimeTravel事件是指:一个事务Tk向前跨越了至少一个已经提交完成的事务的Bts对旧的数据(数据的旧版本)读取,则称为TimeTravel事件发生;如果没有跨越任何一个已经提交完成的事务的Bts获取数据,则不是TimeTravel事件发生;如果读取的数据是最新已经提交完成的事务的数据版本且该事务的Bts早于本事务的Bts,则称为近似TimeTravel事件发生。
定义如上几种事件,使得基于事务的并发读,可以不读取并发事务的写操作的结果,而是前移只读事务的Bts,使得并发事务可以按事务为单位进行数据读取。
3)线性化(Linearizability Serializability Consistency):也即线性可串行化。所有事务都可并发执行;但对于并发执行的事务,事务间的读写关系需要满足Real-Time的要求,且需要保障无任何数据异常。Real-Time条件确保不可能存在“因果丢失、因果反转、旧读”这三种不一致的数据异常,但允许发生未来读此类不一致的数据异常。
但对于可串行化的要求,对于一个事务的读操作,进行“近似TimeTravel”操作,即从当前时刻(本事务的Bts)读取最新数据,使得“未来读”不可能发生。另外,在可串行化的要求下,需要检测数据异常是否存在。
因此,线性化级别和在读取数据方面和严格化级别相似,但并发度会略高。
4)顺序化(Sequential Serializability Consistency):也即顺序可串行化。在一个会话内,结果值是稳定的,不可发生旧读;并发事务之间,满足可串行化要求。
5)可串行化(Serializability Consistency):在一个会话内,结果值是不稳定的,可发生旧读;并发事务之间,满足可串行化要求。可串行化级别与顺序化级别相比,去掉了同一个session中偏序关系的限制。本定义符合传统的可串行化定义。
6)因果可重复读(Causal Repeatable Read Consistency):考虑因果关系的可重复读,在一个系统内,满足因果关系,但不要求并发事务之间满足可串行化,即可能存在数据异常,也可能存在“因果丢失、因果反转、旧读、未来读”等各种不一致性的数据异常。但不允许写偏序、读写偏序类型的数据异常发生。
7)可重复读(Repeatable Read Consistency):不考虑因果关系的可重复读。不允许写偏序、读写偏序类型的数据异常发生。
8)读已提交(Read Committed Consistency):不考虑因果关系的读已提交。允许读偏序、写偏序类型的数据异常发生。
9)读写未提交(Read Uncommitted Consistency):最弱的一致性级别,任何数据异常、不一致,都可能发生。
表1示出了上述几种并发一致性级别之间的关系,以更加明显地区分出在不同的并发级别之间的区别和联系,其中“重叠”是指当前并发级别允许两个事务的逻辑时间区间重叠,而“不重叠”是指当前并发级别不允许两个事务的逻辑时间区间重叠。
Figure 562293DEST_PATH_IMAGE004
按照一致性强弱程度的角度可以将9种并发一致性级别分为4类,区分角度为是否具有全局的一致性保持能力,如果有则属于强一致性的并发级别,如果没有则属于弱一致性的并发级别。第一类,强一致性级别:串行化、严格化、线性化、顺序化;第二类,中间型级别:可串行化,该级别只在并发事务之间有全局保障;第三类,弱一致性级别:因果可重复读、可重复读、读已提交;第四类,零一致性级别:读写未提交,该级别无任何一致性保障。
本申请实施例涉及的事务处理方法,适应于所有的并发级别,下面介绍基于时钟的不同强弱程度的并发级别算法。其中,全局时钟(也即全局时间戳)是一个逻辑概念,为整个数据库系统提供统一的单调递增值,可选地,全局时钟是一个全局的物理时钟,或者,全局时钟是一个全局的逻辑时钟。
在一些实施例中,可以利用Truetime(真实时间)机制来构建分布式去中心化的时钟,或者,也可以采取多个冗余节点(如Paxos/Raft等一致性协议构造的集群)的主备系统统一提供,或者,还可以是一个具有精准同步机制协同节点退出机制的一种算法,本申请实施例不对全局时钟的构建方式进行具体限定。
在对全局时钟进行比较时,假设存在两事务Ti和Tj,如果Ti.bts.gts<Tj.bts.gtsOR (Ti.bts.gts = Tj.bts.gtsANDTi.bts.lts<Tj.bts.lts),则认为:Ti.bts<Tj.bts。也即是说,以HLC时钟为例,由八个字节组成,Bts包括前一部分Gts和后一部分Lts,两事务的Bts在比较大小时,优先比较Gts,在Gts相同时再比较Lts。
需要说明的是,在每个事务成功提交之后,需要对协调器(也即协调节点设备)上的Lts执行递增操作,并对每个会话的Newts递增,这样才能保证系统的因果序递增。
以下,在上述对9种并发级别的定义基础上,介绍基于时钟的9种并发级别算法。
Ⅰ)串行化:任何2个事务Ti和Tj,需要满足Ti.ets<Tj.bts,使得Ti先于Tj发生并完成。Bts、Ets的取值从全局时钟获取。
Ⅱ)严格化:任何2个并发的写事务Ti和Tj,需要满足Ti.ets<Tj.bts,使得Ti先于Tj发生并完成。如果不是并发事务,则不受Ti.ets<Tj.bts限制。
此外,只读事务Tk,可以和未完成的Tj事务并发,即Tj.bts<Tk.bts。Tk如果和Tj是并发事务,则读取的是Ti写过的数据不是Tj写但未完成的数据(确保了读最新数据)。此处,实际上发生了“近似TimeTravel”事件。
此外,Ti和Tj的Bts、Ets的取值从全局时钟获取。Tk如果是分布式事务,其Bts需要从全局时钟获取;Tk如果是局部事务(单节点事务),其Bts可以从节点上的时钟获取,但节点时钟需要和全局时钟保持同步更新。
此外,一个事务的读操作,不能读取到未来先于本事务提交的数据项值,即如果Ti.bts<Tj.bts,则Ri(X) ≠Wj(X)。即不支持未来读。
Ⅲ)线性化:任何2个写事务Ti和Tj,不需要满足Ti.ets<Tj.bts,但如果是并发事务,需要进行可串行化验证。这点是和严格化级别定义中的不同之处。其他针对只读事务的条件、时钟获取方式同严格化级别,线性化级别同样不支持未来读。
Ⅳ)顺序化:任何类型的事务都可并发或并行执行。如果是并发事务,需要进行可串行化验证。
此外,任何源自同一个会话内的两个事务P(Ti)=P(Tj),P()代表进程;每个事务的Ets值,必须是递增的,即Ti.ets<Tj.bts。
此外,分布式事务的Bts、Ets源自全局时钟或混合逻辑时钟;局部事务的Bts、Ets可源自本节点的时钟但需要在各个上体现时钟间的因果关系,即如果两个进程Pi和Pj有Pi为因Pj为果的关系,则Pj的时钟需要根据Pi的时钟进行调整,调整后要大于Pi的时钟。
此外,顺序化级别允许发生旧读、未来读,允许因果丢失、因果反转。
此外,顺序化级别相当于考虑了偏序关系的可串行化。
Ⅴ)可串行化:与顺序化级别同理,但不考虑偏序关系对可串行化的影响。等价于传统的可串行化调度技术。
Ⅵ)因果可重复读:任何有因果关系的两个事务Ti和Tj,如果两个进程Pi和Pj有Pi为因Pj为果的关系,则Pj的时钟需要根据Pi的时钟进行调整,调整后要大于Pi的时钟。其中,根据上述PO关系、CPO关系、SPO关系的定义来判断事务Ti和Tj是否具有因果关系。
此外,本事务读取数据的时候,以本事务的Bts建立的快照进行读取。
此外,因果可重复读级别不需要验证可串行化,但需要保证无读偏序异常,但不能发现写偏序、读写偏序类别的数据异常。
Ⅶ)可重复读:不考虑因果关系,其他与因果可重复读级别同理。
Ⅷ)读已提交:不考虑因果关系的读已提交。允许未来读发生,即任何2个事务,即使Ti.bts<Tj.bts但如果Tj.ets<Ti.ets,Ti可以读取Tj写的数据项Wj(X)=Ri(X)。这表明发生了“Timetravel”事件。
此外,允许读偏序、写偏序类型的数据异常发生。
Ⅸ)读写未提交:最弱的一致性级别,任何数据异常、不一致,都可能发生。读写未提交级别没有任何限制,不进行数据异常的验证,不进行不一致的限制。
上述基于时钟的并发级别算法,应用于分布式数据库系统时,系统内不同节点之间需要同步校时,系统可以采用类似于NTP(Network Time Protocol,网络时间协议)的算法进行周期性校时。此外,在发生因果事件时,原因事件所在的节点的时间为结果事件所在的节点校时。此外,假设某一个事务的并发级别高于或等于可串行化级别,在获取全局时间戳时,利用取到的全局时间戳对本地节点的时间戳进行校时。此外,对于被校时的节点,校时至少需要使得本节点的时钟值保持单调递增的属性。
在一些实施例中,两个节点设备在校时过程中,可以在节点设备之间互相通信的消息包中,将本地节点的最新时间戳消息传递给另一待校时的消息接收放,消息接收方收到信息后,如果消息包的时间戳值大于本地时钟的时间戳值,则修改本地时钟。
下面,本申请实施例还提供了对于线性化级别的唯一性证明过程,业界对于线性化级别有三种类型:Linearizability(线性化)级别、Linearizability-Regular(常规线性化)级别和Linearizability-Safe(安全线性化)级别。三种类型各自的详细定义如下,上述三种类型的线性化级别在融合了事务一致性之后,只能有一种级别存在。
Linearizability(线性化)级别的定义为:
Figure 588018DEST_PATH_IMAGE005
其中,
Figure 746729DEST_PATH_IMAGE006
表示一个用于获取读/写操作的返回值的函数,SingleOrder表示单一的全局顺序,RealTime表示实时机制,RVal表示满足一致性条件的返回值,H表示一系列的历史操作,H’表示存在有一个H,op表示当前事务的读/写操作,ar表示H的全序关系,vis表示读/写操作的可见性,rb表示H的偏序关系,op.oval表示读/写操作的返回值,
Figure 883313DEST_PATH_IMAGE007
表示得到返回值但还没有返回给用户的时刻。
Linearizability-Regular(常规线性化)级别和Linearizability-Safe(安全线性化)级别的定义为:
Figure 739142DEST_PATH_IMAGE008
其中,
Figure 935768DEST_PATH_IMAGE006
表示一个用于获取读/写操作的返回值的函数,SingleOrder表示单一的全局顺序,RealTimeWrites表示实时写机制,RVal表示满足一致性条件的返回值,SeqRVal表示存在于任意的操作op属于在并发时的历史结果为空集则可推出操作的返回值属于操作所在的上下文函数内,rb表示H的偏序关系,wr表示写操作,op表示当前事务的读/写操作,ar表示H的全序关系,H表示一系列的历史操作,Concur表示并发操作,op.oval表示读/写操作的返回值,cxt表示上下文,A表示数据对象。
图3是本申请实施例提供的一种线性化级别的演化原理图,如300所示,PA、PB、PC分别表示A、B、C三个进程,读写并发的执行(从左到右按Real-Time推进)。变量x始化为0。PC按Linearizability级别语义读取允许x为0或1。按Linearizability-Regular级别语义允许x为0、1或2。按Linearizability-Safe级别语义读取,x可以是任何值。
下面将使用反证法证明在事务的作用下,不可能读到图3中的PA写的值2,即不可有多种线性一致性存在于事务的定义中。由于图3中每项操作,都视为一个事务。根据事务的特性,需要满足可恢复性(Recoverable,即需要保证读已提交)。假设PC的Read可读到Write(2),而其PC-read-ets<PA-write(2)-ets,即P次事务执行时刻、PA的第二个事务尚没有完成,在数据库中不满足可恢复性,所以PC读不到PA写的值2,只能读到PA的write(1)或write(0),因此在事务型数据库中,受到可恢复性的影响,Linearizability-Regular级别和Linearizability-Safe级别一致性的功效等价于线性一致性。
基于上述各个并发级别的定义,可知本申请实施例提供的数据库中的并发级别,能够在不同的并发事务中独自设置,也即只针对单个事务有效,即多种并发级别可以在并发的事务中并存。“隔离性”的语义是让本事务自己在某个隔离级别下保持该隔离级别的语义,这使得隔离性具备有与本事务挂钩的语义,而和其他事务无关。
并发一致性模型的多种一致性级别,可以从三个角度进行区分:
系统角度:各种一致性在一个系统内部,同时保持不同事务处于不同的并发一致性级别,使得系统同时具备多个一致性状态,这使得系统处于“分裂”状态,故不可从系统的角度定义并发一致性模型的多种一致性级别的语义。
用户角度:不同用户的事务执行,对于不同用户而言,其所操作的对象对于该用户而言,保持一种一致的视角,是可行的方式;此种方式即类似“隔离级别”的语义,即把并发一致性模型的多种一致性级别按用户的角度局部化,因此可从该进度定义并发一致性模型的多种一致性级别,使得并发一致性模型的多种一致性级别可以在并发的事务中并存。
基于系统的用户角度:在同一段时间内,既要在系统层面保持不处于“分裂”状态,又要满足用户角度的一致性,这是一个两难的情况。利用系统级参数pmodel定义阶段性一致性,按前述定义的强弱级别,给出一致性级别生效的算法如下:
强一致性有效:只包括强一致性级别,此时需要全局时钟保证全局的一致性,因此只能在强一致性级别下的各个级别在同一个时间阶段内并存。
非强一致性有效:除了强一致性级别的其他级别,包括可串行化以及更弱的其他级别,因为不依赖全局时钟,因此各个级别在同一个时间阶段内并存。
定义pmodel=UM,即用户模式,强制并发一致性模型的所有的一致性级别可以并存,但事实上存在不一致的问题。
定义pmodel=SFM,即强混合模式,允许强一致性级别下的各个级别在同一个时间阶段内并存;定义pmodel=WFM,即弱混合模式,允许串行化以及更弱的其他级别并存。
通过上述对系统级参数pmodel的定义,能够提供一种数据库系统内并存的并发一致性级别,使得并发一致性模型的多级一致性级别具备有与本事务挂钩的语义,从而能够在并发的事务中并存。
图4是本申请实施例提供的一种事务处理方法的流程图。参见图4,该实施例应用于数据库系统,该数据库系统可以是单机系统或者分布式系统,本申请实施例仅以单机系统的节点设备为例进行说明,该实施例包括下述内容。
401、节点设备响应于目标事务的读写操作,获取该目标事务的读集和写集。
其中,目标事务可以是全局事务,也可以是局部事务,本申请实施例以目标事务为局部事务为例进行说明。
在一些实施例中,节点设备与终端建立会话(Session),该会话用于处理该目标事务,节点设备接收终端发送的目标事务的执行请求,响应于该执行请求执行目标事务的读写操作,并获取该目标事务的读集和写集,其中,该读集用于存储相对于目标事务可见的待读取数据项,该写集用于存储该目标事务的待写入数据项。
可选地,终端可以是用户所对应的任一电子设备,包括但不限于:智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱或者智能手表中至少一项,本申请实施例不对终端的类型进行具体限定。
可选地,在终端上可以安装有应用客户端,该应用客户端可以是能够提供数据服务的任一客户端,例如,该应用客户端可以是支付应用客户端、外卖应用客户端、打车应用客户端或者社交应用客户端中至少一项,本申请实施例不对应用客户端的类型进行具体限定。
在一些实施例中,在会话建立阶段,终端上的应用客户端可以通过下述方式与节点设备建立会话:应用客户端发出目标事务Ti的执行请求,元信息系统检查当前客户端是否已经与节点设备建立会话,如果已建立会话,则复用当前已建立的会话;否则,该节点设备与该应用客户端建立会话关系。
402、节点设备响应于该目标事务的验证指令,确定该目标事务的逻辑开始时刻和逻辑提交时刻。
在一些实施例中,在目标事务执行完毕后,进入目标事务的验证阶段,节点设备响应于目标事务的验证指令,从目标事务的事务状态列表中读取逻辑开始时刻Bts和逻辑提交时刻Ets。前述实施环境已介绍过每个事务涉及到两个全局时钟,这里不做赘述。
在一些实施例中,在该验证阶段,节点设备需要验证目标事务的逻辑开始时刻Bts和逻辑提交时刻Ets是否满足目标事务的并发一致性级别,下面将对各个级别的验证过程进行说明。
ⅰ)串行化
节点设备响应于该并发一致性级别为串行化,获取该目标事务Ti的并发事务Tj;响应于该目标事务的逻辑提交时刻小于该并发事务的逻辑开始时刻(Ti.ets<Tj.bts),或者该目标事务的逻辑开始时刻大于该并发事务的逻辑提交时刻(Tj.ets<Ti.bts),获取该目标事务所属会话的最新已完成事务时间戳Newts;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳(Ti.ets ≤ Newts),确定符合该并发一致性级别。
由于在串行化级别中,任何两个事务都需要满足串行排队执行,因此节点设备需要查询到目标事务的所有并发事务(可能是零个、一个或者多个),如果没有并发事务,则通过验证,执行步骤403,如果存在至少一个并发事务,需要验证目标事务与各个并发事务之间均能够串行执行,由于逻辑开始时刻和逻辑提交时刻能够构成一个逻辑时间区间,验证是否能够串行执行相当于验证目标事务和各个并发事务的逻辑时间区间之间是否存在交集,如果均不存在交集,则通过验证,执行步骤403,否则,回滚目标事务。
ⅱ)严格化
节点设备响应于该并发一致性级别为严格化且该目标事务为写事务,获取该目标事务Ti的并发写事务Tj;响应于该目标事务的逻辑提交时刻小于该并发写事务的逻辑开始时刻(Ti.ets<Tj.bts),或者该目标事务的逻辑开始时刻大于该并发写事务的逻辑提交时刻(Tj.ets<Ti.bts),获取该并发写事务的并发只读事务Tk;响应于该并发只读事务的逻辑开始时刻大于该并发写事务的逻辑开始时刻(Tj.bts<Tk.bts),获取该目标事务所属会话的最新已完成事务时间戳Newts;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳(Ti.ets ≤ Newts),确定符合该并发一致性级别。
由于在严格化级别中,任何两个并发的写事务需要保持串行执行,因此如果目标事务为写事务,那么只需要查询到目标事务的所有并发写事务,并验证两个并发的写事务之间保持串行执行即可,此外,还需要通过其并发写事务的并发只读事务,来获取目标事务的间接并发事务,从而基于时钟验证能够避免未来读异常的发生。
ⅲ)线性化
节点设备响应于该并发一致性级别为线性化且该目标事务为写事务,获取该目标事务Ti的并发写事务Tj;响应于该目标事务和该并发写事务通过可串行化验证,获取该并发写事务的并发只读事务Tk;响应于该并发只读事务的逻辑开始时刻大于该并发写事务的逻辑开始时刻(Tj.bts<Tk.bts),获取该目标事务所属会话的最新已完成事务时间戳Newts;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳(Ti.ets ≤ Newts),确定符合该并发一致性级别。
由于在线性化级别中,任何两个写事务之间无需串行执行,但并发写事务之间需要验证可串行化,因此只需要在目标事务为写事务的时候,验证目标事务是否与并发写事务满足可串行化即可,其他步骤与严格化级别类似,这里不做赘述。
ⅳ)顺序化
节点设备响应于该并发一致性级别为顺序化,获取该目标事务Ti的并发事务Tj;响应于该目标事务和该并发事务通过可串行化验证,确定与该目标事务属于同一会话的第一事务Ta;响应于该目标事务的逻辑提交时刻小于该第一事务的逻辑开始时刻(Ti.ets<Ta.bts),获取该会话的最新已完成事务时间戳Newts;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳(Ti.ets ≤ Newts),确定符合该并发一致性级别;其中,若该目标事务与该第一事务具有因果关系,则调整该因果关系中结果事务的逻辑开始时刻大于原因事务的逻辑提交时刻。
由于顺序化级别中任何类型的事务都可以并发或者并行执行,因此只需要对并发事务进行可串行化验证即可,但在顺序化级别中还需要额外保证同一个会话内的事务保持递增,也即能够实现考虑了偏序关系的可串行化。
ⅴ)可串行化
节点设备响应于该并发一致性级别为可串行化,获取该目标事务Ti的并发事务Tj;响应于该目标事务和该并发事务通过可串行化验证,确定与该目标事务属于同一会话的第一事务Ta;响应于该目标事务的逻辑提交时刻小于该第一事务的逻辑开始时刻且该逻辑开始时刻小于或等于该逻辑提交时刻(Ti.ets<Ta.bts且Ti.bts<Ti.ets),确定符合该并发一致性级别。
可串行化级别与顺序化级别同理,但是不考虑偏序关系,这里不做赘述。
ⅵ)因果可重复读
节点设备响应于该并发一致性级别为因果可重复读,获取与该目标事务Ti具有因果关系且以该目标事务为因的结果事务Tj;调整该结果事务的逻辑开始时刻大于该目标事务的逻辑提交时刻(Ti.ets<Tj.bts),确定符合该并发一致性级别。
由于因果可重复读级别中,虽然无需验证可串行化,但是需要保证任何两个具有因果关系的事务有序,因此需要根据目标事务的时钟,对结果事务的时钟进行调整,以确保不存在读偏序异常。
ⅶ)可重复读、读已提交以及读未提交
节点设备响应于该并发一致性级别为可重复读、读已提交或者读写未提交,确定符合该并发一致性级别。
由于在可重复读、读已提交以及读未提交中,无需考虑偏序关系,也无需进行可串行化验证,因此执行下述步骤403即可。
403、节点设备响应于该逻辑开始时刻和该逻辑提交时刻符合该目标事务的并发一致性级别,基于该写集更新该逻辑开始时刻。
在一些实施例中,节点设备获取该写集中的至少一个数据项的至少一个待写事务信息WT,该至少一个待写事务信息WT分别用于标识正在修改该至少一个数据项的事务;响应于该至少一个待写事务信息WT均为空,调整该逻辑开始时刻;响应于该至少一个待写事务信息WT中的任一待写事务信息WT不为空,回滚该目标事务。
在一些实施例中,当所有数据项的WT均为空时,节点设备对逻辑开始时刻进行如下调整:对于该至少一个数据项中的任一数据项,将该任一数据项的待写事务信息获取为该目标事务的事务标识;将该逻辑开始时刻更新至大于该任一数据项的最大读事务时间戳,该最大读事务时间戳用于表示读取过该任一数据项的事务的逻辑提交时刻中的最大值;响应于更新后的逻辑开始时刻和该逻辑提交时刻符合该目标事务的并发一致性级别,基于活跃事务集合调整该逻辑开始时刻,该活跃事务集合用于标识已开始执行但未提交完毕的事务;响应于更新后的逻辑开始时刻和该逻辑提交时刻不符合该目标事务的并发一致性级别,回滚该目标事务。
在一些实施例中,对写集中的每一个数据项y,节点设备查看数据项y的待写事务信息WT是否为空,如果不为空,说明存在其他事务正在修改数据项y并且该其他事务已经进入了验证节点,则回滚目标事务Ti以消除写写冲突;否则,如果为空,则先对数据项y的待写事务信息WT加锁,防止其他并发事务并发修改数据项y,例如,对数据项y施加建议锁,这样能够只互斥对数据项y的WT的修改操作,而使得针对数据项y的只读操作能够正常执行。
在一些实施例中,在加锁完毕后,节点设备将数据项y的待写事务信息WT更新为目标事务Ti的事务标识Ti.TID,并将Ti.bts更新至大于数据项y的最大读事务时间戳Rts,其中,Rts记录读取过该数据项y的所有事务的逻辑提交时刻中的最大值,例如,另Ti.bts=max(Ti.bts,y.cts+1),其中,Cts是指产生该数据项y的事务最终的逻辑提交时刻。在上述过程中,能够通过调整逻辑开始时刻来消除读写冲突。
在一些实施例中,节点设备还可以使用无锁的CAS(Compare And Swap,比较与交换)技术来为数据项y的待写事务信息WT赋值,以提高系统性能。
在一些实施例中,该活跃事务集合包括第一事务集合和第二事务集合,该第一事务集合用于标识处于提交中状态或者验证通过状态的事务,该第二事务集合用于标识处于运行中状态的事务,在此基础上,节点设备在基于活跃事务集合调整该逻辑开始时刻时,采取下述方式:将该逻辑开始时刻更新至大于该第一事务集合中的最大逻辑提交时刻;响应于更新后的逻辑开始时刻小于或等于该逻辑提交时刻,将该第二事务集合中的事务的逻辑提交时刻调整至小于该更新后的逻辑开始时刻;响应于该更新后的逻辑开始时刻大于该逻辑提交时刻,回滚该目标事务。
在一些实施例中,节点设备获取所有的已处于提交中状态或者验证通过状态的第一事务集合T1,调整目标事务Ti的逻辑开始时刻Ti.bts,使其大于T1中各个事务的T1.ets,也即令Ti.bts=max(Ti.bts , T1.ets+1)。接着,节点设备获取所有的处于运行中状态的第二事务集合T2,调整T2中各个事务的T2.ets,使其小于目标事务Ti的逻辑开始时刻Ti.bts,也即令T2.ets=min(T2.ets, Ti.bts-1)。
在上述过程中,通过第一事务集合,能够消除本事务写、其他已经完成的事务过去发生的读之间的读写冲突,使得本事务的写操作发生推后到已经完成读的事务的读操作之后。通过第二事务集合,能够消除本事务写、其他正在进行的事务读之间的读写冲突,使得其他事务读不到本事务写的数据。
在一些实施例中,响应于该第二事务集合中任一事务的逻辑开始时刻大于调整后的该逻辑提交时刻,回滚该任一事务。也即是说,在验证目标事务时,如果调整后的第二事务集合中检测到逻辑时间区间不合法的事务,那么同时立刻回滚第二事务集合中的这一事务,能够进一步提升系统性能。
404、节点设备响应于更新后的逻辑开始时刻小于或等于该逻辑提交时刻,提交该目标事务。
在一些实施例中,在目标事务的提交阶段,节点设备将目标事务的写集中的数据落盘,并持久化到数据库中,对读集中的每个数据项x,修改数据项x的最大读事务时间戳Rts,使其大于或等于Ti.cts,即令x.rts=max(x.rts , Ti.cts),其中,Ti.cts是指经过多次调整后最终提交时目标事务的逻辑提交时刻。然后,从数据项x的活跃事务集合RTlist(x)中将自身事务Ti删除;对写集中的每个数据项y,更新y的新版本的wts和rts,首先令新版本的wts=Ti.cts,其次令新版本的rts=max(x.rtx,Ti.cts),将新版本持久化到数据库中,并修改Flag(一个参数)。接着,将数据项y的活跃事务集合RTlist(y)清空,将数据项y的待写事务信息WT清空。其中wts为y的新版本的创建时间戳,rts为y的新版本的最大读事务时间戳。
在一些实施例中,节点设备还可以清空目标事务Ti的读集和写集,并更新LocalTS(本地事务状态列表)中T的Bts=T.cts,并将目标事务Ti的事务状态置为已提交状态(Committed)。
上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。
本申请实施例提供的方法,通过在目标事务的执行阶段,获取目标事务的读写集合,在验证阶段,根据目标事务的逻辑开始时刻和逻辑提交时刻,验证目标事务是否符合自身的并发一致性级别,并基于预定策略动态更新逻辑开始时刻,使得最终更新后的逻辑开始时刻和逻辑提交时刻能够在合法的情况下,不会发生自身的并发一致性级别所不允许的数据异常,进而提交目标事务,能够使得整个系统内不同的事务对应于不同的并发一致性级别,大大提升的数据异常检测准确程度,提高了事务处理效率以及数据库系统的性能。
上述实施例中,仅以单机系统为例对并发控制访问算法进行了一些基本的介绍,在本申请实施例中,将以一种去中心化的分布式系统为例,详细阐述各种并发级别的并发访问控制算法。
首先,介绍一种去中心化算法。
在事务处理的过程中,中心化的组件包括两种,一种是时钟生成器,一种是事务协调器。
时钟生成器:即前述的全局时钟,也即全局时间戳生成集群。相对地,局部时钟是一种非中心化的组件。
事务协调器:事务验证阶段,需要对分布式事务是否符合事务一致性进行可串行化或无数据异常的验证,因此依赖于一个事务协调器,也即协调节点设备、协调者。
而去中心化的算法,是指尽量不依赖于中心化的组件而实现算法过程的推进。
表2示出了基于并发一致性模型的去中心化算法的特征及实现,如表2所示。
Figure 378513DEST_PATH_IMAGE009
去中心化的算法过程,主要分为以下四个阶段。
阶段一、事务开始获取Bts即建立事务的快照阶段:对于强一致性级别、中间型一致性级别,都需要在全局的角度建立读数据的视角,因此目标事务的Bts需要从全局时钟获取,可选地,全局时钟如上述实施环境中涉及的全局时间戳生成集群,是一个中心化的组件,可选地,全局事务还可以采用Truetime机制构成一个去中心化的组件。
阶段二、事务执行对数据项进行读写即事务语义实现操作阶段:不涉及是否中心化的工作。
阶段三、事务提交前的事务合法性的验证阶段:在此点上采取去中心化的验证方式,利用TO(TimestampOrdering,时间戳排序)算法的DTA(Dynamic TimestampAllocation,动态时间戳分配)算法,实现去中心化的事务验证技术。
阶段四、事务提交或回滚操作收尾阶段:事务的提交操作,对于强一致性级别、中间型一致性级别,都需要在全局的角度于数据项上建立事务的全局提交时间戳。其他的一致性级别,只需要获取局部时间戳(对于分布式事务,从事务协调器获取局部时间戳;对于局部事务,从局部节点获取局部时间戳)。
以下,将按照上述去中心化算法中涉及到的四个阶段来分别讨论分布式系统内,基于并发一致性模型的事务处理流程。
(一)事务开始获取Bts即建立事务的快照阶段
目标事务T由客户端Client发送协调节点设备(也即协调器)上。目标事务T在协调节点设备上完成初始化,初始化包含以下几个步骤:
首先,协调节点设备为目标事务T分配一个全局唯一的事务标识TID(也即事务号)。通过该TID可以表示确定事务源自某个特定的会话,在分布式系统下,将通过此点识别某些事务是否源自同一个会话的事务(即识别偏序关系的情况)。
在一些实施例中,利用“TID”表示“事务是否源自同一个会话”的方法有很多种,如用一个128bit的TID的前96bit表示会话,或会话几种注册在一个中心节点,然后统一在中心节点唯一编号等。
其次,协调节点设备在事务状态列表中记录目标事务T的状态,其Status状态置为Grunning,Bts和Ets分别初始化为0和+∞。
(二)事务执行对数据项进行读写即事务语义实现操作阶段
目标事务T在协调节点设备上完成初始化后,开始其执行阶段。
在读取阶段,目标事务T按照执行逻辑读取所需数据项,并将读取到的数据项更新写到目标事务T的本地内存即协调节点设备的本地内存。当目标事务T需要读取数据项x时,执行以下步骤。
2.1、目标事务T的协调节点设备需要向数据项x所在的数据节点设备RM(资源管理器,事务的参与者即子事务的执行者)发送请求读数据项x的读数据请求消息ReadRequestMessage,简称为rrqm,rrqm四个字段的值分别为如以下2.1.1-2.1.4所示。
2.1.1、TID,目标事务T的TID。
2.1.2、Bts,如果是可串行化级别之上的级别,则协调节点设备从全局时钟获取时间戳值;否则,是目标事务T在协调节点设备上的Bts;对于可串行化以及更弱的级别而言,是协调节点设备上的HLC(混合逻辑时钟)确定的时间值。在一些实施例中,可串行化以及更弱的级别也可以使用全局时钟实现,但考虑消息同步效率的因素,本申请实施例以采用HLC时钟的方式为例说明,但这不表明本申请实施例完全对可串行化以及更弱的级别排斥使用全局时钟。
2.1.3、Ets,时钟获取方式与Bts类似,这里不做赘述。
2.1.4、ReadPlan,目标事务T读数据项x的查询计划。
2.2、数据项x所在的数据节点设备RM收到消息rrqm后,按先后顺序执行以下步骤。
2.2.1、RM检查本地的LocalTS(本地事务状态表)中是否包含目标事务T的信息:如果没有,则在其上初始化目标事务T的信息,即在LocalTS中插入一条记录,值分别是rrqm.TID、rrqm.Bts、rrqm.Ets和rrqm.Running;如果有,即目标事务T读取数据项x之前,还访问过该RM上的其他数据项,则更新T信息,使T.Bts=max(T.Bts,rrqm.Bts)、T.Ets=min(T.Ets, rrqm.Ets),也即将LocalTS中目标事务T的Bts更新为原有值和rrqm中携带值之间的最大值,将Ets更新为原有值和rrqm中携带值之间的最小值。
2.2.2、RM检查T.Bts是否小于或等于T.Ets,是则继续读取数据项x,否则,更新LocalTS中目标事务T的状态为Aborted,即T.Status=Aborted,并向T的协调节点设备返回回滚Abort消息,即向目标事务T的host RM(协调节点设备)发送读请求反馈消息rrpm,其中rrpm.IsAbort=1,也即指示回滚目标事务T。
2.2.3、RM按照目标事务T的[Bts, Ets]这一逻辑时间区间,从数据项x的版本状态集合中找到合适的可见版本,即查询相对于目标事务T可见的目标数据项。寻找数据项x的目标数据项,应首先从最新提交的数据版本(简称为最新版本)开始检查,如果T.ets大于最新版本的wts,该最新版本即为目标数据项。否则,则不是目标数据项,需要查找最新版本的上一个版本,以此类推,直到找到第一个满足T.ets>wts的数据版本x.v为止,将数据版本x.v获取为目标数据项,其中wts为x.v的创建时间戳。
2.2.4、RM找到目标数据项x.v后,需要修改目标事务T的Bts,使T.Bts>x.v.wts,以消除写读异常;另外如果找到的版本为x的最新版本,则需要执行以下几步操作:首先,检查x.v对应的待写事务信息WT(WT记录了正在修改x,并且通过验证的事务的事务标识)是否为空,如果不为空(假定值为TID1,TID1对应的事务为T1),则调整目标事务T的Ets,使其满足T.Ets<T1.Bts,以消除读写冲突;其次,将目标事务T的事务标识T.TID添加到x.v的活跃事务集合RTlist中;最后,将x添加到目标事务T的本地读集中。
2.2.5、RM向目标事务T的协调节点设备返回读请求反馈消息,ReadReplyMessage,简称为rrpm。其中rrpm的Bts和Ets分别记录了当前RM上事务T的逻辑时间戳上下界,Value记录了所读数据项的值。
2.3、目标事务T的协调节点设备收到RM读请求反馈消息rrpm后按序进行如下处理。
2.3.1、协调节点设备检查收到的消息是否为Abort消息,即检查rrpm.IsAborts是否等于1,是进入全局回滚阶段;否则继续执行步骤2.3.2。
2.3.2、协调节点设备更新事务状态列表中目标事务T的状态:更新目标事务T的T.Bts=max(T.Bts, rrpm.Bts)、T.Ets=min(T.Ets, rrpm.Ets),也即目标事务T的Bts更新为原有值和rrpm中携带值之间的最大值,将Ets更新为原有值和rrpm中携带值之间的最小值。
2.3.3、协调节点设备检查事务状态列表中T.Bts是否大于T.Ets,是则进入到全局回滚阶段;否则继续事务的执行。
需要说明的是,如果协调节点设备决定回滚事务T,需要修改事务状态列表中目标事务T的状态为Gaborting,通知相关子节点(与目标事务T相关的所有RM)执行局部回滚。
经分析可知,在目标事务T的读取阶段,通信主要在目标事务T的协调节点设备和相关子RM之间发生。目标事务T每成功读取一次数据需要两次通信:目标事务T的协调节点设备发送读数据请求信息rrqm到相关子RM上;相关子RM发送读请求反馈信息rrpm到协调节点设备上。因此,读取阶段最多进行2n次通信,最大通信量为n×(请求消息rrqm大小+响应消息rrpm大小),其中n为远程读取的次数。
在一些实施例中,目标事务T需要某个相关子RM的多个数据项时,可以将这些数据项的读数据请求信息rrqm打包发送,以达到批量读取这些数据,从而能够节省通信次数。
当目标事务T在读取阶段读取完所需数据,并将更新写到本地内存后进入到验证阶段。
(三)事务提交前的事务合法性的验证阶段
在验证阶段,目标事务T验证自身是否同其他事务存在冲突,并根据验证阶段结果决定目标事务T最终是提交还是回滚。目标事务T的验证过程包括以下内容。
3.1、目标事务T的协调节点设备修改事务状态列表中目标事务T的状态为:Gvalidating;并向目标事务T涉及的每个相关子RM发送验证请求消息,ValidateRequestMessage,简称为vrm,vrm中的Bts和Ets分别记录了目标事务T在事务状态列表中事务逻辑时间戳上下界,可选地,随验证请求消息vrm一同发往RM的还包括RM的本地写集。
3.2、目标事务T涉及到的每个相关子RM收到验证请求消息vrm后,执行本地验证操作,本地验证操作需要按序执行如下步骤。
3.2.1、RM更新LocalTS中目标事务T的T.Bts=max(T.Bts, vrm.Bts)、T.Ets=min(T.Ets, vrm.Ets),也即目标事务T的Bts更新为原有值和vrm中携带值之间的最大值,将Ets更新为原有值和vrm中携带值之间的最小值。需要注意的是,这里更新的是本地事务状态表中事务的逻辑时间戳信息,用于事务并发访问控制,即用于保证事务一致性。
3.2.2、RM根据各级并发一致性级别的定义以及数据库系统当前pmodel值的设定情况,对各种并发一致性级别下目标事务T的bts和ets值进行检查。在一些实施例中,如果并发一致性级别强于可串行化,还需要验证事务的bts不可小于本会话的newts,如果小于则需要回滚目标事务T,因为诸如顺序一致性不符合偏序关系所要求的因果一致条件。在一些实施例中,如果并发一致性级别等于可串行化,还可以检查T.Bts是否大于T.Ets,是则验证失败,向目标事务T的协调节点设备返回Abort消息(进而引发全局回滚),即发送本地验证反馈消息lvm,其中lvm.IsAbort=1;否则,说明符合并发一致性级别,进入下一步的验证。
3.2.3、RM找到写集中的每一个数据项y,然后查看数据项y的待写事务信息WT是否为空。如果不为空,则说明有其他事务正在修改数据项y,并且该其他事务已经进入了验证阶段,需要回滚目标事务T以消除写写冲突,即向目标事务T的协调节点设备发送Abort消息;否则继续下一步操作,比如对数据项y的待写事务信息WT加锁,防止其他并发事务并发修改数据项y。可选地,RM在数据项y上施加建议锁,只互斥对数据项y的待写事务信息WT的修改操作。
3.2.4、RM更新写集中每个数据项y的待写事务信息WT为T.TID(表示进入验证阶段的目标事务T要修改数据项y),并调整本地事务状态表中目标事务T的逻辑开始时刻,使其大于数据项y的最大读事务时间戳rts,即令T.Bts =max(T.Bts, y.cts+1),以便于消除读写冲突。可选地,RM还可以使用无锁的CAS技术为数据项y的待写事务信息WT赋值,以提高系统性能,或者,也可以在加锁后再为数据项y的待写事务信息WT赋值,本申请搜索框不对WT是否加锁进行具体限定。
3.2.5、RM根据各级并发一致性级别的定义以及数据库系统当前pmodel值的设定情况,对各种并发一致性级别下目标事务T的bts和ets值进行检查。在一些实施例中,如果并发一致性级别强于可串行化,还需要验证事务的bts不可小于本会话的newts,如果小于则需要回滚目标事务T,因为诸如顺序一致性不符合偏序关系所要求的因果一致条件。在一些实施例中,如果并发一致性级别等于可串行化,还可以检查T.Bts是否大于T.Ets,是则验证失败,向目标事务T的协调节点设备返回Abort消息(进而引发全局回滚),即发送本地验证反馈消息lvm,其中lvm.IsAbort=1;否则,说明符合并发一致性级别,进入下一步的验证。
3.2.6、RM对写集中每个数据项y,调整目标事务T或者活跃事务集合RTlist中事务的时间戳,以消除读写冲突。调整规则包括下式两种情况。
情况一、本事务写、其他已经完成的事务过去发生的读,使得本事务写操作的发生推后到已经完成读的事务的读操作之后。
在一些实施例中,RM找到所有的已处于提交或者通过本地验证状态的事务T1(第一事务集合),调整目标事务T本身的逻辑开始时刻,使其大于T1中各个事务的Ets,即T.Bts= max(T.Bts, T1.Ets+1)。
在调整T.Bts之后,RM再次检查目标事务T的逻辑时间区间是否依然合法,如果不合法,则返回Abort消息,否则更新T的本地事务状态为Validated,即T.Status=Validated,并进入下一步调整。需要说明的是,检测逻辑时间区间是否合法是指,如果逻辑开始时刻T.Bts小于或等于逻辑提交时刻T.Ets,则逻辑时间区间合法,否则,如果逻辑开始时刻T.Bts大于逻辑提交时刻T.Ets,则逻辑时间区间不合法。
情况二、本事务写,其他正在进行的事务读,使得其他事务读不到本事务写的数据。
在一些实施例中,RM找出所有处于Running状态的事务T2(第二事务集合),调整T2中各个事务的逻辑时间区间,使其逻辑提交时刻小于目标事务T的Bts。即T2.Ets=min(T2.Ets, T.Bts-1)。
在一些实施例中,如果在经过逻辑时间区间的调整之后,T2中存在某一事务的Bts>Ets,则可通知T2中这一事务全局回滚。
3.2.7、RM确定目标事务T已经通过本地验证,根据数据项y的更新值,创建y的新版本,但需要设置flag(一个参数),表示新版本并未全局提交。
3.2.8、RM向T的协调节点设备返回T的本地验证反馈消息lvm,其中lvm的Bts和Ets分别记录了事务T在本地RM上的逻辑时间戳上下界;其中,需要注意的是,如果目标事务T本地验证失败,需要更新LocalTS中目标事务T的状态为Aborted,即T.Status=Aborted。
3.3、T的协调节点设备收到所有RM的本地验证反馈消息lvm后,根据收到的消息来决定目标事务T能否通过全局验证,其主要分为以下几种情况。
3.3.1、如果含有IsAbort字段等于1的lvm,表明目标事务T没有通过全部的本地验证,协调节点设备则决定全局回滚目标事务T;同时更新事务状态列表中目标事务T的状态为:Gaborting;通知所有子节点RM完成本地回滚,即向相关RM发送写入提交/回滚消息coarm,其中coarm.IsAbort=1。
3.3.2、否则,协调节点设备将收到的所有目标事务T的逻辑时间区间求交集,得到一个新的全局逻辑区间[T.Bts, T.Ets],如果T.Bts>T.Ets,则决定全局回滚事务,更新事务状态列表中目标事务T的状态为Gaborting,并通知所有子节点完成回滚;否则进入下一步。
3.3.3、协调节点设备确定T通过验证,并从全局逻辑区间[T.Bts, T.Ets]随机选择一个时间点作为T的最终提交时间戳为cts赋值。例如,选择一个T.Bts作为T的逻辑提交时间戳。
3.3.4、协调节点设备更新事务状态列表中T.Bts=T.Ets=T.cts;更新事务状态列表中事务的状态为:Gcommitting;在一些实施例中,协调节点设备此时还可以进一步将全局事务状态记为Gcommitted,同时请求全局时间戳生成集群分配最终全局时间戳,记录到全局事务状态的Gts字段中。
3.3.5、协调节点设备通知相关RM完成提交,即向相关RM发送写入提交/回滚消息coarm,其中coarm.IsAbort=0,coarm.Cts和coarm.Gts分别记录了事务的最终提交时间戳和最终全局时间戳。
经分析可知,在目标事务T的验证阶段,通信主要在目标事务T的协调节点设备和相关子RM之间发生。通信主要包含以下两步:目标事务T的协调节点设备向每个相关子RM发送验证请求消息vrm及RM的本地写集;每个相关子RM发送本地验证反馈消息lvm到目标事务T的协调节点设备。
因此,验证阶段最多需要2m次通信,通信量的大小为m×(请求验证消息大小+验证反馈消息大小)+全局写集大小,其中m为与T相关的子RM的个数。
(四)事务提交或回滚操作收尾阶段
在该收尾阶段,目标事务T根据验证阶段的验证结果,选择执行写入提交还是回滚。
4.1、如果目标事务T通过验证则进入写入提交阶段,即将目标事务T对数据的更新持久化到数据库中,并做一些后续清理工作。本地RM在写入提交阶段需要执行如下操作。
4.1.1、RM对读集中的每个待读取数据项x,修改x的rts,使其大于或等于T.cts,即x.rtx=max(x.rtx, T.cts);从RTlist (x)中将自己删除。
4.1.2、RM对写集中的每个待写入数据项y,更新y新版本的wts和rts,其中令wts =T.cts,令rts=max(x.rtx, T.cts);将y持久化到数据库中,并修改flag(一个参数);将y的RTlist列表内容清空;将y的WT内容清空。
4.1.3、RM清空目标事务T的本地读集和写集。
4.1.4、RM更新LocalTS中T的Bts=T.cts,以及状态为committed(此时本地事务状态表,仅用于事务一致性,没涉及全局事务状态的同步)。
4.1.5、RM向目标事务T的协调节点设备返回完成提交成功的ACK(AcknowledgeCharacter,确认字符)。
可选地,目标事务T的协调节点设备在收到所有RM完成提交的ACK后,将全局事务状态修改为Gcommitted。并通知每个RM可以从本地事务状态表中清理目标事务T的状态。
4.2、如果目标事务T没有通过验证,进入全局回滚阶段,即将目标事务T回滚,并做相应的清理工作,清理工作包括如下内容。
4.2.1、RM对读集中的每个待读取数据项x,从RTlist(x)中将目标事务T删除。
4.2.2、RM对写集中的每个待写入数据项y,清理新创建的版本y,并将y的待写事务信息WT内容清空。
4.2.3、RM清空目标事务T的本地读集和写集。
4.2.4、RM更新目标事务T的本地事务状态为Aborted。
4.2.5、RM向目标事务T的协调节点设备返回完成回滚的ACK。
可选地,目标事务T的协调节点设备在收到所有RM完成回滚的ACK后,将全局事务状态修改为Gaborted。并通知每个RM可以从LocalTS中清理目标事务T的状态。
经分析可知,在事务T的提交/回滚阶段,通信主要在目标事务T的协调节点设备和相关子RM之间发生,通信主要包含以下两步:目标事务T的协调节点设备向每个相关子RM发送提交/回滚请求消息coarm;每个相关子RM向协调节点设备发送提交/回滚完成相应消息ACK。
因此,提交/回滚阶段最多进行2m次通信,通信量的大小为m×(提交/回滚请求消息大小+提交/回滚请求消息大小),其中m为事务T相关子RM的个数。
在一些实施例中,协调节点设备可以批量的向RM发送清理消息来减少通信次数。
上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。
在本申请实施例中,利用TO算法中的DTA技术,初始化事务的逻辑开始时刻和逻辑提交时刻之后,根据不同的情况可以动态调整其逻辑开始时刻或者逻辑提交时刻,并混合了MVCC、DTA和OCC技术,对并发一致性模型的多种一致性,进行事务并发访问控制。其中,主要应用了OCC的算法框架,并结合DTA减少网络传输的事务数据信息、并提高分布式事务的验证效率,从而提升分布式事务的并发处理能力。结合MVCC实现无锁的数据读写,从而提升局部节点的并发处理能力。
表3示出了两事务T1和T2在可串行化级别以及更强程度的一致性级别的实现差异,也即提供了基于DTA的事务协调者验证阶段的去中心化算法,本申请实施例定义了完备的多种一致性的计算框架,包括完备全面的一致性级别、一致性强弱分类方法、一致性并存的计算环境与方式,各种一致性的实现技术,这使得并发一致性模型体系完备而充实,基于Bts和Ets的事务属性定义,融合了分布式一致性和事务一致性的表达方式,并把分布式一致性和事务一致性的算法有机统一在一起,使得事务理论能够迁移到分布式系统中。
Figure 381104DEST_PATH_IMAGE010
图5是本申请实施例提供的一种事务处理方法的交互流程图,请参考图5,在上述多种并发级别的并发访问控制算法的基础上,提供了分布式系统下协调节点设备如何与数据节点设备交互以执行目标事务的过程。
在步骤501中,终端与协调节点设备建立用于处理目标事务的会话。
在步骤502中,协调节点设备对目标事务进行初始化。
可选地,协调节点设备为目标事务分配事务标识,并在事务状态列表中将事务状态Status置为Grunning,将目标事务的T.Bts初始化为0,将目标事务的T.Ets初始化为+∞。
上述步骤501-502也即建立目标事务的快照阶段,这里不做赘述。
在步骤503中,协调节点设备向数据节点设备发送目标事务的读数据请求消息rrqm。
可选地,协调节点设备可以基于应用客户端发起的请求,优化SQL并生成目标事务的物理执行计划,将执行计划进行分解,分别发送给目标事务所涉及的数据节点设备,数据节点设备的数量可以为一个或多个,在本申请实施例中不对数据节点设备的数量进行具体限定。
可选地,读数据请求消息rrqm包括4个字段:TID(事务标识),Bts(逻辑开始时刻)、Ets(逻辑提交时刻)、ReadPlan(查询计划)。
在步骤504中,数据节点设备响应于该读数据请求消息rrqm,查询相对于目标事务可见的目标数据项,向协调节点设备返回目标事务的读请求反馈消息rrpm。
可选地,数据节点设备将目标事务T的信息维护到本地事务状态表LocalTS中,对逻辑时间区间[T.Bts,T.Ets]进行合法性验证,验证通过后,从待读取的各个数据项的最新版本开始,查找得到首个创建时间戳小于T.Ets的数据版本(也即目标数据项),并根据目标数据项的创建时间戳修改T.Bts以消除读写冲突和写读异常,向协调节点设备返回读请求反馈消息rrpm。
上述步骤503-504也即目标事务语义实现操作阶段,这里不做赘述。
在步骤505中,协调节点设备汇总数据节点设备返回的读请求反馈消息rrpm,向数据节点设备发送目标事务的验证请求消息vrm。
可选地,协调节点设备汇总各个读请求反馈消息rrpm后,遍历IsAborts字段是否为1,如果为1则进入全局回滚阶段,否则更新目标事务的Bts和Ets后再次验证逻辑时间区间的合法性,在验证通过后发送验证请求消息vrm(也即验证指令),进入到事务验证阶段。
在步骤506中,数据节点设备响应于该验证请求消息vrm,对目标事务进行冲突验证,向协调节点设备返回目标事务的本地验证反馈消息lvm。
可选地,数据节点设备对目标事务T的逻辑时间区间[T.Bts,T.Ets]再次进行合法性验证,验证通过后,进一步验证该逻辑时间区间是否满足并发一致性级别的条件,验证通过后,根据目标事务T的写集,更新目标事务T的Bts,以消除写写冲突和读写冲突,进一步验证更新后的逻辑时间区间是否仍合法,如果合法,向协调节点设备返回本地验证反馈消息lvm。
在步骤507中,协调节点设备汇总数据节点设备的本地验证反馈消息lvm,确定目标事务的全局验证结果。
可选地,协调节点设备汇总各个本地验证反馈消息lvm后,遍历IsAborts字段是否为1,如果为1则进入全局回滚阶段,否则更新目标事务的Bts和Ets后再次验证逻辑时间区间的合法性,在验证通过后发送提交指令,进入到全局提交阶段,否则发送回滚指令,进入到全局回滚阶段。
上述步骤505-507也即事务合法性的验证阶段,这里不做赘述。
在步骤508中,协调节点设备响应于全局验证结果为验证通过,向数据节点设备发送目标事务的提交指令。
在步骤509中,数据节点设备响应于该提交指令,提交目标事务。
上述步骤508-509也即事务提交阶段,这里不做赘述。
在本申请实施例中,利用TO算法中的DTA技术,初始化目标事务的Bts和Ets之后,根据不同的情况可以动态调整其Bts或者Ets,并混合了MVCC、DTA和OCC技术,对并发一致性模型的多种一致性,进行事务并发访问控制。主要应用了OCC的算法框架,并结合DTA减少网络传输的事务数据信息、并提高分布式事务的验证效率,从而提升分布式事务的并发处理能力。结合MVCC实现无锁的数据读写,从而提升局部节点的并发处理能力。
图6是本申请实施例提供的一种事务处理装置的结构示意图,请参考图6,该装置包括:
获取模块601,用于响应于目标事务的读写操作,获取该目标事务的读集和写集;
确定模块602,用于响应于该目标事务的验证指令,确定该目标事务的逻辑开始时刻和逻辑提交时刻;
更新模块603,用于响应于该逻辑开始时刻和该逻辑提交时刻符合该目标事务的并发一致性级别,基于该写集更新该逻辑开始时刻;
提交模块604,用于响应于更新后的逻辑开始时刻小于或等于该逻辑提交时刻,提交该目标事务。
本申请实施例提供的装置,通过在目标事务的执行阶段,获取目标事务的读写集合,在验证阶段,根据目标事务的逻辑开始时刻和逻辑提交时刻,验证目标事务是否符合自身的并发一致性级别,并基于预定策略动态更新逻辑开始时刻,使得最终更新后的逻辑开始时刻和逻辑提交时刻能够在合法的情况下,不会发生自身的并发一致性级别所不允许的数据异常,进而提交目标事务,能够使得整个系统内不同的事务对应于不同的并发一致性级别,大大提升的数据异常检测准确程度,提高了事务处理效率以及数据库系统的性能。
在一种可能实施方式中,基于图6的装置组成,该更新模块603包括:
获取子模块,用于获取该写集中的至少一个数据项的至少一个待写事务信息,该至少一个待写事务信息分别用于标识正在修改该至少一个数据项的事务;
调整子模块,用于响应于该至少一个待写事务信息均为空,调整该逻辑开始时刻;
回滚子模块,用于响应于该至少一个待写事务信息中的任一待写事务信息不为空,回滚该目标事务。
在一种可能实施方式中,基于图6的装置组成,该调整子模块包括:
获取单元,用于对于该至少一个数据项中的任一数据项,将该任一数据项的待写事务信息获取为该目标事务的事务标识;
更新单元,用于将该逻辑开始时刻更新至大于该任一数据项的最大读事务时间戳,该最大读事务时间戳用于表示读取过该任一数据项的事务的逻辑提交时刻中的最大值;
调整单元,用于响应于更新后的逻辑开始时刻和该逻辑提交时刻符合该目标事务的并发一致性级别,基于活跃事务集合调整该逻辑开始时刻,该活跃事务集合用于标识已开始执行但未提交完毕的事务;
该回滚子模块,还用于响应于更新后的逻辑开始时刻和该逻辑提交时刻不符合该目标事务的并发一致性级别,回滚该目标事务。
在一种可能实施方式中,该活跃事务集合包括第一事务集合和第二事务集合,该第一事务集合用于标识处于提交中状态或者验证通过状态的事务,该第二事务集合用于标识处于运行中状态的事务;
该调整单元,用于:将该逻辑开始时刻更新至大于该第一事务集合中的最大逻辑提交时刻;响应于更新后的逻辑开始时刻小于或等于该逻辑提交时刻,将该第二事务集合中的事务的逻辑提交时刻调整至小于该更新后的逻辑开始时刻;
该回滚子模块,还用于响应于该更新后的逻辑开始时刻大于该逻辑提交时刻,回滚该目标事务。
在一种可能实施方式中,该回滚子模块还用于:
响应于该第二事务集合中任一事务的逻辑开始时刻大于调整后的该逻辑提交时刻,回滚该任一事务。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为串行化,获取该目标事务的并发事务;响应于该目标事务的逻辑提交时刻小于该并发事务的逻辑开始时刻,或者该目标事务的逻辑开始时刻大于该并发事务的逻辑提交时刻,获取该目标事务所属会话的最新已完成事务时间戳;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳,确定符合该并发一致性级别。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为严格化且该目标事务为写事务,获取该目标事务的并发写事务;响应于该目标事务的逻辑提交时刻小于该并发写事务的逻辑开始时刻,或者该目标事务的逻辑开始时刻大于该并发写事务的逻辑提交时刻,获取该并发写事务的并发只读事务;响应于该并发只读事务的逻辑开始时刻大于该并发写事务的逻辑开始时刻,获取该目标事务所属会话的最新已完成事务时间戳;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳,确定符合该并发一致性级别。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为线性化且该目标事务为写事务,获取该目标事务的并发写事务;响应于该目标事务和该并发写事务通过可串行化验证,获取该并发写事务的并发只读事务;响应于该并发只读事务的逻辑开始时刻大于该并发写事务的逻辑开始时刻,获取该目标事务所属会话的最新已完成事务时间戳;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳,确定符合该并发一致性级别。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为顺序化,获取该目标事务的并发事务;响应于该目标事务和该并发事务通过可串行化验证,确定与该目标事务属于同一会话的第一事务;响应于该目标事务的逻辑提交时刻小于该第一事务的逻辑开始时刻,获取该会话的最新已完成事务时间戳;响应于该目标事务的逻辑提交时刻大于或等于该最新已完成事务时间戳,确定符合该并发一致性级别;其中,若该目标事务与该第一事务具有因果关系,则调整该因果关系中结果事务的逻辑开始时刻大于原因事务的逻辑提交时刻。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为可串行化,获取该目标事务的并发事务;响应于该目标事务和该并发事务通过可串行化验证,确定与该目标事务属于同一会话的第一事务;响应于该目标事务的逻辑提交时刻小于该第一事务的逻辑开始时刻且该逻辑开始时刻小于或等于该逻辑提交时刻,确定符合该并发一致性级别。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为因果可重复读,获取与该目标事务具有因果关系且以该目标事务为因的结果事务;调整该结果事务的逻辑开始时刻大于该目标事务的逻辑提交时刻,确定符合该并发一致性级别。
在一种可能实施方式中,基于图6的装置组成,该装置还包括:
获取确定模块,用于响应于该并发一致性级别为可重复读、读已提交或者读写未提交,确定符合该并发一致性级别。
上述所有可选技术方案,能够采用任意结合形成本公开的可选实施例,在此不再一一赘述。
需要说明的是:上述实施例提供的事务处理装置在处理事务时,仅以上述各功能模块的划分进行举例说明,实际应用中,能够根据需要而将上述功能分配由不同的功能模块完成,即将计算机设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的事务处理装置与事务处理方法实施例属于同一构思,其具体实现过程详见事务处理方法实施例,这里不再赘述。
图7是本申请实施例提供的一种计算机设备的结构示意图。请参考图7,以计算机设备为终端700为例进行说明,可选地,该终端700的设备类型包括:智能手机、平板电脑、MP3播放器(Moving Picture Experts Group Audio Layer III,动态影像专家压缩标准音频层面3)、MP4(Moving Picture Experts Group Audio Layer IV,动态影像专家压缩标准音频层面4)播放器、笔记本电脑或台式电脑。终端700还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。
通常,终端700包括有:处理器701和存储器702。
可选地,处理器701包括一个或多个处理核心,比如4核心处理器、8核心处理器等。可选地,处理器701采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。在一些实施例中,处理器701包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(CentralProcessing Unit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器701集成有GPU(Graphics Processing Unit,图像处理器), GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器701还包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
在一些实施例中,存储器702包括一个或多个计算机可读存储介质,可选地,该计算机可读存储介质是非暂态的。可选地,存储器702还包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器702中的非暂态的计算机可读存储介质用于存储至少一个程序代码,该至少一个程序代码用于被处理器701所执行以实现本申请中各个实施例提供的事务处理方法。
在一些实施例中,终端700还可选包括有:外围设备接口703和至少一个外围设备。处理器701、存储器702和外围设备接口703之间能够通过总线或信号线相连。各个外围设备能够通过总线、信号线或电路板与外围设备接口703相连。具体地,外围设备包括:射频电路704、显示屏705、摄像头组件706、音频电路707、定位组件708和电源709中的至少一种。
外围设备接口703可被用于将I/O(Input /Output,输入/输出)相关的至少一个外围设备连接到处理器701和存储器702。在一些实施例中,处理器701、存储器702和外围设备接口703被集成在同一芯片或电路板上;在一些其他实施例中,处理器701、存储器702和外围设备接口703中的任意一个或两个在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路704用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路704通过电磁信号与通信网络以及其他通信设备进行通信。射频电路704将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路704包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。可选地,射频电路704通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:城域网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路704还包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏705用于显示UI(User Interface,用户界面)。可选地,该UI包括图形、文本、图标、视频及其它们的任意组合。当显示屏705是触摸显示屏时,显示屏705还具有采集在显示屏705的表面或表面上方的触摸信号的能力。该触摸信号能够作为控制信号输入至处理器701进行处理。可选地,显示屏705还用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏705为一个,设置终端700的前面板;在另一些实施例中,显示屏705为至少两个,分别设置在终端700的不同表面或呈折叠设计;在再一些实施例中,显示屏705是柔性显示屏,设置在终端700的弯曲表面上或折叠面上。甚至,可选地,显示屏705设置成非矩形的不规则图形,也即异形屏。可选地,显示屏705采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
摄像头组件706用于采集图像或视频。可选地,摄像头组件706包括前置摄像头和后置摄像头。通常,前置摄像头设置在终端的前面板,后置摄像头设置在终端的背面。在一些实施例中,后置摄像头为至少两个,分别为主摄像头、景深摄像头、广角摄像头、长焦摄像头中的任意一种,以实现主摄像头和景深摄像头融合实现背景虚化功能、主摄像头和广角摄像头融合实现全景拍摄以及VR(Virtual Reality,虚拟现实)拍摄功能或者其它融合拍摄功能。在一些实施例中,摄像头组件706还包括闪光灯。可选地,闪光灯是单色温闪光灯,或者是双色温闪光灯。双色温闪光灯是指暖光闪光灯和冷光闪光灯的组合,用于不同色温下的光线补偿。
在一些实施例中,音频电路707包括麦克风和扬声器。麦克风用于采集用户及环境的声波,并将声波转换为电信号输入至处理器701进行处理,或者输入至射频电路704以实现语音通信。出于立体声采集或降噪的目的,麦克风为多个,分别设置在终端700的不同部位。可选地,麦克风是阵列麦克风或全向采集型麦克风。扬声器则用于将来自处理器701或射频电路704的电信号转换为声波。可选地,扬声器是传统的薄膜扬声器,或者是压电陶瓷扬声器。当扬声器是压电陶瓷扬声器时,不仅能够将电信号转换为人类可听见的声波,也能够将电信号转换为人类听不见的声波以进行测距等用途。在一些实施例中,音频电路707还包括耳机插孔。
定位组件708用于定位终端700的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。可选地,定位组件708是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统、俄罗斯的格雷纳斯系统或欧盟的伽利略系统的定位组件。
电源709用于为终端700中的各个组件进行供电。可选地,电源709是交流电、直流电、一次性电池或可充电电池。当电源709包括可充电电池时,该可充电电池支持有线充电或无线充电。该可充电电池还用于支持快充技术。
在一些实施例中,终端700还包括有一个或多个传感器710。该一个或多个传感器710包括但不限于:加速度传感器711、陀螺仪传感器712、压力传感器713、指纹传感器714、光学传感器715以及接近传感器716。
在一些实施例中,加速度传感器711检测以终端700建立的坐标系的三个坐标轴上的加速度大小。比如,加速度传感器711用于检测重力加速度在三个坐标轴上的分量。可选地,处理器701根据加速度传感器711采集的重力加速度信号,控制显示屏705以横向视图或纵向视图进行用户界面的显示。加速度传感器711还用于游戏或者用户的运动数据的采集。
在一些实施例中,陀螺仪传感器712检测终端700的机体方向及转动角度,陀螺仪传感器712与加速度传感器711协同采集用户对终端700的3D动作。处理器701根据陀螺仪传感器712采集的数据,实现如下功能:动作感应(比如根据用户的倾斜操作来改变UI)、拍摄时的图像稳定、游戏控制以及惯性导航。
可选地,压力传感器713设置在终端700的侧边框和/或显示屏705的下层。当压力传感器713设置在终端700的侧边框时,能够检测用户对终端700的握持信号,由处理器701根据压力传感器713采集的握持信号进行左右手识别或快捷操作。当压力传感器713设置在显示屏705的下层时,由处理器701根据用户对显示屏705的压力操作,实现对UI界面上的可操作性控件进行控制。可操作性控件包括按钮控件、滚动条控件、图标控件、菜单控件中的至少一种。
指纹传感器714用于采集用户的指纹,由处理器701根据指纹传感器714采集到的指纹识别用户的身份,或者,由指纹传感器714根据采集到的指纹识别用户的身份。在识别出用户的身份为可信身份时,由处理器701授权该用户执行相关的敏感操作,该敏感操作包括解锁屏幕、查看加密信息、下载软件、支付及更改设置等。可选地,指纹传感器714被设置终端700的正面、背面或侧面。当终端700上设置有物理按键或厂商Logo时,指纹传感器714能够与物理按键或厂商Logo集成在一起。
光学传感器715用于采集环境光强度。在一个实施例中,处理器701根据光学传感器715采集的环境光强度,控制显示屏705的显示亮度。具体地,当环境光强度较高时,调高显示屏705的显示亮度;当环境光强度较低时,调低显示屏705的显示亮度。在另一个实施例中,处理器701还根据光学传感器715采集的环境光强度,动态调整摄像头组件706的拍摄参数。
接近传感器716,也称距离传感器,通常设置在终端700的前面板。接近传感器716用于采集用户与终端700的正面之间的距离。在一个实施例中,当接近传感器716检测到用户与终端700的正面之间的距离逐渐变小时,由处理器701控制显示屏705从亮屏状态切换为息屏状态;当接近传感器716检测到用户与终端700的正面之间的距离逐渐变大时,由处理器701控制显示屏705从息屏状态切换为亮屏状态。
本领域技术人员能够理解,图7中示出的结构并不构成对终端700的限定,能够包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
图8是本申请实施例提供的一种计算机设备的结构示意图,该计算机设备800可因配置或性能不同而产生比较大的差异,该计算机设备800包括一个或一个以上处理器(Central Processing Units,CPU)801和一个或一个以上的存储器802,其中,该存储器802中存储有至少一条计算机程序,该至少一条计算机程序由该一个或一个以上处理器801加载并执行以实现上述各个实施例提供的事务处理方法。可选地,该计算机设备800还具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,该计算机设备800还包括其他用于实现设备功能的部件,在此不做赘述。
在示例性实施例中,还提供了一种计算机可读存储介质,例如包括至少一条计算机程序的存储器,上述至少一条计算机程序可由终端中的处理器执行以完成上述各个实施例中的事务处理方法。例如,该计算机可读存储介质包括ROM(Read-Only Memory,只读存储器)、RAM(Random-Access Memory,随机存取存储器)、CD-ROM(Compact Disc Read-OnlyMemory,只读光盘)、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品或计算机程序,包括一条或多条程序代码,该一条或多条程序代码存储在计算机可读存储介质中。计算机设备的一个或多个处理器能够从计算机可读存储介质中读取该一条或多条程序代码,该一个或多个处理器执行该一条或多条程序代码,使得计算机设备能够执行以完成上述实施例中的事务处理方法。
本领域普通技术人员能够理解实现上述实施例的全部或部分步骤能够通过硬件来完成,也能够通过程序来指令相关的硬件完成,可选地,该程序存储于一种计算机可读存储介质中,可选地,上述提到的存储介质是只读存储器、磁盘或光盘等。
以上所述仅为本申请的可选实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

Claims (15)

1.一种事务处理方法,其特征在于,所述方法包括:
响应于目标事务的读写操作,获取所述目标事务的读集和写集;
响应于所述目标事务的验证指令,确定所述目标事务的逻辑开始时刻和逻辑提交时刻;
响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻;
响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,提交所述目标事务。
2.根据权利要求1所述的方法,其特征在于,所述基于所述写集更新所述逻辑开始时刻包括:
获取所述写集中的至少一个数据项的至少一个待写事务信息,所述至少一个待写事务信息分别用于标识正在修改所述至少一个数据项的事务;
响应于所述至少一个待写事务信息均为空,调整所述逻辑开始时刻;
响应于所述至少一个待写事务信息中的任一待写事务信息不为空,回滚所述目标事务。
3.根据权利要求2所述的方法,其特征在于,所述调整所述逻辑开始时刻包括:
对于所述至少一个数据项中的任一数据项,将所述任一数据项的待写事务信息获取为所述目标事务的事务标识;
将所述逻辑开始时刻更新至大于所述任一数据项的最大读事务时间戳,所述最大读事务时间戳用于表示读取过所述任一数据项的事务的逻辑提交时刻中的最大值;
响应于更新后的逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于活跃事务集合调整所述逻辑开始时刻,所述活跃事务集合用于标识已开始执行但未提交完毕的事务;
响应于更新后的逻辑开始时刻和所述逻辑提交时刻不符合所述目标事务的并发一致性级别,回滚所述目标事务。
4.根据权利要求3所述的方法,其特征在于,所述活跃事务集合包括第一事务集合和第二事务集合,所述第一事务集合用于标识处于提交中状态或者验证通过状态的事务,所述第二事务集合用于标识处于运行中状态的事务;
所述基于活跃事务集合调整所述逻辑开始时刻包括:
将所述逻辑开始时刻更新至大于所述第一事务集合中的最大逻辑提交时刻;
响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,将所述第二事务集合中的事务的逻辑提交时刻调整至小于所述更新后的逻辑开始时刻;
响应于所述更新后的逻辑开始时刻大于所述逻辑提交时刻,回滚所述目标事务。
5.根据权利要求4所述的方法,其特征在于,所述将所述第二事务集合中的事务的逻辑提交时刻调整至小于所述更新后的逻辑开始时刻之后,所述方法还包括:
响应于所述第二事务集合中任一事务的逻辑开始时刻大于调整后的所述逻辑提交时刻,回滚所述任一事务。
6.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为串行化,获取所述目标事务的并发事务;
响应于所述目标事务的逻辑提交时刻小于所述并发事务的逻辑开始时刻,或者所述目标事务的逻辑开始时刻大于所述并发事务的逻辑提交时刻,获取所述目标事务所属会话的最新已完成事务时间戳;
响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
7.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为严格化且所述目标事务为写事务,获取所述目标事务的并发写事务;
响应于所述目标事务的逻辑提交时刻小于所述并发写事务的逻辑开始时刻,或者所述目标事务的逻辑开始时刻大于所述并发写事务的逻辑提交时刻,获取所述并发写事务的并发只读事务;
响应于所述并发只读事务的逻辑开始时刻大于所述并发写事务的逻辑开始时刻,获取所述目标事务所属会话的最新已完成事务时间戳;
响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
8.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为线性化且所述目标事务为写事务,获取所述目标事务的并发写事务;
响应于所述目标事务和所述并发写事务通过可串行化验证,获取所述并发写事务的并发只读事务;
响应于所述并发只读事务的逻辑开始时刻大于所述并发写事务的逻辑开始时刻,获取所述目标事务所属会话的最新已完成事务时间戳;
响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别。
9.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为顺序化,获取所述目标事务的并发事务;
响应于所述目标事务和所述并发事务通过可串行化验证,确定与所述目标事务属于同一会话的第一事务;
响应于所述目标事务的逻辑提交时刻小于所述第一事务的逻辑开始时刻,获取所述会话的最新已完成事务时间戳;
响应于所述目标事务的逻辑提交时刻大于或等于所述最新已完成事务时间戳,确定符合所述并发一致性级别;
其中,若所述目标事务与所述第一事务具有因果关系,则调整所述因果关系中结果事务的逻辑开始时刻大于原因事务的逻辑提交时刻。
10.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为可串行化,获取所述目标事务的并发事务;
响应于所述目标事务和所述并发事务通过可串行化验证,确定与所述目标事务属于同一会话的第一事务;
响应于所述目标事务的逻辑提交时刻小于所述第一事务的逻辑开始时刻且所述逻辑开始时刻小于或等于所述逻辑提交时刻,确定符合所述并发一致性级别。
11.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为因果可重复读,获取与所述目标事务具有因果关系且以所述目标事务为因的结果事务;
调整所述结果事务的逻辑开始时刻大于所述目标事务的逻辑提交时刻,确定符合所述并发一致性级别。
12.根据权利要求1所述的方法,其特征在于,所述响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻之前,所述方法还包括:
响应于所述并发一致性级别为可重复读、读已提交或者读写未提交,确定符合所述并发一致性级别。
13.一种事务处理装置,其特征在于,所述装置包括:
获取模块,用于响应于目标事务的读写操作,获取所述目标事务的读集和写集;
确定模块,用于响应于所述目标事务的验证指令,确定所述目标事务的逻辑开始时刻和逻辑提交时刻;
更新模块,用于响应于所述逻辑开始时刻和所述逻辑提交时刻符合所述目标事务的并发一致性级别,基于所述写集更新所述逻辑开始时刻;
提交模块,用于响应于更新后的逻辑开始时刻小于或等于所述逻辑提交时刻,提交所述目标事务。
14.一种计算机设备,其特征在于,所述计算机设备包括一个或多个处理器和一个或多个存储器,所述一个或多个存储器中存储有至少一条计算机程序,所述至少一条计算机程序由所述一个或多个处理器加载并执行以实现如权利要求1至权利要求12任一项所述的事务处理方法。
15.一种存储介质,其特征在于,所述存储介质中存储有至少一条计算机程序,所述至少一条计算机程序由处理器加载并执行以实现如权利要求1至权利要求12任一项所述的事务处理方法。
CN202110115847.4A 2021-01-28 2021-01-28 事务处理方法、装置、计算机设备及存储介质 Active CN112463311B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN202110115847.4A CN112463311B (zh) 2021-01-28 2021-01-28 事务处理方法、装置、计算机设备及存储介质
EP22745183.8A EP4254183A4 (en) 2021-01-28 2022-01-24 TRANSACTION PROCESSING METHOD AND APPARATUS, COMPUTER DEVICE AND STORAGE MEDIUM
JP2023524479A JP2023546249A (ja) 2021-01-28 2022-01-24 トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム
PCT/CN2022/073455 WO2022161308A1 (zh) 2021-01-28 2022-01-24 事务处理方法、装置、计算机设备及存储介质
US18/070,758 US20230100223A1 (en) 2021-01-28 2022-11-29 Transaction processing method and apparatus, computer device, and storage medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110115847.4A CN112463311B (zh) 2021-01-28 2021-01-28 事务处理方法、装置、计算机设备及存储介质

Publications (2)

Publication Number Publication Date
CN112463311A true CN112463311A (zh) 2021-03-09
CN112463311B CN112463311B (zh) 2021-06-08

Family

ID=74802820

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110115847.4A Active CN112463311B (zh) 2021-01-28 2021-01-28 事务处理方法、装置、计算机设备及存储介质

Country Status (5)

Country Link
US (1) US20230100223A1 (zh)
EP (1) EP4254183A4 (zh)
JP (1) JP2023546249A (zh)
CN (1) CN112463311B (zh)
WO (1) WO2022161308A1 (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113010920A (zh) * 2021-04-01 2021-06-22 浙江永旗区块链科技有限公司 一种区块链数据安全防护系统及其防护方法
CN113419823A (zh) * 2021-06-22 2021-09-21 东北大学 一种适用于高并发事务的联盟链系统及其设计方法
CN113448738A (zh) * 2021-08-31 2021-09-28 成都派沃特科技股份有限公司 服务器可用度调整方法、装置、设备及存储介质
CN113569083A (zh) * 2021-06-17 2021-10-29 南京大学 基于数据溯源模型的智能音箱本地端数字取证系统及方法
CN113722052A (zh) * 2021-08-23 2021-11-30 华中科技大学 一种基于数据双版本的非易失内存更新方法
CN114401125A (zh) * 2021-12-29 2022-04-26 张海滨 满足因果序的共识方法、装置、系统及计算机存储介质
WO2022161308A1 (zh) * 2021-01-28 2022-08-04 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN114996244A (zh) * 2022-07-18 2022-09-02 北京博华信智科技股份有限公司 实时数据库系统的控制方法、装置、设备及存储介质
CN115114344A (zh) * 2021-11-05 2022-09-27 腾讯科技(深圳)有限公司 事务处理方法、装置、计算设备及存储介质
CN115271736A (zh) * 2022-07-11 2022-11-01 中电金信软件有限公司 验证事务一致性的方法、装置、设备、存储介质及产品
WO2023029837A1 (zh) * 2021-08-30 2023-03-09 腾讯科技(深圳)有限公司 请求处理方法、装置、计算设备及存储介质
CN116932603A (zh) * 2023-08-03 2023-10-24 上海沄熹科技有限公司 一种基于有向图的高性能事务并发复制方法
WO2023216636A1 (zh) * 2022-05-07 2023-11-16 北京大学 事务处理方法、装置及电子设备

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20240014916A1 (en) * 2022-07-06 2024-01-11 Mellanox Technologies, Ltd. Companion metadata for precision time protocol (ptp) hardware clock
CN117131060A (zh) * 2023-07-26 2023-11-28 泽拓科技(深圳)有限责任公司 分布式数据库并发控制方法、系统、计算机设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140310253A1 (en) * 2013-04-15 2014-10-16 International Business Machines Corporation Out-of-order execution of strictly-ordered transactional workloads
CN109977171A (zh) * 2019-02-02 2019-07-05 中国人民大学 一种保证事务一致性和线性一致性的分布式系统和方法
US20190266176A1 (en) * 2012-06-04 2019-08-29 Google Llc Pipelining Paxos State Machines
CN110196760A (zh) * 2018-07-12 2019-09-03 腾讯科技(深圳)有限公司 分布式事务一致性实现方法及装置
CN111159252A (zh) * 2019-12-27 2020-05-15 腾讯科技(深圳)有限公司 事务执行方法、装置、计算机设备及存储介质
CN111259071A (zh) * 2020-01-04 2020-06-09 浙江科技学院 一种分布式数据库系统中的并发访问控制方法
CN111338766A (zh) * 2020-03-12 2020-06-26 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN111459920A (zh) * 2020-05-15 2020-07-28 北京谷数科技股份有限公司 基于虚拟全局时钟同步的多版本并发控制方法及系统
CN111597015A (zh) * 2020-04-27 2020-08-28 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111736964B (zh) * 2020-07-02 2021-08-06 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN112463311B (zh) * 2021-01-28 2021-06-08 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190266176A1 (en) * 2012-06-04 2019-08-29 Google Llc Pipelining Paxos State Machines
US20140310253A1 (en) * 2013-04-15 2014-10-16 International Business Machines Corporation Out-of-order execution of strictly-ordered transactional workloads
CN110196760A (zh) * 2018-07-12 2019-09-03 腾讯科技(深圳)有限公司 分布式事务一致性实现方法及装置
CN109977171A (zh) * 2019-02-02 2019-07-05 中国人民大学 一种保证事务一致性和线性一致性的分布式系统和方法
CN111159252A (zh) * 2019-12-27 2020-05-15 腾讯科技(深圳)有限公司 事务执行方法、装置、计算机设备及存储介质
CN111259071A (zh) * 2020-01-04 2020-06-09 浙江科技学院 一种分布式数据库系统中的并发访问控制方法
CN111338766A (zh) * 2020-03-12 2020-06-26 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN111597015A (zh) * 2020-04-27 2020-08-28 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN111459920A (zh) * 2020-05-15 2020-07-28 北京谷数科技股份有限公司 基于虚拟全局时钟同步的多版本并发控制方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李清霞: "一种改进的基于时间戳的分布式事务并发控制策略", 《东莞理工学院学报》 *

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2022161308A1 (zh) * 2021-01-28 2022-08-04 腾讯科技(深圳)有限公司 事务处理方法、装置、计算机设备及存储介质
CN113010920A (zh) * 2021-04-01 2021-06-22 浙江永旗区块链科技有限公司 一种区块链数据安全防护系统及其防护方法
CN113010920B (zh) * 2021-04-01 2022-07-12 浙江永旗区块链科技有限公司 一种区块链数据安全防护系统及其防护方法
CN113569083A (zh) * 2021-06-17 2021-10-29 南京大学 基于数据溯源模型的智能音箱本地端数字取证系统及方法
CN113569083B (zh) * 2021-06-17 2023-11-03 南京大学 基于数据溯源模型的智能音箱本地端数字取证系统及方法
CN113419823A (zh) * 2021-06-22 2021-09-21 东北大学 一种适用于高并发事务的联盟链系统及其设计方法
CN113419823B (zh) * 2021-06-22 2023-07-18 东北大学 一种适用于高并发事务的联盟链系统及其设计方法
CN113722052B (zh) * 2021-08-23 2024-02-20 华中科技大学 一种基于数据双版本的非易失内存更新方法
CN113722052A (zh) * 2021-08-23 2021-11-30 华中科技大学 一种基于数据双版本的非易失内存更新方法
WO2023029837A1 (zh) * 2021-08-30 2023-03-09 腾讯科技(深圳)有限公司 请求处理方法、装置、计算设备及存储介质
CN113448738A (zh) * 2021-08-31 2021-09-28 成都派沃特科技股份有限公司 服务器可用度调整方法、装置、设备及存储介质
CN115114344A (zh) * 2021-11-05 2022-09-27 腾讯科技(深圳)有限公司 事务处理方法、装置、计算设备及存储介质
CN115114344B (zh) * 2021-11-05 2023-06-23 腾讯科技(深圳)有限公司 事务处理方法、装置、计算设备及存储介质
CN114401125A (zh) * 2021-12-29 2022-04-26 张海滨 满足因果序的共识方法、装置、系统及计算机存储介质
WO2023216636A1 (zh) * 2022-05-07 2023-11-16 北京大学 事务处理方法、装置及电子设备
CN115271736A (zh) * 2022-07-11 2022-11-01 中电金信软件有限公司 验证事务一致性的方法、装置、设备、存储介质及产品
CN114996244B (zh) * 2022-07-18 2022-10-28 北京博华信智科技股份有限公司 实时数据库系统的控制方法、装置、设备及存储介质
CN114996244A (zh) * 2022-07-18 2022-09-02 北京博华信智科技股份有限公司 实时数据库系统的控制方法、装置、设备及存储介质
CN116932603A (zh) * 2023-08-03 2023-10-24 上海沄熹科技有限公司 一种基于有向图的高性能事务并发复制方法

Also Published As

Publication number Publication date
WO2022161308A1 (zh) 2022-08-04
CN112463311B (zh) 2021-06-08
EP4254183A4 (en) 2024-06-26
EP4254183A1 (en) 2023-10-04
US20230100223A1 (en) 2023-03-30
JP2023546249A (ja) 2023-11-01

Similar Documents

Publication Publication Date Title
CN112463311B (zh) 事务处理方法、装置、计算机设备及存储介质
JP6884870B2 (ja) ブロックチェーンを基にしたデータ処理方法および装置
CN109003078B (zh) 基于区块链的智能合约调用方法及装置、电子设备
CN112035410B (zh) 日志存储方法、装置、节点设备及存储介质
US10733176B2 (en) Detecting phantom items in distributed replicated database
CN111338766B (zh) 事务处理方法、装置、计算机设备及存储介质
US20240061861A1 (en) Blockchain Node and Transaction Method
US20210083856A1 (en) Improved hardware security module management
CN111597015B (zh) 事务处理方法、装置、计算机设备及存储介质
CN112767158A (zh) 基于区块链的交易执行方法及装置、电子设备
US7996360B2 (en) Coordinating updates to replicated data
US20130151494A1 (en) Consistent Database Recovery Across Constituent Segments
US11681683B2 (en) Transaction compensation for single phase resources
US20130332435A1 (en) Partitioning optimistic concurrency control and logging
CN115114344B (zh) 事务处理方法、装置、计算设备及存储介质
CN114244595B (zh) 权限信息的获取方法、装置、计算机设备及存储介质
WO2023284473A1 (zh) 数据管理方法、装置、计算机设备及存储介质
US20220100498A1 (en) Implementation of object versioning and consistency at scale
US10620660B2 (en) Efficient timestamp solution for analyzing concurrent software systems
CN112162846A (zh) 事务处理方法、设备及计算机可读存储介质
CN113704361B (zh) 事务执行方法、装置、计算设备及存储介质
CN116561137A (zh) 事务处理方法、装置、计算机设备及存储介质
US7739232B2 (en) Programming system for occasionally-connected mobile business applications
US10127270B1 (en) Transaction processing using a key-value store
CN115098537B (zh) 事务执行方法、装置、计算设备及存储介质

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
GR01 Patent grant
GR01 Patent grant
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40041370

Country of ref document: HK