CN111858629B - 二阶段提交分布式事务更新数据库的实现方法和装置 - Google Patents

二阶段提交分布式事务更新数据库的实现方法和装置 Download PDF

Info

Publication number
CN111858629B
CN111858629B CN202010634228.1A CN202010634228A CN111858629B CN 111858629 B CN111858629 B CN 111858629B CN 202010634228 A CN202010634228 A CN 202010634228A CN 111858629 B CN111858629 B CN 111858629B
Authority
CN
China
Prior art keywords
transaction
commit
precursor
write lock
coordinator
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202010634228.1A
Other languages
English (en)
Other versions
CN111858629A (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.)
Beijing Oceanbase Technology Co Ltd
Original Assignee
Beijing Oceanbase Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Oceanbase Technology Co Ltd filed Critical Beijing Oceanbase Technology Co Ltd
Priority to CN202010634228.1A priority Critical patent/CN111858629B/zh
Publication of CN111858629A publication Critical patent/CN111858629A/zh
Priority to EP21180211.1A priority patent/EP3933608A1/en
Priority to US17/355,505 priority patent/US11429599B2/en
Priority to JP2021107588A priority patent/JP2022013854A/ja
Application granted granted Critical
Publication of CN111858629B publication Critical patent/CN111858629B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/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/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/2308Concurrency control
    • G06F16/2336Pessimistic concurrency control approaches, e.g. locking or multiple versions without time stamps
    • G06F16/2343Locking methods, e.g. distributed locking or locking implementation details
    • 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
    • G06F16/2458Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
    • G06F16/2471Distributed queries
    • 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)
  • Computing Systems (AREA)
  • Fuzzy Systems (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Software Systems (AREA)
  • Computational Linguistics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本说明书提供一种二阶段提交分布式事务更新数据库的实现方法,应用在协调者上,所述方法包括:向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送。

Description

二阶段提交分布式事务更新数据库的实现方法和装置
技术领域
本说明书涉及网络通信技术领域,尤其涉及一种二阶段提交分布式事务更新数据库的实现方法和装置。
背景技术
事务提供了一种机制,将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在每个操作都可以正常执行的情况下方能提交,只要其中任一操作执行失败,都将导致整个事务的回滚。分布式事务中,参与处理事务的各方通常位于不同的网络节点上,2PC(Two Phase Commit,二阶段提交)协议被广泛采用,以满足分布式事务的ACID(Atomicity Consistency Isolation Durability,原子性、一致性、隔离性、持久性)属性。
大型网站常常采用分布式事务来实现对数据库的高并发访问。在一些应用场景中,例如在“秒杀”活动中,会在极短的时间内发生对热点行的密集更新。秒杀的性能与用户体验紧密关联,如何提高更新热点行的分布式事务的并发性能,变得尤为重要。
发明内容
有鉴于此,本说明书提供一种二阶段提交分布式事务更新数据库的实现方法,应用在参与者上,所述方法包括:
根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作;
将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务;
在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求;
在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁;
在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息;
根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚。
本说明书提供的一种二阶段提交分布式事务更新数据库的实现方法,应用在协调者上,所述方法包括:
向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;
在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送。
本说明书还提供了一种二阶段提交分布式事务更新数据库的实现装置,应用在参与者上,所述装置包括:
更新操作执行单元,用于根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作;
前驱事务发现单元,用于将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务;
释放写锁请求单元,用于在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求;
提前释放写锁单元,用于在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁;
第一准备响应发送单元,用于在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息;
提交回滚状态单元,用于根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚。
本说明书提供的一种二阶段提交分布式事务更新数据库的实现装置,应用在协调者上,所述装置包括:
准备请求发送单元,用于向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;
释放写锁响应单元,用于在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送。
本说明书提供的一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述应用在参与者上的二阶段提交分布式事务更新数据库的实现方法所述的步骤。
本说明书提供的一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行上述应用在协调者上的二阶段提交分布式事务更新数据库的实现方法所述的步骤。
本说明书提供的一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述应用在参与者上的二阶段提交分布式事务更新数据库的实现方法所述的步骤。
本说明书还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行上述应用在协调者上的二阶段提交分布式事务更新数据库的实现方法所述的步骤。
由以上技术方案可见,本说明书的实施例中,在二阶段提交的准备阶段,参与者在更新操作的日志写入日志缓冲区成功后,向协调者发送提前释放写锁请求,协调者在收到来自每个分布式事务的参与者的提前释放写锁请求后返回提前释放写锁响应,令每个参与者都提前释放写锁,极大的减少了对目标数据库记录的持锁时间,使得更新同一目标数据库记录的其他事务能够提前进行,提升了并发处理的性能;同时,每个参与者通过在事务信息记录中维护本事务的状态和本事务的前驱事务,并在前驱事务的状态为提交或回滚后再向协调者返回一阶段准备成功或失败的消息,实现了分布式事务的ACID属性。
附图说明
图1是2PC协议中协调者与参与者之间的一种交互流程示意图;
图2是现有技术中一种参与者并发执行更新数据库记录的时序示例图;
图3是本说明书实施例中一种应用在参与者上的二阶段提交分布式事务更新数据库的实现方法的流程图;
图4是本说明书实施例中一种应用在协调者上的二阶段提交分布式事务更新数据库的实现方法的流程图;
图5是本说明书应用示例中在启动结束事务后,协调者与参与者之间的一种交互流程示意图;
图6是本说明书应用示例中一种参与者并发执行更新数据库记录的时序示例图;
图7是运行本说明书实施例的设备的一种硬件结构图;
图8是本说明书实施例中一种应用在参与者上的二阶段提交分布式事务更新数据库的实现装置的逻辑结构图;
图9是本说明书实施例中一种应用在协调者上的二阶段提交分布式事务更新数据库的实现装置的逻辑结构图。
具体实施方式
对于更新数据库记录(被更新的数据库记录称为目标数据库记录)的一个分布式事务,协调者在确定执行本事务若干个参与者后,启动本事务的执行。协调者向每个参与者发送更新目标数据库记录的指令。在参与者上,执行过程包括如下4个步骤:
步骤A1:参与者对更新数据库记录的操作命令进行解析,生成用于执行操作命令的执行计划。
步骤A2:对目标数据库记录加写锁,按照执行计划对目标数据库记录进行更新操作;其中,数据库记录的更新操作可以是修改、删除、和/或添加目标数据库记录中的数据项,也可以是添加、和/或删除数据库记录的条目,还可以是其他需要以排他方式对目标数据库记录进行的操作。
当本事务发起方通知协调者结束事务(即本事务发起方提交本事务时,为区别于2PC里的二阶段提交,此处称之为结束事务)时,协调者启动2PC协议的流程,向每个参与者发送一阶段准备请求消息。2PC是一种用于提交事务的分布式一致性协议,该协议分为两步操作:一阶段为准备(Prepare)阶段,二阶段为提交/回滚(Commit/Abort)阶段。2PC协议中协调者与参与者的交互流程如图1所示。
在参与者上,步骤A3:参与者收到一阶段准备请求消息后,在日志缓冲区写入更新操作的日志。
步骤A4:将日志缓冲区中更新操作的日志持久化,即将日志缓冲区中的日志写入能够持久保存的介质上。例如,对在本地保存的日志文件,将写入本地硬盘上的日志文件;再如,在日志文件有多个备份的场景中,将日志缓冲区中更新操作的日志同步到多个备份文件中。在日志持久化成功后,参与者向协调者返回准备成功(Prepare OK)的一阶段准备响应消息;如果上述A1到A3步骤中的操作未能全部成功执行或者日志持久化失败,参与者向协调者返回准备失败(Prepare No)的一阶段准备响应消息。根据协调者在二阶段发送的提交或回滚消息,参与者执行二阶段提交或回滚,写本事务的提交或回滚日志。
参与者在执行完步骤A4后,对目标数据记录解锁。
在上述4个步骤中,参与者对目标数据库记录的持锁时间为从步骤A2到步骤A4。其中,耗时最长的是步骤A4中的日志持久化和按照2PC协议结束事务时的同步过程。尤其是对于大型网站,其日志文件通常有多个备份,并且往往位于不同的城市,不可避免的传输延时使得日志持久化的耗时相当长。在更新相同目标数据库记录的事务集中并发的情况下,由于在后的事务必须等待在先的事务对目标数据库记录解锁后才能执行步骤A2到A4,会对性能造成严重的影响。假设事务T1、T2和T3要以数据库里的同一行Row1为更新操作的对象,则T1、T2和T3可能的最大并发度的执行时序如图2所示。
本说明书的实施例提出一种二阶段提交分布式事务更新数据库的实现方法,参与者在准备阶段执行一阶段准备请求消息时,在步骤A3将更新操作的日志写入日志缓冲区成功后,即向协调者发送提取释放写锁请求,协调者在收到所有参与者的提前释放写锁请求后向每个参与者回复提前释放写锁响应,参与者根据提前释放写锁响应来对目标数据库记录解锁,而不再等待步骤A4中持久化日志和2PC协议的同步过程,从而大大缩短了对目标数据库记录的持锁时间,提升了并发处理的性能;同时,通过事务信息记录中维护每个参与者的事务状态、以及前驱事务与后继事务的依赖关系,使得事务发生回滚时不会影响分布式事务的ACID属性。
本说明书的实施例中,分布式系统的协调者与一个到多个参与者通过网络可以进行通信。协调者或参与者可以运行在任何具有计算和存储能力的设备上,如手机、平板电脑、PC(Personal Computer,个人电脑)、笔记本、服务器等设备;还可以由运行在两个或两个以上设备的逻辑节点来实现本说明书实施例中协调者或参与者的各项功能。另外,协调者也可以与一个或一个以上的参与者运行在同一个物理设备上,不做限定。
本说明书的实施例中,一种2PC分布式事务更新数据库的实现方法应用在参与者上的流程如图3所示,应用在协调者上的流程如图4所示。该分布式事务用来更新数据库记录。
在参与者上,步骤S310,根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作。
如前所述,在协调者启动本事务的执行后,向每个参与者发送更新目标数据库记录的指令。参与者按照指令,确定要更新的目标数据库记录,对目标数据库记录加写锁,加写锁成功后,对目标数据库记录执行指令中指定的更新操作。
本说明书的实施例中,数据库记录可以是数据库的表、页、行等,还可以是其他数据库所存储条目或条目的组合,不做限定。
在参与者上,步骤S320,将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务。
每个参与者分别维护有各自的事务信息记录,用来记录本参与者所执行的分布式事务的各种信息,包括但不限于事务的标识、事务的状态等。其中,事务的状态包括二阶段的执行结果(即提交或回滚),还可以包括一阶段的准备结果(即准备成功或准备失败)。本说明书的实施例中,在事务信息记录中记载本事务的前驱事务,并在事务的状态中添加提前释放写锁这一状态。
在参与者开始执行某个事务时,会该事务的信息写入事务信息记录。本说明书的实施例中,参与者在根据接收的指令确定目标数据库记录后,在事务信息记录中查找更新操作涉及到该目标数据库记录(即所执行更新操作时更新的数据库包括至少部分该目标数据库记录)、并且状态为提前释放写锁的其他事务,如果有这样的事务,则在事务信息记录中将这样的事务记载为本事务的前驱事务,本事务是每个前驱事务的后继事务。在一些应用场景中,对本事务的每个前驱事务,还可以将本事务作为该前驱事务的后继事务,记载在事务信息记录中。
本说明书的实施例中,本事务可以有一个到多个前驱事务,也可以没有前驱事务。
为目标数据库记录加的写锁可以是任何一种能够排除其他事务对该目标数据库记录进行更新操作的锁,如互斥锁、排它锁等,在本说明书实施例中统称为写锁。
在协调者上,步骤S410,向参与者发送结束本事务的一阶段准备请求消息;本事务用于更新目标数据库记录。
协调者收到本事务的发起方结束事务的指令后,启动2PC协议,向每个参与者发送本事务的一阶段准备请求消息。
在参与者上,步骤S330,在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求。
如果参与者将本事务更新操作的日志写入日志缓冲区失败,则不向协调者发送提前释放写锁请求。
在协调者上,步骤S420,在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送。
在参与者上,步骤S340,在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁。
协调者接收参与者发送的提前释放写锁请求。对一个事务,如果协调者收集齐所有该事务的参与者发送的提前释放写锁请求,则协调者向每个参与者返回提前释放写锁响应。提前释放写锁响应用来告知该事务的每个参与者对目标数据库记录提前解锁,而不必等到步骤A4执行完毕后再行解锁。
如果协调者没有收到一个到多个参与者发送的提前释放写锁请求,则协调者不做处理。
参与者如果收到协调者发送的提前释放写锁响应,则不论日志持久化是否执行完毕,都对目标数据库记录解锁,并且在事务信息记录中写入本事务的状态为提前释放写锁。
如果参与者没有收到从协调者发送的提前释放写锁请求,则在步骤A4执行完毕后对目标数据库记录解锁。
在参与者上,步骤S350,在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息。
参与者在将日志缓冲区中更新操作的日志持久化完成后,如果本事务有前驱事务,则查询事务信息记录中每个前驱事务的状态,在所有前驱事务的状态都是提交后,向协调者发送准备成功的一阶段准备响应消息;或者在有任何一个前驱事务的状态是回滚后,向协调者发送准备失败的一阶段准备响应消息。
如果本事务没有前驱事务,则参与者在日志缓冲区中本事务更新操作的日志持久化成功之后,向协调者发送准备成功的一阶段准备响应消息。类似于已有的2PC协议,如果参与者在步骤A1到A3的任何一个步骤中执行失败或者本事务更新操作的日志持久化失败,则向协调者发送准备失败的一阶段准备响应消息。
在参与者上,步骤S360,根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚。
在二阶段(提交/回滚阶段),如果协调者从所有参与者收到的均是准备成功的一阶段准备响应消息,则向每个参与者发送提交消息;如果任何一个参与者返回的是准备失败,则向所有参与者发送回滚消息。参与者根据从协调者收到的提交消息或回滚消息,执行本事务的二阶段提交或回滚,并将事务信息记录中本事务的状态写为提交或回滚。
本说明书的实施例中,当事务TA提前释放写锁后,其他事务(设为事务TS)可以对同一目标数据库记录加写锁进行更新操作。如果在事务TS加写锁时事务TA在事务信息记录中的状态是提前释放写锁,而不是提交或回滚,说明事务TA对目标数据库记录的更新操作是否最终有效还处于待定的情形。如果事务TA最终回滚,则事务TS更新前的目标数据库记录很可能是不正确的(即更新了脏数据),事务TS也同样需要回滚。事务TS的成功或失败依赖于事务TA的最终执行结果,因此,本说明书的实施例中,以事务TA为事务TS的前驱事务、以事务TS为事务TA的后继事务,来表明事务TS对事务TA的依赖关系,并将依赖关系记载在事务信息记录中。后继事务要等到其前驱事务的最终状态确定后,才能确认本事务是准备成功还是准备失败,再向其协调者发送一阶段准备响应消息。
对前驱事务的发现由后继事务来进行,即后继事务在对目标数据库记录进行更新操作前,通过查询事务信息记录来发现更新操作的对象涉及目标数据库记录、并且状态为提前释放写锁的前驱事务。后继事务在事务信息记录中记载与前驱事务的依赖关系。在每个事务完成2PC的二阶段提交/回滚后,在事务信息记录中更新本事务的状态,这样,本事务的后继事务可以及时确认要向协调者发送准备成功还是准备失败的一阶段准备响应消息。
在一些应用场景中,在事务信息记录中可以由一个条目(如数据库表中的一行)来记录一个事务的各种信息。这些应用场景中,当后继事务发现本事务的前驱事务后,在事务信息记录中记载本事务的前驱事务时,可以将每个前驱事务以及每个前驱事务的状态记载在本事务的条目下,并且在每个前驱事务的条目下写入本事务为该前驱事务的后继事务;而当每个事务按照在提交/回滚阶段的执行结果,更新事务信息记录中本事务的状态时,不仅更新本事务条目下本事务的状态,如果本事务有后继事务,也将每个后继事务的条目下本事务的状态更新为提交或回滚。这样,后继事务在等待前驱事务的最终状态时,只要查询事务信息记录中本事务的条目即可,而无需重复检索每个前驱事务的条目,减少了对资源的占用并且具有更快的响应速度。
在本说明书实施例的运行过程中,如果前驱事务在步骤A4阶段的耗时比较长,可能出现多层级联的后继事务(级联为本事务的前驱事务是其他事务的后继事务的情况)的情形。在实践中耗时超过常规用时的操作往往失败的可能性更高。这样,有多层级联后继事务的前驱事务一旦回滚,则依赖于该前驱事务的各层后继事务都需要回滚,不但妨碍并发处理性能的提升,还会对分布式系统的稳定性有不利影响。
为了减少上述情形发生的可能性,可以由协调者在收到所有参与者发送的提前释放写锁请求后,生成本事务的提交时间戳,并将生成的提交时间戳携带在提前释放写锁响应中发送给每个参与者。提交时间戳用来衡量本事务在参与者上进行日志持久化的起始时间。参与者将本事务的提交时间戳记载在事务信息记录中。后继事务在执行一阶段准备请求消息时,可以从事务信息记录中查找到其所有前驱事务的提交时间戳,并采用以下两种实施方式中的一种或两种来减少多层级联回滚发生的可能性:
第一种实施方式:在参与者为按照指令对目标数据库记录执行更新操作前,计算本次更新操作的时间戳与本事务各个前驱事务的提交时间戳的差值,如果与某个或某些前驱事务的上述差值达到或超过第一阈值,则等待这个或这些前驱事务的状态为提交或回滚后,再按照指令执行更新操作。
第二种实施方式:在参与者将本事务更新操作的日志写入日志缓冲区前,计算本事务更新操作的日志写入日志缓冲区的时间戳、与本事务各个前驱事务的提交时间戳的差值,如果与某个或某些前驱事务的上述差值达到或超过第二阈值,则等待这个或这些前驱事务的状态为提交或回滚后,再执行将本事务更新操作的日志写入日志缓冲区的操作。
上述两种实施方式中,对提交时间戳所衡量的参与者进行日志持久化的起始时间,由于通常每个参与者的确切起始时间都是不同的,协调者可以采用近似的时刻来作为提交时间戳,例如,可以将协调者收到所有参与者发送的提前释放写锁请求的时刻作为提交时间戳,也可以将协调者发送提前释放写锁响应的时刻作为提交时间戳,或者采用其他时刻,不做限定。在一个例子中,可以由每个参与者记载将本事务更新操作的日志写入日志缓冲区的时间戳,并将该时间戳封装在提前释放写锁请求中发送给协调者;协调者在收到所有参与者发送的提前释放写锁请求后,将所有提前释放写锁请求里将更新操作的日志写入日志缓冲区的时间戳中最晚的一个,作为本事务的提交时间戳。
此外,第一阈值与第二阈值可以参考实际应用场景中日志持久化所需的时长、对级联回滚的容忍程度等因素来确定,不做限定。例如,对日志文件有异地备份的场景,可以将两地正常传输延时时长的若干倍(如2到4倍),来作为第一阈值或第二阈值。
当参与者所在的设备发生宕机重启时,在恢复过程中,对于已经提交或回滚的事务,能够通过日志恢复出事务的状态。对于尚未提交或回滚的事务,则要继续2PC的流程,直到事务提交或回滚。恢复过程中尚未提交或回滚的事务如果有前驱事务,则需要参考前驱事务的提交/回滚状态,才能确定后继事务的执行结果。对于主从备份的应用场景,在发生主备切换后也是如此。为了解决恢复过程中数据的正确性问题,可以由每个参与者持久化事务信息记录中本事务的前驱事务(比如在Redo Log中写入本事务所有前驱事务)和本事务的状态。这样,宕机重启或主备切换后可以依据事务之间的依赖关系、以及前驱事务的状态来进行恢复过程。如果前驱事务发生回滚,在恢复过程中,后继事务可以从持久化后的信息中得知前驱事务已回滚,则不会在脏数据的基础上提交本事务。
另外,对于访问目标数据库记录的只读事务,可以令只读事务读取已经提交的事务对目标数据库记录的更新结果,而忽略尚未提交或回滚的事务对对目标数据库记录的更新。这样,可以避免只读事务被回滚,有利于分布式系统的稳定性。
可见,本说明书的实施例中,参与者在准备阶段将更新操作的日志写入日志缓冲区成功后,向协调者发送提取释放写锁请求,协调者在收到来自每个分布式事务的参与者的提前释放写锁请求后返回提前释放写锁响应,令每个参与者都提前释放写锁,而不再等待持久化日志的过程,减少了对目标数据库记录的持锁时间,使得更新同一目标数据库记录的其他事务能够提前进行,提升了并发处理的性能;同时,通过事务信息记录中维护每个参与者的事务状态、以及前驱事务与后继事务的依赖关系,使得事务发生回滚时不会影响分布式事务的ACID属性。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
在本说明书的一个应用示例中,某大型商务网站采用分布式系统来在交易发生时进行多个关联数据库的更新。秒杀活动对数据库中热点行的并发更新性能提出了挑战。该商务网站采用以下方式来基于2PC协议实现用于更新热点行的分布式事务。其中,在启动结束事务后,协调者与参与者之间的一种交互流程可以如图5所示。
每个参与者上维护事务信息登记表(一种事务信息记录),事务信息登记表中每个事务对应于一行记录,该行记载的数据项包括:本事务的标识、本事务的提交时间戳、本事务的前驱事务的标识、本事务的前驱事务的状态、本事务的后继事务的标识等。
该商务网站的分布式事务的日志文件有3个备份,分别位于3个不同的城市。与这3个城市之间最长的传输延时为100ms(毫秒),本应用示例中将第一阈值和第二阈值均设置为200ms。
在用于更新热点行的分布式事务启动后,协调者向各个参与者发送更新目标数据库记录的指令,其中包括本事务的标识,并且指定了每个参与者要更新的数据库行、以及对该行的具体更新操作。
参与者收到更新目标数据库记录的指令,从中解析出要更新的目标行。参与者查询本参与者维护的事务信息登记表,将事务信息登记表中将状态为提前释放写锁、并且以目标行为更新对象的其他事务作为本事务的前驱事务。参与者在事务信息登记表中写入本事务的条目(一行记录),包括本事务的标识、本事务的每个前驱事务的标识以及每个前驱事务的状态(当前为提前释放写锁);在事务信息登记表的每个前驱事务的条目中,写入本事务的标识作为该前驱事务的后继事务。
参与者为目标行加写锁。参与者从事务信息登记表中查询每个前驱事务的提交时间戳,并获取对目标行本次更新操作的时间戳,计算两者之间的差值,如果有差值超过200ms,则参与者暂停等待,直到事务信息登记表中差值超过200ms的前驱事务的状态变为提交或回滚后,参与者对目标行执行具体的更新操作。如果差值均不到200ms,则参与者对目标行执行具体的更新操作。
协调者在结束本事务的指令后,向每个参与者发送本事务的一阶段准备请求消息。
参与者收到本事务的一阶段准备请求消息,获取将本次更新操作的日志写入日志缓冲区的时间戳,计算写入日志缓冲区的时间戳与每个前驱事务的提交时间戳的差值,如果有差值超过200ms,则参与者暂停等待,直到事务信息登记表中差值超过200ms的前驱事务的状态变为提交或回滚后,参与者将本次更新操作的日志写入日志缓冲区。如果差值均不到200ms,则参与者将本次更新操作的日志写入日志缓冲区。
本次更新操作的日志写入日志缓冲区成功后,参与者将本次更新操作的日志写入日志缓冲区的时间戳封装在提前释放写锁请求中,发送给协调者。
协调者收集齐所有参与者发送的提前释放写锁请求后,将所有提前释放写锁请求里将更新操作的日志写入日志缓冲区的时间戳中最晚的一个,作为本事务的提交时间戳。协调者将本事务的提交时间戳携带在提前释放写锁响应中,发送给每个参与者。
参与者收到提前释放写锁响应,将其中本事务的日志提交时间写入事务信息登记表,解开目标行的写锁。
参与者在日志缓冲区中将本事务更新操作的日志同步到3个备份日志文件成功后,查询事务信息登记表中本事务条目中每个前驱事务的状态,直到所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者直到有任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息。
在提交/回滚阶段,如果协调者从所有参与者收到的均是准备成功的一阶段准备响应消息,则向每个参与者发送提交消息;如果任何一个参与者返回的是准备失败,则向所有参与者发送回滚消息。参与者根据从协调者收到的提交消息或回滚消息,执行本事务的二阶段提交或回滚,并将事务信息记录中本事务条目下的状态写为提交或回滚,并且将本事务的后继事务条目下本事务的状态也写入提交或回滚。
参与者将事务信息登记表中本事务的状态和本事务的前驱事务的标识,持久化到日志文件中,以便在发生宕机重启或主备切换后在恢复过程中保证数据的正确性。
本应用示例中,假设某个参与者上事务T1、T2和T3要以数据库里的同一行Row1为更新操作的对象,则T1、T2和T3可能的最大并发度的执行时序如图6所示。与图2相比,可以看出并发性能得到了极大的提升。
与上述流程实现对应,本说明书的实施例还提供了一种应用在参与者上的二阶段提交分布式事务更新数据库的实现装置,和一种应用在协调者上的二阶段提交分布式事务更新数据库的实现装置。这两种装置均可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是所在设备的CPU(CentralProcess Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图7所示的CPU、内存以及存储器之外,二阶段提交分布式事务更新数据库的实现装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
图8所示为本说明书实施例提供的一种二阶段提交分布式事务更新数据库的实现装置,应用在参与者上,所述装置包括更新操作执行单元、前驱事务发现单元、释放写锁请求单元、提前释放写锁单元、第一准备响应发送单元、和提交回滚状态单元,其中:更新操作执行单元用于根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作;前驱事务发现单元用于将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务;释放写锁请求单元用于在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求;提前释放写锁单元用于在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁;第一准备响应发送单元用于在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息;提交回滚状态单元用于根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚。
可选的,所述装置还包括:第二准备响应发送单元,用于当本事务没有前驱事务时,在日志缓冲区中本事务更新操作的日志持久化成功之后,向协调者发送准备成功的一阶段准备响应消息。
可选的,所述提前释放写锁响应中携带有协调者生成的提交时间戳;所述装置还包括提交时间戳写入单元,用于在事务信息记录中记载本事务的提交时间戳;所述更新操作执行单元按照指令执行更新操作,包括:当本次更新操作的时间戳与本事务前驱事务的提交时间戳的差值达到或超过第一阈值时,等待所述前驱事务的状态为提交或回滚后,按照所述指令执行更新操作。
可选的,所述提前释放写锁响应中携带有协调者生成的提交时间戳;所述装置还包括提交时间戳写入单元,用于在事务信息记录中记载本事务的提交时间戳;所述提前释放写锁单元将本事务更新操作的日志写入日志缓冲区,包括:当本事务更新操作写入日志缓冲区的时间戳、与本事务前驱事务的提交时间戳的差值达到或超过第二阈值时,等待所述前驱事务的状态为提交或回滚后将本事务更新操作的日志写入日志缓冲区。
可选的,所述提前释放写锁请求中携带有将本事务更新操作的日志写入日志缓冲区的时间戳,供协调者用来生成本事务的提交时间戳。
可选的,所述前驱事务发现单元在事务信息记录中记载本事务的前驱事务,包括:在事务信息记录里本事务的条目中写入本事务的每个前驱事务及前驱事务的状态,在本事务的每个前驱事务的条目中将本事务记载为所述前驱事务的后继事务;所述提交回滚状态单元具体用于:根据本事务在提交/回滚阶段的执行结果,将事务信息记录里本事务的条目中的状态更新为提交或回滚,将本事务的后继事务的条目中本事务的状态更新为提交或回滚。
可选的,所述装置还包括:前驱事务持久化单元,用于持久化事务信息记录中本事务的前驱事务和本事务的状态。
图9所示为本说明书实施例提供的一种二阶段提交分布式事务更新数据库的实现装置,应用在协调者上,所述装置包括准备请求发送单元和释放写锁响应单元,其中:准备请求发送单元用于向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;释放写锁响应单元用于在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送。
一个例子中,所述装置还包括:提交时间戳生成单元,用于在收到所有参与者发送的提前释放写锁请求后,生成本事务的提交时间戳;所述提前释放写锁响应中携带有本事务的提交时间戳。
上述例子中,所述提前释放写锁请求中携带有发送所述提前释放请求的参与者将本事务更新操作的日志写入日志缓冲区的时间戳;所述提交时间戳生成单元生成本事务的提交时间戳,包括:将所有参与者发送的提前释放请求中所述写入日志缓冲区的时间戳里最晚的一个作为本事务的提交时间戳。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中应用在参与者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤。对应用在参与者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机设备,该计算机设备包括存储器和处理器。其中,存储器上存储有能够由处理器运行的计算机程序;处理器在运行存储的计算机程序时,执行本说明书实施例中应用在协调者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤。对应用在协调者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中应用在参与者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤。对应用在参与者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
本说明书的实施例提供了一种计算机可读存储介质,该存储介质上存储有计算机程序,这些计算机程序在被处理器运行时,执行本说明书实施例中应用在协调者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤。对应用在协调者上的二阶段提交分布式事务更新数据库的实现方法的各个步骤的详细描述请参见之前的内容,不再重复。
以上所述仅为本说明书的较佳实施例而已,并不用以限制请求保护的其他实施例,凡在本说明书的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在请求保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书的实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书的实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

Claims (24)

1.一种二阶段提交分布式事务更新数据库的实现方法,应用在参与者上,所述方法包括:
根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作;
将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务;
在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求;
在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁;
在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息;
根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚,包括:根据从所述协调者收到的提交消息或回滚消息,执行本事务的二阶段提交或回滚,并将事务信息记录中本事务的状态写为提交或回滚;
其中,所述提交消息由所述协调者在从所有参与者收到的均是准备成功的一阶段准备响应消息的情况下,向每个参与者发送;所述回滚消息由所述协调者在任何一个参与者返回的是准备失败的情况下,向所有参与者发送。
2.根据权利要求1所述的方法,所述方法还包括:当本事务没有前驱事务时,在日志缓冲区中本事务更新操作的日志持久化成功之后,向协调者发送准备成功的一阶段准备响应消息。
3.根据权利要求1所述的方法,所述提前释放写锁响应中携带有协调者生成的提交时间戳;
所述方法还包括:在事务信息记录中记载本事务的提交时间戳;
所述按照所述指令执行更新操作,包括:当本次更新操作的时间戳与本事务前驱事务的提交时间戳的差值达到或超过第一阈值时,等待所述前驱事务的状态为提交或回滚后,按照所述指令执行更新操作。
4.根据权利要求1所述的方法,所述提前释放写锁响应中携带有协调者生成的提交时间戳;
所述方法还包括:在事务信息记录中记载本事务的提交时间戳;
所述将本事务更新操作的日志写入日志缓冲区,包括:当本事务更新操作写入日志缓冲区的时间戳、与本事务前驱事务的提交时间戳的差值达到或超过第二阈值时,等待所述前驱事务的状态为提交或回滚后将本事务更新操作的日志写入日志缓冲区。
5.根据权利要求1所述的方法,所述提前释放写锁请求中携带有将本事务更新操作的日志写入日志缓冲区的时间戳,供协调者用来生成本事务的提交时间戳。
6.根据权利要求1所述的方法,所述在事务信息记录中记载本事务的前驱事务,包括:在事务信息记录里本事务的条目中写入本事务的每个前驱事务及前驱事务的状态,在本事务的每个前驱事务的条目中将本事务记载为所述前驱事务的后继事务;
所述根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚,包括:根据本事务在提交/回滚阶段的执行结果,将事务信息记录里本事务的条目中的状态更新为提交或回滚,将本事务的后继事务的条目中本事务的状态更新为提交或回滚。
7.根据权利要求1所述的方法,所述方法还包括:持久化事务信息记录中本事务的前驱事务和本事务的状态。
8.一种二阶段提交分布式事务更新数据库的实现方法,应用在协调者上,所述方法包括:
向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;
在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送;
在从所有参与者收到的均是准备成功的一阶段准备响应消息的情况下,向每个参与者发送提交消息,在任何一个参与者返回的是准备失败的情况下,向所有参与者发送回滚消息;
其中,所述提交消息或所述回滚消息被各个参与者用于执行所述本事务的二阶段提交或回滚,并将事务信息记录中本事务的状态写为提交或回滚。
9.根据权利要求8所述的方法,所述方法还包括:在收到所有参与者发送的提前释放写锁请求后,生成本事务的提交时间戳;
所述提前释放写锁响应中携带有本事务的提交时间戳。
10.根据权利要求9所述的方法,所述提前释放写锁请求中携带有发送所述提前释放写锁请求的参与者将本事务更新操作的日志写入日志缓冲区的时间戳;
所述生成本事务的提交时间戳,包括:将所有参与者发送的提前释放写锁请求中所述写入日志缓冲区的时间戳里最晚的一个作为本事务的提交时间戳。
11.一种二阶段提交分布式事务更新数据库的实现装置,应用在参与者上,所述装置包括:
更新操作执行单元,用于根据本事务更新目标数据库记录的指令,为目标数据库记录加写锁后按照所述指令执行更新操作;
前驱事务发现单元,用于将事务信息记录中状态为提前释放写锁、并且更新对象涉及所述目标数据库记录的其他事务作为本事务的前驱事务,在事务信息记录中记载本事务的前驱事务;
释放写锁请求单元,用于在收到协调者发送的一阶段准备请求消息后,将本事务更新操作的日志写入日志缓冲区,写入成功后向协调者发送提前释放写锁请求;
提前释放写锁单元,用于在收到协调者返回的提前释放写锁响应后,释放写锁,并将事务信息记录中本事务的状态置为提前释放写锁;
第一准备响应发送单元,用于在日志缓冲区中本事务更新操作的日志持久化成功之后,当本事务的所有前驱事务的状态为提交后向协调者发送准备成功的一阶段准备响应消息,或者当本事务的任一前驱事务的状态为回滚后向协调者发送准备失败的一阶段准备响应消息;
提交回滚状态单元,用于根据本事务在二阶段的执行结果,将事务信息记录中本事务的状态置为提交或回滚,包括:根据从所述协调者收到的提交消息或回滚消息,执行本事务的二阶段提交或回滚,并将事务信息记录中本事务的状态写为提交或回滚;
其中,所述提交消息由所述协调者在从所有参与者收到的均是准备成功的一阶段准备响应消息的情况下,向每个参与者发送;所述回滚消息由所述协调者在任何一个参与者返回的是准备失败的情况下,向所有参与者发送。
12.根据权利要求11所述的装置,所述装置还包括:第二准备响应发送单元,用于当本事务没有前驱事务时,在日志缓冲区中本事务更新操作的日志持久化成功之后,向协调者发送准备成功的一阶段准备响应消息。
13.根据权利要求11所述的装置,所述提前释放写锁响应中携带有协调者生成的提交时间戳;
所述装置还包括:提交时间戳写入单元,用于在事务信息记录中记载本事务的提交时间戳;
所述更新操作执行单元按照指令执行更新操作,包括:当本次更新操作的时间戳与本事务前驱事务的提交时间戳的差值达到或超过第一阈值时,等待所述前驱事务的状态为提交或回滚后,按照所述指令执行更新操作。
14.根据权利要求11所述的装置,所述提前释放写锁响应中携带有协调者生成的提交时间戳;
所述装置还包括:提交时间戳写入单元,用于在事务信息记录中记载本事务的提交时间戳;
所述提前释放写锁单元将本事务更新操作的日志写入日志缓冲区,包括:当本事务更新操作写入日志缓冲区的时间戳、与本事务前驱事务的提交时间戳的差值达到或超过第二阈值时,等待所述前驱事务的状态为提交或回滚后将本事务更新操作的日志写入日志缓冲区。
15.根据权利要求11所述的装置,所述提前释放写锁请求中携带有将本事务更新操作的日志写入日志缓冲区的时间戳,供协调者用来生成本事务的提交时间戳。
16.根据权利要求11所述的装置,所述前驱事务发现单元在事务信息记录中记载本事务的前驱事务,包括:在事务信息记录里本事务的条目中写入本事务的每个前驱事务及前驱事务的状态,在本事务的每个前驱事务的条目中将本事务记载为所述前驱事务的后继事务;
所述提交回滚状态单元具体用于:根据本事务在提交/回滚阶段的执行结果,将事务信息记录里本事务的条目中的状态更新为提交或回滚,将本事务的后继事务的条目中本事务的状态更新为提交或回滚。
17.根据权利要求11所述的装置,所述装置还包括:前驱事务持久化单元,用于持久化事务信息记录中本事务的前驱事务和本事务的状态。
18.一种二阶段提交分布式事务更新数据库的实现装置,应用在协调者上,所述装置包括:
准备请求发送单元,用于向参与者发送结束本事务的一阶段准备请求消息;所述本事务用于更新目标数据库记录;
释放写锁响应单元,用于在收到所有参与者发送的提前释放写锁请求后,向每个参与者返回提前释放写锁响应,指示每个参与者对其目标数据库记录解锁;所述提前释放写锁请求由参与者在将本事务更新操作的日志写入日志缓冲区成功后发送;
第一准备响应发送单元,在从所有参与者收到的均是准备成功的一阶段准备响应消息的情况下,向每个参与者发送提交消息,在任何一个参与者返回的是准备失败的情况下,向所有参与者发送回滚消息;
其中,所述提交消息或所述回滚消息被各个参与者用于执行所述本事务的二阶段提交或回滚,并将事务信息记录中本事务的状态写为提交或回滚。
19.根据权利要求18所述的装置,所述装置还包括:提交时间戳生成单元,用于在收到所有参与者发送的提前释放写锁请求后,生成本事务的提交时间戳;
所述提前释放写锁响应中携带有本事务的提交时间戳。
20.根据权利要求19所述的装置,所述提前释放写锁请求中携带有发送所述提前释放写锁请求的参与者将本事务更新操作的日志写入日志缓冲区的时间戳;
所述提交时间戳生成单元生成本事务的提交时间戳,包括:将所有参与者发送的提前释放写锁请求中所述写入日志缓冲区的时间戳里最晚的一个作为本事务的提交时间戳。
21.一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如权利要求1到7任意一项所述的方法。
22.一种计算机设备,包括:存储器和处理器;所述存储器上存储有可由处理器运行的计算机程序;所述处理器运行所述计算机程序时,执行如权利要求8到10任意一项所述的方法。
23.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如权利要求1到7任意一项所述的方法。
24.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器运行时,执行如权利要求8到10任意一项所述的方法。
CN202010634228.1A 2020-07-02 2020-07-02 二阶段提交分布式事务更新数据库的实现方法和装置 Active CN111858629B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN202010634228.1A CN111858629B (zh) 2020-07-02 2020-07-02 二阶段提交分布式事务更新数据库的实现方法和装置
EP21180211.1A EP3933608A1 (en) 2020-07-02 2021-06-18 Method and apparatus for updating database by using two-phase commit distributed transaction
US17/355,505 US11429599B2 (en) 2020-07-02 2021-06-23 Method and apparatus for updating database by using two-phase commit distributed transaction
JP2021107588A JP2022013854A (ja) 2020-07-02 2021-06-29 2フェーズコミット分散トランザクションを使用することによってデータベースを更新するための方法および装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010634228.1A CN111858629B (zh) 2020-07-02 2020-07-02 二阶段提交分布式事务更新数据库的实现方法和装置

Publications (2)

Publication Number Publication Date
CN111858629A CN111858629A (zh) 2020-10-30
CN111858629B true CN111858629B (zh) 2023-08-22

Family

ID=73153645

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010634228.1A Active CN111858629B (zh) 2020-07-02 2020-07-02 二阶段提交分布式事务更新数据库的实现方法和装置

Country Status (4)

Country Link
US (1) US11429599B2 (zh)
EP (1) EP3933608A1 (zh)
JP (1) JP2022013854A (zh)
CN (1) CN111858629B (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11641665B2 (en) 2020-09-09 2023-05-02 Self Financial, Inc. Resource utilization retrieval and modification
US11475010B2 (en) * 2020-09-09 2022-10-18 Self Financial, Inc. Asynchronous database caching
US20220075877A1 (en) 2020-09-09 2022-03-10 Self Financial, Inc. Interface and system for updating isolated repositories
US11470037B2 (en) 2020-09-09 2022-10-11 Self Financial, Inc. Navigation pathway generation
CN112532625B (zh) * 2020-11-27 2022-09-13 杭州安恒信息安全技术有限公司 网络态势感知评估数据更新方法、装置及可读存储介质
CN115658805B (zh) * 2022-09-15 2023-10-17 星环信息科技(上海)股份有限公司 一种事务一致性管理引擎及方法
CN115658245B (zh) * 2022-12-22 2023-03-10 北京奥星贝斯科技有限公司 一种基于分布式数据库系统的事务提交系统、方法及装置
CN116719832B (zh) * 2023-08-07 2023-11-24 金篆信科有限责任公司 数据库并发控制方法和装置、电子设备和存储介质
CN117435574A (zh) * 2023-12-21 2024-01-23 北京大道云行科技有限公司 改进的二阶段提交事务实现方法及系统、设备、存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706811A (zh) * 2009-11-24 2010-05-12 中国科学院软件研究所 一种分布式数据库系统事务提交方法
CN103473318A (zh) * 2013-09-12 2013-12-25 中国科学院软件研究所 一种面向内存数据网格的分布式事务保障方法
CN104793988A (zh) * 2014-01-20 2015-07-22 阿里巴巴集团控股有限公司 跨数据库分布式事务的实现方法和装置
US9922086B1 (en) * 2017-01-06 2018-03-20 Amazon Technologies, Inc. Consistent query of local indexes
CN109684048A (zh) * 2018-11-22 2019-04-26 华为技术有限公司 事务提交系统中处理事务的方法及装置
CN109947742A (zh) * 2019-02-28 2019-06-28 上海交通大学 面向二阶段锁的多版本数据库并发控制方法和系统
CN110032428A (zh) * 2019-02-21 2019-07-19 阿里巴巴集团控股有限公司 分布式事务的执行方法和装置
CN111259071A (zh) * 2020-01-04 2020-06-09 浙江科技学院 一种分布式数据库系统中的并发访问控制方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5452445A (en) * 1992-04-30 1995-09-19 Oracle Corporation Two-pass multi-version read consistency
US7284018B1 (en) * 2003-10-15 2007-10-16 Sun Microsystems, Inc. Logless transaction coordination
US10007547B2 (en) * 2008-01-17 2018-06-26 International Business Machines Corporation Specifying an invocation order of a plurality of resources in a transaction according to resource distance
JP5223457B2 (ja) * 2008-05-22 2013-06-26 富士通株式会社 分散トランザクションの2相コミットプロトコルにおけるインダウト状態の解決方法
US9165025B2 (en) * 2009-12-11 2015-10-20 International Business Machines Corporation Transaction recovery in a transaction processing computer system employing multiple transaction managers
US8880486B2 (en) * 2010-07-27 2014-11-04 Sap Ag Distributed database system utilizing an extended two-phase-commit process
US9336262B2 (en) * 2010-10-05 2016-05-10 Sap Se Accelerated transactions with precommit-time early lock release
US8442962B2 (en) * 2010-12-28 2013-05-14 Sap Ag Distributed transaction management using two-phase commit optimization
US10474493B2 (en) * 2014-02-28 2019-11-12 Red Hat, Inc. Systems and methods for semi-durable transaction log storage in two-phase commit protocol transaction processing
US10678445B2 (en) * 2015-06-10 2020-06-09 Microsoft Technology Licensing, Llc Recovery in data centers
US10585874B2 (en) * 2016-04-25 2020-03-10 International Business Machines Corporation Locking concurrent commands in a database management system
US10565184B2 (en) * 2016-10-31 2020-02-18 Oath Inc. Method and system for committing transactions in a semi-distributed manner
US11436218B2 (en) * 2019-08-02 2022-09-06 Alibaba Group Holding Limited Transaction processing for a database distributed across availability zones
CN111475583B (zh) * 2020-06-19 2020-11-17 阿里云计算有限公司 事务处理方法及装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101706811A (zh) * 2009-11-24 2010-05-12 中国科学院软件研究所 一种分布式数据库系统事务提交方法
CN103473318A (zh) * 2013-09-12 2013-12-25 中国科学院软件研究所 一种面向内存数据网格的分布式事务保障方法
CN104793988A (zh) * 2014-01-20 2015-07-22 阿里巴巴集团控股有限公司 跨数据库分布式事务的实现方法和装置
US9922086B1 (en) * 2017-01-06 2018-03-20 Amazon Technologies, Inc. Consistent query of local indexes
CN109684048A (zh) * 2018-11-22 2019-04-26 华为技术有限公司 事务提交系统中处理事务的方法及装置
CN110032428A (zh) * 2019-02-21 2019-07-19 阿里巴巴集团控股有限公司 分布式事务的执行方法和装置
CN109947742A (zh) * 2019-02-28 2019-06-28 上海交通大学 面向二阶段锁的多版本数据库并发控制方法和系统
CN111259071A (zh) * 2020-01-04 2020-06-09 浙江科技学院 一种分布式数据库系统中的并发访问控制方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘冉 ; 布辉 ; .分布式数据库两阶段提交协议研究与改进.电脑知识与技术.2012,(第15期),全文. *

Also Published As

Publication number Publication date
US11429599B2 (en) 2022-08-30
CN111858629A (zh) 2020-10-30
EP3933608A1 (en) 2022-01-05
JP2022013854A (ja) 2022-01-18
US20220004542A1 (en) 2022-01-06

Similar Documents

Publication Publication Date Title
CN111858629B (zh) 二阶段提交分布式事务更新数据库的实现方法和装置
CN109739935B (zh) 数据读取方法、装置、电子设备以及存储介质
JP6362685B2 (ja) オンライン・ホット・スタンバイ・データベースのためのレプリケーション方法、プログラム、および装置
US10761946B2 (en) Transaction commit protocol with recoverable commit identifier
CN106462594B (zh) 一种大规模并行处理数据库的系统和方法
CN106844014B (zh) 分布式事务防悬挂的实现方法和装置
US10114848B2 (en) Ensuring the same completion status for transactions after recovery in a synchronous replication environment
WO2017219857A1 (zh) 一种数据处理方法和设备
CN105955804B (zh) 一种处理分布式事务的方法与设备
US20180101564A1 (en) Transaction compensation for single phase resources
CN109783578B (zh) 数据读取方法、装置、电子设备以及存储介质
EP4276651A1 (en) Log execution method and apparatus, and computer device and storage medium
WO2018006723A1 (zh) 一种针对数据库的数据修改请求处理方法及装置
Padhye et al. Scalable transaction management with snapshot isolation for NoSQL data storage systems
US9330153B2 (en) System, method, and computer readable medium that coordinates between devices using exchange of log files
CN113568716A (zh) 一种事务处理方法、装置、电子设备及存储介质
WO1997004387A1 (en) Optimized synchronisation procedure
CN113297173B (zh) 分布式数据库集群管理方法及装置、电子设备
US20230315713A1 (en) Operation request processing method, apparatus, device, readable storage medium, and system
CN114238353A (zh) 一种分布式事务的实现方法及系统
CN108460047B (zh) 数据同步方法及设备
CN115774754A (zh) 基于分布式事务的元数据管理方法、装置、设备及介质
WO2023103340A1 (zh) 一种区块数据提交的方法及装置
Pankowski Consistency and availability of Data in replicated NoSQL databases
CN115658245A (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
REG Reference to a national code

Ref country code: HK

Ref legal event code: DE

Ref document number: 40039799

Country of ref document: HK

GR01 Patent grant
GR01 Patent grant