CN117632984A - 一种分布式事务回滚方法、装置、设备及介质 - Google Patents
一种分布式事务回滚方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN117632984A CN117632984A CN202311639858.8A CN202311639858A CN117632984A CN 117632984 A CN117632984 A CN 117632984A CN 202311639858 A CN202311639858 A CN 202311639858A CN 117632984 A CN117632984 A CN 117632984A
- Authority
- CN
- China
- Prior art keywords
- subtask
- data
- statement
- distributed transaction
- executed
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000004590 computer program Methods 0.000 claims description 16
- 239000012634 fragment Substances 0.000 claims description 8
- 238000001514 detection method Methods 0.000 claims description 4
- 238000012545 processing Methods 0.000 description 22
- 230000004048 modification Effects 0.000 description 12
- 238000012986 modification Methods 0.000 description 12
- 230000008569 process Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 238000012217 deletion Methods 0.000 description 7
- 230000037430 deletion Effects 0.000 description 7
- 238000010586 diagram Methods 0.000 description 5
- 230000003287 optical effect Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 238000007792 addition Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/215—Improving data quality; Data cleansing, e.g. de-duplication, removing invalid entries or correcting typographical errors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Quality & Reliability (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种分布式事务回滚方法、装置、设备及存储介质。该方法包括:在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务;针对各子任务,查询子任务对应的更新数据;针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致;在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。本发明实施例的技术方案可以提高分布式事务回滚的效率。
Description
技术领域
本发明涉及数据库技术领域,尤其涉及一种分布式事务回滚方法、装置、设备及介质。
背景技术
随着微服务架构的流行,可以对分布式事务对应的多个数据库进行数据库中数据增加、删除或修改。
在分布式事务处理过程中,往往会出现对数据库中的数据操作错误的情况,导致数据库中的数据产生错误,干扰数据分析工作。
通常采用数据回滚的方式,将分布式事务对应的数据库回滚到未执行操作状态,但在需要执行多个数据库回滚操作时,数据库回滚效率较低且耗费时间较长。
发明内容
本发明提供了一种分布式事务回滚方法、装置、设备及介质,以提高分布式事务回滚的效率。
第一方面,本发明实施例提供了一种分布式事务回滚方法,该方法包括:
在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务;
针对各子任务,查询子任务对应的更新数据;
针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致;
在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。
第二方面,本发明实施例还提供了一种分布式事务回滚装置,该装置包括:
任务获取模块,用于在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务;
数据查询模块,用于针对各子任务,查询子任务对应的更新数据;
结果检测模块,用于针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致;
任务回滚模块,用于在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。
第三方面,本发明实施例还提供了一种分布式事务回滚设备,分布式事务回滚设备包括:
至少一个处理器;以及
与至少一个处理器通信连接的存储器;其中,
存储器存储有可被至少一个处理器执行的计算机程序,计算机程序被至少一个处理器执行,以使至少一个处理器能够执行本发明任一实施例的分布式事务回滚方法。
根据本发明的另一方面,提供了一种计算机可读存储介质,计算机可读存储介质存储有计算机指令,计算机指令用于使处理器执行时实现本发明任一实施例的分布式事务回滚方法。
本发明实施例的技术方案,通过在同一存储空间中获取分布式事务对应的已执行的至少一个子任务,查询子任务对应的更新数据,检测子各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态,各存储空间可以同时进行回滚操作,各不同存储空间操作互不影响,提高了分布式事务回滚的效率。
应当理解,本部分所描述的内容并非旨在标识本发明的实施例的关键或重要特征,也不用于限制本发明的范围。本发明的其它特征将通过以下的说明书而变得容易理解。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是根据本发明实施例一提供的一种分布式事务回滚方法的流程图;
图2是根据本发明实施例提供的一种分布式事务回滚方法的流程图;
图3是根据本发明实施例二提供的一种分布式事务回滚方法的流程图;
图4是根据本发明实施例提供的一种分布式事务回滚方法的流程图;
图5是根据本发明实施例提供的一种分布式事务回滚装置的结构图;
图6是实现本发明实施例提供的一种分布式事务回滚设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本发明实施例的技术方案中,所涉及的数据回滚指令等的获取、存储和应用等,均符合相关法律法规的规定,且不违背公序良俗。
实施例一
图1为本发明实施例一提供的一种分布式事务回滚方法的流程图。本发明实施例可适用于分布式事务回滚的情况,该方法可以由分布式事务回滚装置来执行,该分布式事务回滚装置可以采用硬件和/或软件的形式实现。
参见图1所示的分布式事务回滚方法,包括:
S101、在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务。
其中,分布式事务可以是需要基于分布在不同存储空间中的数据进行处理的事务,分布式事务可以拆分成多个子任务,一部分子任务基于一个存储空间的数据执行计算操作,一部分子任务基于另一个存储空间的数据执行计算操作。也可以理解为,分布式事务可以拆分成多个任务,一个任务对应一个存储空间,每个任务可以具体拆分为至少一个子任务,相应同一个任务拆分得到的子任务对应同一个存储空间。数据回滚指令可以是在数据库中数据处理错误时,将数据库中数据恢复到上一次正确状态或本次未处理之前的状态的命令。不同存储空间相互独立,可选的,存储空间的数据相互隔离。存储空间可以是同一个设备上的数据库或数据库中数据分片,不同存储空间可以是不同数据库,或者不同存储空间可以是不同数据分片。数据库包括多个数据分片,不同存储空间可以是同一个数据库中的不同数据分片,还可以是不同数据库的不同数据分片。
分布式事务可以是Saga事务,Saga事务在接收到分布式事务的数据回滚指令时,可以在每个子任务中建立执行镜像,响应于分布式事务的执行语句执行失败,根据当前分布式事务的身份标识号(Identity document,ID)跟状态依次恢复事务提交前的数据。在Saga模式中,每个步骤都负责执行一个操作,并且记录其状态以确保事务的正确性。如果某个步骤失败,则需要回滚所有之前的步骤以撤销对数据的任何更改。反之,如果所有步骤都成功,则事务被提交。Saga事务核心思想是将长事务拆分为多个本地短事务,由Saga事务协调器协调,如果正常结束那就正常完成,如果某个步骤失败,则根据相反顺序一次调用补偿操作。Saga事务基本协议如下:每个Saga事务由一系列幂等的有序子事务(SubTransaction)Ti组成。每个Ti都有对应的幂等补偿动作Ci,补偿动作用于撤销Ti造成的结果。
具体的,获取同一分布式事务在同一存储空间对应的所有子任务,并在其中筛选出已执行的子任务。或者是,获取同一分布式事务对应的所有已执行的子任务,并按照各存储空间,筛选出每个存储空间的子任务。
在一个例子中,分布式事务是生成处理购买操作,分布式事务可以划分为生成购买订单、处理付款和生成物流订单等子任务。生成购买订单的子任务在商品数据的数据库执行。处理付款的子任务在交易数据的数据库执行。生成物流订单的子任务在物流数据的数据库执行。通过三个子任务的执行完成分布式事务,在接收到分布式事务的数据回滚指令时,获取到该分布式事务对应的已执行的3个子任务。
S102、针对各子任务,查询子任务对应的更新数据。
其中,更新数据可以是子任务执行之后,存储空间中子任务指向的数据的当前内容。子任务指向的数据可以是指子任务执行时处理的数据。实际上,在子任务执行的同时和之后,若未存在其他任务对该子任务指向的数据进行处理,该更新数据为子任务执行之后得到的数据。若存在其他任务对该子任务执行之后得到的数据进行处理,该更新数据,即为子任务执行之后得到的数据再次进行其他操作得到的数据。
具体的,对于各子任务,查询存储空间中各子任务指向的数据位置处的数据,得到各子任务对应的更新数据。
在一个例子中,子任务可以是将数据库中A表的第一行数据删除,对A表执行该子任务,子任务指向的数据为A表中第一行数据,该子任务的更新数据为A表中当前时刻的第一行数据。
S103、针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致。
其中,预期执行结果可以是在子任务执行之前,存储空间中的数据,在执行子任务后,预期生成的结果。预期执行结果可以理解为子任务执行完成得到的计算结果。
在一个例子中,子任务可以是将数据库中A表的第一行数据删除,对A表执行该子任务,得到删除了第一行数据的A表,此时A表中第一行数据更新为删除前的第二行数据,或者空着,该子任务的更新数据为删除前的第二行数据或空。
具体的,针对各子任务,子任务对应的更新数据与子任务对应的预期执行结果一致,说明存储空间中子任务指向的数据只经过子任务的处理操作;子任务对应的更新数据与子任务对应的预期执行结果不一致,说明存储空间中子任务指向的数据不只经过子任务的处理操作,还经过其他任务的处理操作。
在一个例子中,子任务可以是将数据库中A表的数据由123修改为456,将A表执行该子任务,得到更新数据为456,而123经过子任务处理得到预期执行结果456;比较更新数据与预期执行结果,确定子任务对应的更新数据与子任务对应的预期执行结果一致。
S104、在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。
其中,反向执行语句可以是与子任务执行的操作互逆的指令。示例性的,子任务为删除某一数据,则反向执行语句可以是增加该数据的指令;子任务为修改某一数据,则反向执行语句可以是修改该数据至未执行子任务时的数据的指令;子任务为增加某一数据,则反向执行语句可以是删除该数据的指令。
具体的,建立反向执行语句记录表,解析分布式事务的子任务的执行语句,获取执行语句的内容、表名、主键和索引,根据解析出的执行语句、表名、主键、索引以及存储空间中的数据组合成反向执行语句,可通过将同一存储空间中的数据执行反向执行语句,可获取未执行子任务时的数据,将组合成的反向执行语句存入到反向执行语句记录表中。响应于分布式事务的执行语句执行失败,根据当前分布式事务的ID和状态依次在每个分库中查出执行失败的执行语句对应的反向执行语句,并执行该执行失败的反向执行语句。执行反向执行语句的前提条件可以是指,需要判断数据是否是上次子任务修改之后的结果,如果是,说明该条数据没有经过别的分布式事务修改,能直接回滚;如果不是,说明该条数据已经被别的分布式事务修改,不能直接回滚,分布式事务本身对数据项不加锁,故采用乐观锁机制。在反向执行表中,把上次修改后的数据加权生成一个预期值,在执行前需要查询待回滚数据,计算出预期值与反向执行记录表的新值比较,如果预期值与反向执行记录表的新值一致,则回滚。其中,预期值和新值为数值,可以直接进行比较,若预期值和新值为非数值,可以将把预期值和新值转换为数值,在进行比较。
在一个例子中,子任务可以是将数据库中A表的数据由123修改为456,预期执行结果456,在回滚时,获取456的数据位置处,得到更新数据为456,从而确定子任务对应的更新数据与子任务对应的预期执行结果一致;获取将数据库中A表的数据由123修改为456的执行语句的内容、表名、主键及索引,根据解析出的执行语句、表名、主键、索引以及存储空间中的数据组合成反向执行语句,获取子任务的反向执行语句,反向执行语句是将数据库中A表的数据由456修改为123。
现有中一个分布式事务,顺序分为了T1、T2、…、Tn个子事务,每个子事务对应一个补偿定义,正常情况下子事务序列T1、T2、…、Tn得以完成(最佳情况),如果Tj发生异常,如图2所示,则序列T1、T2、…、Tj、Cj-1、…、C2、C1,0<j<n,得以完成。在下一个子事务执行前,上一个事务已经完成提交,如果是数据库的更新或者删除操作,后续子事务发生异常导致回滚,数据需要在本补偿方法中恢复至提交前状态,目前方法是先查询对应数据出来进行找全局对象进行预存储,在应用层完成相关数据准备。补偿发生时,把原始对象传进去进行操作,以备调用进行数据恢复。
目前的数据回滚方式在系统无进行事务时进行转储操作。即转储操作开始的时刻数据库处于一致性状态,而转储期间不允许对该条数据进行任何存取和修改活动,必须等待用户事务结束才能进行;转储期间允许对数据进行存取或修改,即转储与事务并发进行,所以副本上的数据不能保证正确有效。事物的日志文件主要内容包括事务标识、操作类型、操作对象、更新前数据旧值及更新后数据新值。但目前的数据回滚方式不适合联机交易处理场景,目前方法通过应用层先查数据存储对象的方式,预先查询操作对象的方式存储在公共变量里,如果是列表对象过多或者数据对象过大,多表操作,会导致存储对象复杂,处理难度加大;如果事务执行期间程序崩溃,导致数据会丢失,重启后也需要通过日志文件等进行手工处理恢复。
本发明实施例的技术方案,通过在同一存储空间中获取分布式事务对应的已执行的至少一个子任务,查询子任务对应的更新数据,检测子各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态,各存储空间可以同时进行回滚操作,各不同存储空间操作互不影响,提高了分布式事务回滚的效率。
可选的,分布式事务回滚方法,还包括:在子任务对应的更新数据与对应的预期执行结果不一致时,跳过执行子任务对应的反向执行语句。
具体的,分布式事务可以拆分成多个子任务,同一存储空间可以存在多个子任务,同一存储空间的子任务顺序执行,不同存储空间的子任务是并行的,获取子任务对应的更新数据,更新数据可以与子任务执行之后,存储空间中子任务指向的数据的当前内容相同,也可以不同,查询存储空间中子任务指向的数据执行子任务后得到的预期执行结果与更新数据一致时,说明存储空间中子任务指向的数据没有经过其他操作处理,若不一致,则证明存储空间中子任务指向的数据经过其他操作处理。实际上,本发明实施例应用于并发量小的分布式事务的应用场景中,可以理解的是,并发量小,表明一个分布式事务在执行时,通常不会存在第二个分布式事务并行执行,从而同一个存储空间中,在同一时刻仅会存在一个分布式事务的相应子任务处理数据,由此,若回滚时,一个子任务指向的数据经过其他操作处理,可以理解为是该子任务指向的数据已经被回滚,所以跳过执行子任务对应的反向执行语句,执行下一个子任务。
在一个例子中,子任务的更新数据为789;子任务对应的预期执行结果456,获取到子任务对应的更新数据与子任务对应的预期执行结果不一致,则跳过执行子任务对应的反向执行语句,不执行反向执行语句。
通过在子任务对应的更新数据与对应的预期执行结果不一致时不执行反向执行语句,可避免在设备宕机状况下对同一存储空间数据的重复回滚,导致数据错误,影像数据分析结果。
可选的,分布式事务回滚方法,还包括:分布式事务在至少一个存储空间中对应存在子任务;存储空间包括数据库或数据分片。
其中,数据分片可以是将大型数据集分成较小的数据块,每个数据块的数据可以独立处理,即每个数据块之间的处理相互独立,处理方式包括但不限于:删除、查询和添加。
具体的,分布式事务在至少一个存储空间中对应存在子任务,每个子任务用于对其对应的存储空间进行操作;存储空间包括数据库或数据分片,示例的,分布式事务在一个数据库可执行的子任务的数量为至少一个;或者分布式事务在一个数据分片可执行的子任务的数量为至少一个。
在一个例子中,分布式事务是生成处理购买操作,分布式事务可以划分为生成购买订单、处理付款和生成物流订单等子任务。生成购买订单的子任务在商品数据的数据库执行。处理付款的子任务在交易数据的数据库执行。生成物流订单的子任务在物流数据的数据库执行。
通过分布式事务在存储空间中对应存在子任务,每个子任务并发执行,互不影响,提升分布式事务处理的效率。
实施例二
图3为本发明实施例二提供的一种分布式事务回滚方法的流程图。本发明实施例在上述实施例的基础上,对分布式事务回滚操作进行了优化改进。
进一步地,将“在接收到分布式事务的数据回滚指令”细化为“在接收到分布式事务的数据回滚指令之前,获取分布式事务在存储空间中待执行的至少一个子任务;针对各子任务,在子任务对应的待执行语句为更新语句时,生成待执行语句在存储空间中指向的原始数据的查询语句,作为子任务的查询语句;针对各子任务,根据子任务的查询语句,确定待执行语句针对指向的原始数据生成的预期执行结果;按照第一顺序执行各子任务”,以完善对分布式事务回滚操作。
需要说明的是,在本发明实施例中未详述的部分,可参见其他实施例的表述。
参见图3所示的分布式事务回滚方法,包括:
S301、获取分布式事务在存储空间中待执行的至少一个子任务。
具体的,根据分布式事务,获取要完成分布式事务需要在存储空间中执行的各子任务。其中,子任务的数量为至少一个。
在一个例子中,分布式事务是生成处理购买操作,分布式事务可以划分为生成购买订单、处理付款和生成物流订单等子任务。生成购买订单的子任务在商品数据的数据库执行。处理付款的子任务在交易数据的数据库执行。生成物流订单的子任务在物流数据的数据库执行。获取生成处理购买操作在存储空间中待执行的3个子任务。
S302、针对各子任务,在子任务对应的待执行语句为更新语句时,生成待执行语句在存储空间中指向的原始数据的查询语句,作为子任务的查询语句。
其中,更新语句可以是可将存储空间中数据进行更新的命令。查询语句可以是可查询原始数据的数据位置的指令。原始数据可以是存储空间中的未执行子任务操作的初始状态的数据。
具体的,对于各子任务,当子任务对应的执行语句为更新语句,表明子任务对应的存储空间中的数据会进行更新,则生成指向存储空间的未执行子任务的数据的查询语句,作为子任务的查询语句,可查询原始数据的数据位置。
在一个例子中,子任务为更新A表第一行数据,则生成在该存储空间中指向A表第一行数据的查询语句,作为子任务的查询语句。
S303、针对各子任务,根据子任务的查询语句,确定待执行语句针对指向的原始数据生成的预期执行结果。
具体的,根据各子任务的查询语句,可查询到原始数据的存储位置,根据子任务的执行语句,将原始数据执行子任务的执行语句,获得预期执行结果。
在一个例子中,在一个例子中,子任务为更新A表第一行数据为123,则生成在该存储空间中指向A表第一行数据的查询语句,作为子任务的查询语句;根据子任务的查询语句,可查询到A表第一行数据,将A表第一行数据执行更新A表第一行数据为123,得到预期执行结果为A表第一行数据为123。
S304、按照第一顺序执行各子任务。
其中,第一顺序可以是各子任务进行预期执行结果获取的顺序。
具体的,将各子任务按执行顺序排序,逐一进行子任务对应的待执行语句是否为更新语句的判断,如果是更新语句,则针对各子任务生成查询语句,通过查询语句获取各子任务对应的预期执行结果。
在一个例子中,如下表1所示,子任务1为更新A表的第一行数据为123,子任务2为更新B表的第一行数据为456,子任务3为更新C表的第一行数据为789,第一顺序为子任务1、子任务2和子任务3,按照第一顺序分别获取子任务1、子任务2和子任务3对应的预期执行结果。
表1
S305、在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务。
S306、针对各子任务,查询子任务对应的更新数据。
S307、针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致。
S308、在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。
本发明实施例通过判断子任务对应的待执行语句为更新语句时,生成待执行语句在存储空间中指向的原始数据的查询语句,可获取原始数据的存储位置,确定各子任务的原始数据执行待执行语句后的预期执行结果,可进行执行结果是否符合预期的判断,提升分布式事务处理的准确性。
可选的,在在同一存储空间中获取分布式事务对应的已执行的至少一个子任务之后,还包括:针对各子任务,获取子任务的待执行语句中执行操作;针对各子任务,获取执行操作的逆操作对应的语句模板;针对各子任务,从子任务的待执行语句中提取执行元素,并添加到逆操作对应的语句模板中,生成子任务的反向执行语句。
具体的,获取各子任务的待执行语句中的执行操作,针对执行操作,获取各子任务对应的执行操作的逆操作,根据逆操作获取对应的语句模板,获取逆操作对应的语句模版,并在语句模板中添加执行操作对应的关键元素,生成子任务对应的反向执行语句。
示例性的,子任务的执行操作为新增数据,逆操作为删除数据,对应的关键元素为指向新增的数据的信息,例如位置和内容;子任务的执行操作为删除数据,逆操作为新增数据,对应的关键元素为指向删除的数据的信息;子任务的执行操作为修改数据,逆操作为修改数据,对应的关键元素为指向修改的数据的信息。
在一个例子中,子任务1的待执行语句中的执行操作是删除数据1,则子任务1对应的执行操作的逆操作是添加数据1,根据逆操作获取对应的添加数据的语句模版,并在语句模板中将添加的内容指定为数据1,生成子任务1的反向执行语句。
通过获取执行操作的逆操作对应的语句模板,生成子任务的反向执行语句,可获取存储空间中未执行待执行语句的原始数据,将数据恢复到未执行子任务状态,实现数据回滚。
可选的,更新语句,包括:数据增加语句、数据修改语句或数据删除语句。
具体的,当子任务对应的待执行语句为更新语句时,也就是子任务对应的存储空间中的数据待进行数据增加、数据修改和数据删除等至少一项时,生成待执行语句在存储空间中指向的原始数据的查询语句,查询到待进行数据更新的数据的存储位置。需要说明的是,更新语句通常是一个语句,若更新语句同时包括新增和修改,通常会分为多个子任务,即每个子任务对应的更新语句仍为一个操作的语句。
在一个例子中,子任务1对应的待执行语句为数据增加语句,子任务2对应的待执行语句为数据修改语句,子任务3对应的待执行语句为数据删除语句。
通过数据增加语句、数据修改语句和数据删除语句生成原始数据的查询语句,可查询到原始数据的存储位置,同时获取对该原始数据执行的操作,便于进行反向执行操作对应的反向执行语句的生成,获取存储空间数据的原始数据,提升分布式事务回滚的准确性。
可选的,执行各子任务对应的反向执行语句,包括:按照第二顺序执行各子任务对应的反向执行语句;其中,第一顺序与第二顺序相反。
具体的,按照各子任务的待执行语句的顺序为第一顺序,进行子任务对应的执行语句的执行,按照与第一顺序相反的第二顺序,对子任务进行数据回滚,将数据恢复至未执行子任务的原始数据。顺序执行子任务,逆序执行各子任务的反向执行语句,才能确保回滚正确。
在一个例子中,如表1所示,子任务1为更新A表的第一行数据为123,子任务2为更新B表的第一行数据为456,子任务3为更新C表的第一行数据为789,第一顺序为子任务1、子任务2和子任务3,则第二顺序为子任务3、子任务2和子任务1。
如图4所示,分布式事务正向逻辑是子任务有其对应的待执行语句,通过拦截器分析该待执行语句是否是更新语句,生成待执行性语句对应的存储空间中指向的原始数据的查询语句,存储到数据库中一个栈存储结构中,存储的key值是事务ID,与存储在Saga分布式事务控制表中一致,反向调用时,可根据ID找到该栈结构,顺序出栈的执行语句恢复数据。查询存储空间中指向的原始数据;根据待执行语句获取各子任务对应的反向执行语句,根据待执行性语句确定待执行语句针对指向的原始数据生成的预期执行结果,将反向执行语句存入反向执行记录表,存入数据库中。
分布式事务逆向逻辑是取第二顺序中的第一条语句,执行查询语句,检测所述子任务对应的更新数据是否与所述子任务对应的预期执行结果一致,若一致,获取并执行各所述子任务对应的反向执行语句,使得所述同一存储空间回滚至各所述子任务未执行时的状态,取第二顺序中的第二条语句,继续执行上述操作,直至第二顺序的所有语句执行完成。若不一致,跳过执行当前执行的反向执行语句,执行下一子任务的反向执行语句。此时,无需业务层输入指令,只需要通过应用层传一个状态码(回滚指令)给底层,底层获取待执行语句,执行待执行语句,不需要应用层拼装待执行语句。Saga事务循环嵌套时,通过栈来控制顺序,不会导致执行顺序乱序。
通过与第一顺序相反的第二顺序,按照第二顺序执行各子任务对应的反向执行语句,将数据逐层恢复至原始数据,提高回滚准确性。
实施例三
图5为本发明实施例三提供的一种分布式事务回滚装置的结构示意图。本发明实施例可适用于分布式事务回滚的情况,该装置可以执行分布式事务回滚方法,该装置可以采用硬件和/或软件的形式实现,该装置可配置于分布式事务回滚设备中。
参见图5所示的分布式事务回滚装置,包括:任务获取模块501、数据查询模块502、结果检测模块503和任务回滚模块504,其中,
任务获取模块501,用于在接收到分布式事务的数据回滚指令时,在同一存储空间中获取分布式事务对应的已执行的至少一个子任务;
数据查询模块502,用于针对各子任务,查询子任务对应的更新数据;
结果检测模块503,用于针对各子任务,检测子任务对应的更新数据是否与子任务对应的预期执行结果一致;
任务回滚模块504,用于在各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态。
本发明实施例的技术方案,通过在同一存储空间中获取分布式事务对应的已执行的至少一个子任务,查询子任务对应的更新数据,检测子各子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各子任务对应的反向执行语句,使得同一存储空间回滚至各子任务未执行时的状态,各存储空间可以同时进行回滚操作,各不同存储空间操作互不影响,提高了分布式事务回滚的效率。
可选的,分布式事务回滚装置,还包括:
子任务获取模块,用于在接收到分布式事务的数据回滚指令之前,获取分布式事务在存储空间中待执行的至少一个子任务;
查询语句获取模块,用于针对各子任务,在子任务对应的待执行语句为更新语句时,生成待执行语句在存储空间中指向的原始数据的查询语句,作为子任务的查询语句;
结果确定模块,用于针对各子任务,根据子任务的查询语句,确定待执行语句针对指向的原始数据生成的预期执行结果;
任务执行模块,用于按照第一顺序执行各子任务。
可选的,任务获取模块501,还包括:
语句获取单元,用于在在同一存储空间中获取分布式事务对应的已执行的至少一个子任务之后,针对各子任务,获取子任务的待执行语句中执行操作;
模版获取单元,用于针对各子任务,获取执行操作的逆操作对应的语句模板;
反向语句生成单元,用于针对各子任务,从子任务的待执行语句中提取执行元素,并添加到逆操作对应的语句模板中,生成子任务的反向执行语句。
可选的,更新语句,包括:数据增加语句、数据修改语句或数据删除语句。
可选的,任务回滚模块504,包括:
语句执行单元,用于按照第二顺序执行各子任务对应的反向执行语句;其中,第一顺序与第二顺序相反。
可选的,分布式事务回滚装置,还包括:
语句跳过模块,用于在子任务对应的更新数据与对应的预期执行结果不一致时,跳过执行子任务对应的反向执行语句。
可选的,任务获取模块501,包括:
任务对应模块,用于分布式事务在至少一个存储空间中对应存在子任务;存储空间包括数据库或数据分片。
本发明实施例所提供的分布式事务回滚装置可执行本发明任意实施例所提供的分布式事务回滚方法,具备执行分布式事务回滚方法相应的功能模块和有益效果。
实施例四
图6示出了可以用来实施本发明的实施例的分布式事务回滚设备600的结构示意图。
如图6所示,分布式事务回滚设备600包括至少一个处理器601,以及与至少一个处理器601通信连接的存储器,如只读存储器(ROM)602、随机访问存储器(RAM)603等,其中,存储器存储有可被至少一个处理器执行的计算机程序,处理器601可以根据存储在只读存储器(ROM)602中的计算机程序或者从存储单元608加载到随机访问存储器(RAM)603中的计算机程序,来执行各种适当的动作和处理。在RAM603中,还可存储分布式事务回滚设备600操作所需的各种程序和数据。处理器601、ROM 602以及RAM 603通过总线604彼此相连。输入/输出(I/O)接口605也连接至总线604。
分布式事务回滚设备600中的多个部件连接至I/O接口605,包括:输入单元606,例如键盘、鼠标等;输出单元607,例如各种类型的显示器、扬声器等;存储单元608,例如磁盘、光盘等;以及通信单元609,例如网卡、调制解调器、无线通信收发机等。通信单元609允许分布式事务回滚设备600通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
处理器601可以是各种具有处理和计算能力的通用和/或专用处理组件。处理器601的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的处理器、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。处理器601执行上文所描述的各个方法和处理,例如分布式事务回滚方法。
在一些实施例中,分布式事务回滚方法可被实现为计算机程序,其被有形地包含于计算机可读存储介质,例如存储单元608。在一些实施例中,计算机程序的部分或者全部可以经由ROM 602和/或通信单元609而被载入和/或安装到分布式事务回滚设备600上。当计算机程序加载到RAM 603并由处理器601执行时,可以执行上文描述的分布式事务回滚方法的一个或多个步骤。备选地,在其他实施例中,处理器601可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行分布式事务回滚方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本发明的方法的计算机程序可以采用一个或多个编程语言的任何组合来编写。这些计算机程序可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器,使得计算机程序当由处理器执行时使流程图和/或框图中所规定的功能/操作被实施。计算机程序可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本发明的上下文中,计算机可读存储介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的计算机程序。计算机可读存储介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。备选地,计算机可读存储介质可以是机器可读信号介质。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在分布式事务回滚设备上实施此处描述的系统和技术,该分布式事务回滚设备具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给分布式事务回滚设备。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入或者、触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)、区块链网络和互联网。
计算系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,又称为云计算服务器或云主机,是云计算服务体系中的一项主机产品,以解决了传统物理主机与VPS(VirtualPrivate Server,虚拟专用服务器)服务中,存在的管理难度大,业务扩展性弱的缺陷。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本发明中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本发明的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
Claims (10)
1.一种分布式事务回滚方法,其特征在于,所述方法包括:
在接收到分布式事务的数据回滚指令时,在同一存储空间中获取所述分布式事务对应的已执行的至少一个子任务;
针对各所述子任务,查询所述子任务对应的更新数据;
针对各所述子任务,检测所述子任务对应的更新数据是否与所述子任务对应的预期执行结果一致;
在各所述子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各所述子任务对应的反向执行语句,使得所述同一存储空间回滚至各所述子任务未执行时的状态。
2.根据权利要求1所述的方法,其特征在于,在接收到分布式事务的数据回滚指令之前,还包括:
获取所述分布式事务在所述存储空间中待执行的所述至少一个子任务;
针对各所述子任务,在所述子任务对应的待执行语句为更新语句时,生成所述待执行语句在所述存储空间中指向的原始数据的查询语句,作为所述子任务的查询语句;
针对各所述子任务,根据所述子任务的查询语句,确定所述待执行语句针对所述指向的原始数据生成的预期执行结果;
按照第一顺序执行各所述子任务。
3.根据权利要求2所述的方法,其特征在于,在在同一存储空间中获取所述分布式事务对应的已执行的至少一个子任务之后,还包括:
针对各所述子任务,获取所述子任务的待执行语句中执行操作;
针对各所述子任务,获取所述执行操作的逆操作对应的语句模板;
针对各所述子任务,从所述子任务的待执行语句中提取执行元素,并添加到所述逆操作对应的语句模板中,生成所述子任务的反向执行语句。
4.根据权利要求2所述的方法,其特征在于,所述更新语句,包括:数据增加语句、数据修改语句或数据删除语句。
5.根据权利要求2所述的方法,其特征在于,所述执行各所述子任务对应的反向执行语句,包括:
按照第二顺序执行各所述子任务对应的反向执行语句;其中,所述第一顺序与所述第二顺序相反。
6.根据权利要求1所述的方法,其特征在于,还包括:
在所述子任务对应的更新数据与对应的预期执行结果不一致时,跳过执行所述子任务对应的反向执行语句。
7.根据权利要求1所述的方法,其特征在于,所述分布式事务在至少一个存储空间中对应存在子任务;存储空间包括数据库或数据分片。
8.一种分布式事务回滚装置,其特征在于,所述装置包括:
任务获取模块,用于在接收到分布式事务的数据回滚指令时,在同一存储空间中获取所述分布式事务对应的已执行的至少一个子任务;
数据查询模块,用于针对各所述子任务,查询所述子任务对应的更新数据;
结果检测模块,用于针对各所述子任务,检测所述子任务对应的更新数据是否与所述子任务对应的预期执行结果一致;
任务回滚模块,用于在各所述子任务对应的更新数据与对应的预期执行结果一致时,获取并执行各所述子任务对应的反向执行语句,使得所述同一存储空间回滚至各所述子任务未执行时的状态。
9.一种分布式事务回滚设备,其特征在于,所述分布式事务回滚设备包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的计算机程序,所述计算机程序被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的分布式事务回滚方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机指令,所述计算机指令用于使处理器执行时实现权利要求1-7中任一项所述的分布式事务回滚方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639858.8A CN117632984A (zh) | 2023-12-01 | 2023-12-01 | 一种分布式事务回滚方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311639858.8A CN117632984A (zh) | 2023-12-01 | 2023-12-01 | 一种分布式事务回滚方法、装置、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117632984A true CN117632984A (zh) | 2024-03-01 |
Family
ID=90024968
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311639858.8A Pending CN117632984A (zh) | 2023-12-01 | 2023-12-01 | 一种分布式事务回滚方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117632984A (zh) |
-
2023
- 2023-12-01 CN CN202311639858.8A patent/CN117632984A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101099199B1 (ko) | 데이터베이스 복구 중의 스냅샷 질의를 위한 시스템 및 방법 | |
CN108647357B (zh) | 数据查询的方法及装置 | |
US20190026805A1 (en) | Issue resolution utilizing feature mapping | |
US10423625B2 (en) | Exactly-once semantics for streaming analytics in non-idempotent output operations | |
EP3869377A1 (en) | Method and apparatus for data processing based on smart contract, device and storage medium | |
US20230012642A1 (en) | Method and device for snapshotting metadata, and storage medium | |
CN113391767A (zh) | 数据一致性的校验方法、装置、电子设备及可读存储介质 | |
US9384100B2 (en) | Tracking redo completion at a page level | |
WO2022041980A1 (en) | Concept prediction to create new intents and assign examples automatically in dialog systems | |
CN110795447A (zh) | 数据处理方法、数据处理系统、电子设备和介质 | |
US9015116B2 (en) | Consistent replication of transactional updates | |
CN111198920B (zh) | 一种基于数据库同步确定对比表快照的方法及装置 | |
US11481376B2 (en) | Platform for handling data corruptions | |
US11238017B2 (en) | Runtime detector for data corruptions | |
CN117632984A (zh) | 一种分布式事务回滚方法、装置、设备及介质 | |
CN112765126B (zh) | 数据库事务的管理方法、装置、计算机设备和存储介质 | |
US12050586B2 (en) | Rollback-free referential integrity update processing | |
CN110765144B (zh) | 分布式异构数据库数据处理方法及装置 | |
US11042356B2 (en) | Tournament tree rollback for payload write exception | |
CN111338574A (zh) | 基于区块链的数据自修复方法、装置、介质及电子设备 | |
EP4400982A1 (en) | Method and apparatus for processing photovoltaic data, and system for managing photovoltaic data | |
CN106293897B (zh) | 组件自动化调度系统 | |
CN115629910B (zh) | 一种事务恢复方法、装置、数据库节点及介质 | |
US12026048B2 (en) | Early detection and avoidance of mainframe job errors | |
US20240095114A1 (en) | Intelligent healing of mainframe job errors |
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 |