跨数据库的事务管理方法、装置、设备及存储介质与流程

文档序号:20917287发布日期:2020-05-29 13:41阅读:210来源:国知局
跨数据库的事务管理方法、装置、设备及存储介质与流程

本发明涉及计算机技术领域,尤其涉及跨数据库的事务管理方法、装置、设备及存储介质。



背景技术:

数据库事务通常包含了一个序列的对数据库的读/写操作,将数据库操作序列从失败中恢复到正常状态,同时确保数据库异常状态下仍能保持一致性。并且当多个应用程序在并发访问数据库时,为应用程序之间提供一个隔离,以防止彼此的操作互相干扰。

在多个跨数据库业务请求并发的情况下,采用非同步操作的方式,容易导致整个目标数据库系统数据的不一致,若采用分布式事务处理接口xa事务管理方式,其性能低下,并且只能应用在同源的数据库上,异构数据库配置不了xa事务,而通过二进制日志文件binlog或者relaylog去做数据还原,降低了业务请求的处理效率。



技术实现要素:

本发明的主要目的在于解决了异构数据库配置不了xa事务,并且解决了由于通过二进制日志文件进行数据还原,降低了业务请求的处理效率的技术问题。

为实现上述目的,本发明第一方面提供了一种跨数据库的事务管理方法,包括:从预置映射对象文件中确定多个数据库的数据操作语句,并为所述多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,所述第一映射标签用于指示触发数据备份,所述第二映射标签用于指示触发数据回滚;通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,所述预置事务机制包括初步操作、取消操作和确认操作;当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作提交全部执行成功的事务;当检测到所述多个待执行的事务中任意一个事务执行失败时,通过所述取消操作按照所述备份数据回滚已执行的事务,得到已回滚数据,并根据所述备份数据对所述已回滚数据进行验证,得到验证结果;判断所述验证结果与目标值是否相等;若所述验证结果与所述目标值相等,则确定剩余已执行的事务,并根据所述备份数据对所述剩余已执行的事务进行数据回滚;若所述验证结果与所述目标值不相等,则确定差异数据,并根据所述备份数据对所述差异数据进行数据恢复。

可选的,在本发明第一方面的第一种实现方式中,所述从预置映射对象文件中确定多个数据库的数据操作语句,并为所述多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,所述第一映射标签用于指示触发数据备份,所述第二映射标签用于指示触发数据回滚包括:部署预置项目框架,得到预置映射对象文件;在所述预置映射对象文件中配置多个数据库的连接信息和所述多个数据库的数据操作语句,所述多个数据库的数据操作语句用于指示根据第一预置属性与预置接口类的不同函数名称进行关联;将第一映射标签添加到所述多个数据库的数据操作语句中,并对所述第一映射标签和预置查询语句按照第二预置属性进行关联,所述第一映射标签用于指示触发数据备份;将所述第二映射标签添加到所述多个数据库的数据操作语句中,所述第二映射标签用于指示触发数据回滚;重新加载所述预置映射对象文件,得到多个待执行的事务。

可选的,在本发明第一方面的第二种实现方式中,所述通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,所述预置事务机制包括初步操作、取消操作和确认操作包括:从所述预置映射对象文件中读取所述多个数据库的连接信息和所述多个待执行的事务;根据预置连接类和所述多个数据库的连接信息连接到所述多个数据库;通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,并对所述多个待执行的事务添加分布式事务锁,所述预置事务机制包括所述初步操作、确认操作和取消操作。

可选的,在本发明第一方面的第三种实现方式中,所述通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,并对所述多个待执行的事务添加分布式事务锁,所述预置事务机制包括所述初步操作、确认操作和取消操作包括:通过预置事务机制中的初步操作按照所述预置接口类的不同函数名称逐个执行所述多个待执行的事务,得到所述事务的唯一标识,所述预置事务机制包括所述初步操作、确认操作和取消操作;执行所述第一映射标签对应的预置查询语句,得到备份数据;将所述事务的唯一标识和所述备份数据设置成目标键值对,并将所述目标键值对存储到缓存中;对所述多个待执行的事务添加分布式事务锁,并执行所述多个数据库的数据操作语句。

可选的,在本发明第一方面的第四种实现方式中,所述当检测到所述多个待执行的事务中任意一个事务执行失败时,通过所述取消操作按照所述备份数据回滚已执行的事务,得到已回滚数据,并根据所述备份数据对所述已回滚数据进行验证,得到验证结果包括:当检测到所述多个待执行的事务中任意一个事务执行失败时,通过所述取消操作根据所述事务的唯一标识获取所述备份数据;根据所述备份数据回滚已执行的事务,并释放所述分布式事务锁,得到已回滚数据;对所述已回滚数据和所述备份数据进行数据一致性验证,得到验证结果。

可选的,在本发明第一方面的第五种实现方式中,所述当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作提交全部执行成功的事务包括:当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作获取全部执行成功事务的唯一标识;根据所述全部执行成功事务的唯一标识提交事务,得到提交状态;判断所述提交状态是否为成功状态;若所述提交状态为成功状态,则触发所述分布式事务锁的释放操作;若所述提交状态为失败状态,则对失败状态的事务进行重新提交,并统计提交次数,直到所述提交次数不小于预置次数或者所述提交状态为成功状态时为止。

可选的,在本发明第一方面的第六种实现方式中,所述当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作提交全部执行成功的事务之后,所述跨数据库的事务管理方法还包括:获取所述待执行的事务的不同执行状态,所述不同执行状态包括所述事务的执行成功状态和所述事务的执行失败状态;按照所述事务的唯一标识将所述事务的执行成功状态和所述事务的执行失败状态记录到预置事务日志中;对所述事务的执行失败状态发送预置告警信息。

本发明第二方面提供了一种跨数据库的事务管理装置,包括:配置单元,用于从预置映射对象文件中确定多个数据库的数据操作语句,并为所述多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,所述第一映射标签用于指示触发数据备份,所述第二映射标签用于指示触发数据回滚;执行单元,用于通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,所述预置事务机制包括初步操作、取消操作和确认操作;提交单元,当检测到所述多个待执行的事务全部执行成功时,用于通过所述确认操作提交全部执行成功的事务;回滚验证单元,当检测到所述多个待执行的事务中任意一个事务执行失败时,用于通过所述取消操作按照所述备份数据回滚已执行的事务,得到已回滚数据,并根据所述备份数据对所述已回滚数据进行验证,得到验证结果;判断单元,用于判断所述验证结果与目标值是否相等;处理单元,若所述验证结果与所述目标值相等,则用于确定剩余已执行的事务,并根据所述备份数据对所述剩余已执行的事务进行数据回滚;恢复单元,若所述验证结果与所述目标值不相等,则用于确定差异数据,并根据所述备份数据对所述差异数据进行数据恢复。

可选的,在本发明第二方面的第一种实现方式中,所述配置单元具体用于:部署预置项目框架,得到预置映射对象文件;在所述预置映射对象文件中配置多个数据库的连接信息和所述多个数据库的数据操作语句,所述多个数据库的数据操作语句用于指示根据第一预置属性与预置接口类的不同函数名称进行关联;将第一映射标签添加到所述多个数据库的数据操作语句中,并对所述第一映射标签和预置查询语句按照第二预置属性进行关联,所述第一映射标签用于指示触发数据备份;将所述第二映射标签添加到所述多个数据库的数据操作语句中,所述第二映射标签用于指示触发数据回滚;重新加载所述预置映射对象文件,得到多个待执行的事务。

可选的,在本发明第二方面的第二种实现方式中,所述执行单元还包括:读取子单元,用于从所述预置映射对象文件中读取所述多个数据库的连接信息和所述多个待执行的事务;连接子单元,用于根据预置连接类和所述多个数据库的连接信息连接到所述多个数据库;执行子单元,用于通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,并对所述多个待执行的事务添加分布式事务锁,所述预置事务机制包括所述初步操作、确认操作和取消操作。

可选的,在本发明第二方面的第三种实现方式中,所述执行子单元具体用于:通过预置事务机制中的初步操作按照所述预置接口类的不同函数名称逐个执行所述多个待执行的事务,得到所述事务的唯一标识,所述预置事务机制包括所述初步操作、确认操作和取消操作;执行所述第一映射标签对应的预置查询语句,得到备份数据;将所述事务的唯一标识和所述备份数据设置成目标键值对,并将所述目标键值对存储到缓存中;对所述多个待执行的事务添加分布式事务锁,并执行所述多个数据库的数据操作语句。

可选的,在本发明第二方面的第四种实现方式中,所述回滚验证单元具体用于:当检测到所述多个待执行的事务中任意一个事务执行失败时,通过所述取消操作根据所述事务的唯一标识获取所述备份数据;根据所述备份数据回滚已执行的事务,并释放所述分布式事务锁,得到已回滚数据;对所述已回滚数据和所述备份数据进行数据一致性验证,得到验证结果。

可选的,在本发明第二方面的第五种实现方式中,所述提交单元具体用于:当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作获取全部执行成功事务的唯一标识;根据所述全部执行成功事务的唯一标识提交事务,得到提交状态;判断所述提交状态是否为成功状态;若所述提交状态为成功状态,则触发所述分布式事务锁的释放操作;若所述提交状态为失败状态,则对失败状态的事务进行重新提交,并统计提交次数,直到所述提交次数不小于预置次数或者所述提交状态为成功状态时为止。

可选的,在本发明第二方面的第六种实现方式中,所述跨数据库的事务管理装置还包括:获取单元,用于获取所述待执行的事务的不同执行状态,所述不同执行状态包括所述事务的执行成功状态和所述事务的执行失败状态;记录单元,用于按照所述事务的唯一标识将所述事务的执行成功状态和所述事务的执行失败状态记录到预置事务日志中;发送单元,用于对所述事务的执行失败状态发送预置告警信息。

本发明第三方面提供了一种跨数据库的事务管理设备,包括:存储器和至少一个处理器,所述存储器中存储有指令,所述存储器和所述至少一个处理器通过线路互联;所述至少一个处理器调用所述存储器中的所述指令,以使得所述跨数据库的事务管理设备执行上述第一方面所述的方法。

本发明的第四方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面所述的方法。

从以上技术方案可以看出,本发明具有以下优点:

本发明提供的技术方案中,从预置映射对象文件中确定多个数据库的数据操作语句,并为所述多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,所述第一映射标签用于指示触发数据备份,所述第二映射标签用于指示触发数据回滚;通过预置事务机制中的初步操作执行所述多个待执行的事务,得到备份数据,所述预置事务机制包括初步操作、取消操作和确认操作;当检测到所述多个待执行的事务全部执行成功时,通过所述确认操作提交全部执行成功的事务;当检测到所述多个待执行的事务中任意一个事务执行失败时,通过所述取消操作按照所述备份数据回滚已执行的事务,得到已回滚数据,并根据所述备份数据对所述已回滚数据进行验证,得到验证结果;判断所述验证结果与目标值是否相等;若所述验证结果与所述目标值相等,则确定剩余已执行的事务,并根据所述备份数据对所述剩余已执行的事务进行数据回滚;若所述验证结果与所述目标值不相等,则确定差异数据,并根据所述备份数据对所述差异数据进行数据恢复。本发明实施例中,通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

附图说明

图1为本发明实施例中跨数据库的事务管理方法的一个实施例示意图;

图2为本发明实施例中跨数据库的事务管理方法的另一个实施例示意图;

图3为本发明实施例中跨数据库的事务管理装置的一个实施例示意图;

图4为本发明实施例中跨数据库的事务管理装置的另一个实施例示意图;

图5为本发明实施例中跨数据库的事务管理设备的一个实施例示意图。

具体实施方式

本发明实施例提供了一种跨数据库的事务管理方法、装置、设备及存储介质,用于通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例进行描述。

本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”或“具有”及其任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。

为便于理解,下面对本发明实施例的具体流程进行描述,请参阅图1,本发明实施例中跨数据库的事务管理方法的一个实施例包括:

101、从预置映射对象文件中确定多个数据库的数据操作语句,并为多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,第一映射标签用于指示触发数据备份,第二映射标签用于指示触发数据回滚;

服务器从预置映射对象文件中确定多个数据库的数据操作语句,并为多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,第一映射标签用于指示触发数据备份,第二映射标签用于指示触发数据回滚。其中,预置映射对象文件为mapper文件,例如,mapper.xml。数据操作语句包括增加操作语句、删除操作语句和更新操作语句,也就是数据操作语句包括插入insert标签、删除delete标签和更新update标签。第一映射标签为在先before标签,第二映射标签为回滚rollback标签。也就是说,before标签和rollback标签预先配置在mapper.xml文件中的多个数据库的insert标签、delete标签和update标签的上下文中。

102、通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作;

服务器通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作。其中,初步操作为try语句块,预置事务机制为tcc事务机制,服务器根据try语句块尝试执行数据库连接、缓存备份数据和申请分布式事务锁,将多个数据库的数据进行逻辑锁定,进一步地,当确定至少两个事务相关的数据操作属于不同的数据库时,服务器生成分布式事务锁的插入语句;服务器执行分布式事务锁的插入语句,得到分布式事务锁。例如,服务器将a库对应的数据和b库对应的数据在逻辑上进行锁定,确保事务的一致性。

可以理解的是,服务器在try语句块中按照预制规则生成事务的唯一标识,并将事务的唯一标识和备份数据设置成目标键值对,将目标键值对存储到缓存中。

103、当检测到多个待执行的事务全部执行成功时,通过确认操作提交全部执行成功的事务;

当检测到多个待执行的事务全部执行成功时,通过确认操作提交全部执行成功的事务。其中,确认操作为confirm语句块,具体的,当检测到多个待执行的事务全部执行成功时,服务器通过确认操提交全部执行成功,得到提交状态;当提交状态为成功状态时,服务器触发分布式事务锁的释放操作;当提交状态为失败状态时,服务器对失败状态的事务进行重新提交,并统计提交次数,直到提交次数不小于预置次数或者提交状态为成功状态时为止。

需要说明的是,服务器通过逐个执行初步操作指定的confirm语句块,将执行初步操作未完成的事项。例如,帐户a、b、c为状态正常的账户,并且帐户a和b余额满足预置条件,则服务器执行从帐户a转账100元到账户c、从帐户b转账500元到账户c的转帐操作,直到两次转账全部成功,并且更新了a、b和c各自的存储账户数据,确保三个账户在转账前后总的金额相等,进一步地,确保待执行的事务在执行之前和执行之后都必须处于一致性状态,提交事务确保更新数据有效性。

104、当检测到多个待执行的事务中任意一个事务执行失败时,通过取消操作按照备份数据回滚已执行的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证;

当检测到多个待执行的事务中任意一个事务执行失败时,服务器通过取消操作按照备份数据回滚已执行的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证。其中,取消操作为cancel语句块,具体的,当检测到多个待执行的事务中任意一个事务执行失败时,服务器通过取消操作获取备份数据,并根据备份数据回滚已执行的事务并释放事务锁,得到已回滚数据;服务器对已回滚数据和备份数据进行数据一致性验证,得到验证结果。例如,针对以下数据操作语句:

updatetmpsetusername='a1'whereuserid='001';---标记为a1

updatetmpsetusername='b1'whereuserid='001';---标记为b1

服务器先回滚到b1后,此时在b1之后的所有数据修改视为无效;服务器再回滚到a1,此时在a1之后的所有数据修改视为无效。服务器通过备份数据回滚全部已执行的事务,就是撤消至上一次提交事务后的所有数据修改。

需要说明的是,已执行的事务包括已执行成功的事务和已执行失败的事务,当检测到事务执行失败时,在实行失败时刻对事务进行划分。

105、判断验证结果与目标值是否相等;

服务器判断验证结果与目标值是否相等,例如,事务提交前的目标字段值为3,设置更新后的目标字段值为5,由于事务执行出现异常,若服务器根据按照备份数据将目标字段值回滚到5,则服务器获取验证结果为1,目标值为1,则服务器确定验证结果与目标值相等,服务器执行步骤106;若若服务器根据按照备份数据将目标字段值回滚到6,则服务器获取验证结果为0,目标值为1,则服务器确定验证结果与目标值不相等,服务器执行步骤107。

106、若验证结果与目标值相等,则确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚;

若验证结果与目标值相等,则服务器确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚。其中,剩余已执行事务为从已执行的事务中去除已回滚的事务得到的事务集合,例如,服务器依次执行事务a和事务b,事务b在执行过程中出现异常,服务器根据备份数据依次对b和a进行回滚,b回滚后得到验证结果c,若验证结果c与目标值相等,则服务器继续对剩余已执行的事务a进行数据回滚。

107、若验证结果与目标值不相等,则确定差异数据,并根据备份数据对差异数据进行数据恢复,在数据恢复成功后对剩余已执行的事务进行数据回滚。

若验证结果与目标值不相等,则服务器确定差异数据,并根据备份数据对差异数据进行数据恢复,在数据恢复成功后对剩余已执行的事务进行数据回滚。例如,针对如下语句:

update表名set目标字段名=值where主键=主键值;

服务器为update标签添加before标签和rollback标签,rollback标签用于指示将该条语句回滚为事务提交之前的备份数据。事务提交前的目标字段值为3,更新后的目标字段值为5,但是由于事务执行出现异常,服务器将目标字段值回滚到3,若更新后服务器检测到该目标字段值为4,则服务器确定存在差异数据,并根据备份数据2对差异数据4进行数据恢复。可以理解的是,在数据恢复成功后对剩余已执行的事务进行数据回滚。

本发明实施例中,通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

请参阅图2,本发明实施例中跨数据库的事务管理方法的另一个实施例包括:

201、部署预置项目框架,得到预置映射对象文件;

服务器部署预置项目框架,得到预置映射对象文件。其中,预置项目框架包括持久层框架mybatis,预置映射对象文件为mapper文件,文件格式以xml形式进行标识。具体的,服务器导入预置项目框架的安装包,安装包包括mybatis的jar包;服务器接收安装jar包命令,并执行安装jar包命令;服务器创建映射服务接口;服务器创建数据库标识和动态数据源,其中,数据库标识用于指示每个线程由独立的对象存储,动态数据源用于根据不用的数据索引连接不同的数据库;服务器创建访问对象和访问任务,访问任务将每一个对数据库访问的请求包装为一个访问对象,写入到预置任务管理中,然后等待任务执行完成,取出执行结果,进一步地,服务器将数据库访问任务通过预置线程池执行;服务器创建mapper.xml文件,得到预置映射对象文件。

202、在预置映射对象文件中配置多个数据库的连接信息和多个数据库的数据操作语句,多个数据库的数据操作语句用于指示根据第一预置属性与预置接口类的不同函数名称进行关联;

服务器在预置映射对象文件中配置多个数据库的连接信息和多个数据库的数据操作语句,多个数据库的数据操作语句用于指示根据第一预置属性与预置接口类的不同函数名称进行关联。具体的,服务器根据多个数据库的预置配置信息在预置映射对象文件中配置多个数据库的连接信息;服务器根据预置业务和sql语法规则在预置映射对象文件中配置多个数据库的数据操作语句,多个数据库的数据操作语句包括对多个数据库的增加操作语句、删除操作语句和更新操作语句。其中,预置映射对象文件为mapper配置文件,例如,mapper.xml配置文件或者预置接口形式的配置文件,具体此处不做限定。

203、将第一映射标签添加到多个数据库的数据操作语句中,并对第一映射标签和预置查询语句按照第二预置属性进行关联,第一映射标签用于指示触发数据备份;

服务器将第一映射标签添加到多个数据库的数据操作语句中,并对第一映射标签和预置查询语句按照第二预置属性进行关联,第一映射标签用于指示触发数据备份,其中,第一映射标签为在先before标签,before标签用于指示缓存待执行的事务提交前的数据。进一步地,服务器从预置映射对象文件中确认多个数据库的数据操作语句,其中,数据操作语句包括更新update标签、插入insert标签和删除delete标签;服务器获取预置查询语句,并为多个数据库的数据操作语句添加第一映射标签;服务器对第一映射标签和预置查询语句按照第二预置属性进行关联,第一映射标签用于指示触发数据备份。例如,包括标识id,并且标识id的属性值为querysegment的预置查询语句,如下所示:

<selectid="querysegment">

select*fromcommon_document_attachmentwheredocument_id=#{documentid}

</select>

服务器根据该预置查询语句在update开始标签之后增加before标签,并为before设置备份标识refid;服务器将预置查询语句标识id的属性值设置为refid的属性值;服务器设置更新语句。具体如下所示:

204、将第二映射标签添加到多个数据库的数据操作语句中,第二映射标签用于指示触发数据回滚;

服务器将第二映射标签添加到多个数据库的数据操作语句中,第二映射标签用于指示触发数据回滚,其中,第二映射标签为回滚rollback标签,rollback标签用于指示跨数据库的事务执行失败时,根据缓存的备份数据回滚事务,进一步地,服务器对已配置before标签的多个数据库的数据操作语句添加第二映射标签,用于在更新语句执行异常时进行回滚操作,例如,服务器在update结束标签之前增加rollback,具体如下所示:

205、重新加载预置映射对象文件,得到多个待执行的事务;

服务器重新加载预置映射对象文件,得到多个待执行的事务。具体的,服务器重启预置映射对象文件对应的服务,得到重新加载后的预置映射对象文件;服务器从重新加载后的预置映射对象文件中确认第一映射标签和第二映射标签;服务器确定第二映射标签用于还原备份数据,服务器将第一映射标签和第二映射标签标识的数据操作语句设置为多个待执行的事务。

可以理解的是,修改mapper.xml文件以后,还要按照预置命令重启预置映射对象文件对应的服务,文件修改才能生效。

206、通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作;

服务器通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作。其中,预置事务机制为tcc事务机制,初步操作为try语句块,服务器根据try语句块尝试执行根据预置条件对预置业务进行一致性判断和请求预留预置业务资源。进一步地,服务器根据预置条件对预置业务进行一致性判断,例如,服务器判断a、b和c的帐户状态是否正常,服务器判断帐户a的余额是否不少于30元,服务器判断帐户b的余额是否不少于50元;服务器预留预置业务资源,例如,帐户a的冻结金额增加30元,帐户b的冻结金额增加50元,确保不受其他并发进程对这两个帐户转帐操作的影响。

具体的,首先,服务器从预置映射对象文件中读取多个数据库的连接信息和多个待执行的事务;其次,服务器根据预置连接类和多个数据库的连接信息连接多个数据库,进一步地,服务器将mybatis的事务接口transaction中的抽象方法getconnection设置为预置连接类;服务器将getconnection和多个数据库的连接信息添加到初步操作中;服务器在初步操作中连接多个数据库;最后,服务器通过预置事务机制中的初步操作执行多个待执行的事务,并对多个待执行的事务添加分布式事务锁,其中,分布式事务锁确保不同进程互斥地访问共享资源,预置事务机制包括初步操作、确认操作和取消操作,需要说明的是,服务器在try语句块执行过程中申请分布式事务锁,将多个数据库的数据进行逻辑锁定,进一步地,当确定至少两个事务相关的数据操作属于不同的数据库时,服务器生成分布式事务锁的插入语句;服务器执行分布式事务锁的插入语句,得到分布式事务锁。例如,服务器将a库对应的数据和b库对应的数据在逻辑上进行锁定,确保事务的一致性。

可选的,服务器通过预置事务机制中的初步操作按照所预置接口类的不同函数名称逐个执行多个待执行的事务,得到事务的唯一标识;服务器执行第一映射标签对应的预置查询语句,得到备份数据;服务器将事务的唯一标识和备份数据设置成目标键值对,并将目标键值对存储到缓存中;服务器对多个待执行的事务添加分布式事务锁,并执行多个数据库的数据操作语句。

207、当检测到多个待执行的事务全部执行成功时,通过确认操作提交全部执行成功的事务;

当检测到多个待执行的事务全部执行成功时,服务器通过确认操作提交全部执行成功的事务。其中,确认操作为confirm语句块,服务器通过逐个执行初步操作指定的confirm语句块,将执行初步操作未完成的事项。具体的,当检测到多个待执行的事务全部执行成功时,服务器通过确认操作获取全部执行成功事务的唯一标识;根据全部执行成功事务的唯一标识提交事务,得到提交状态;服务器判断提交状态是否为成功状态,进一步地,服务器将提交状态与目标状态值进行比较,若提交状态与目标状态值相等,则服务器确定提交状态为成功状态,若提交状态与目标状态值不相等,则服务器确定提交状态为失败状态,例如,目标状态值为1,若提交状态为1,服务器确定提交状态为成功状态,若提交状态为0,则服务器确定提交状态为失败状态;若提交状态为成功状态,则触发分布式事务锁的释放操作,同时释放预留的预置业务资源;若提交状态为失败状态,则对失败状态的事务进行重新提交,并统计提交次数,直到提交次数不小于预置次数或者提交状态为成功状态时为止。例如,a数据库增加一笔数据,b数据库减少一笔数据,则a和b数据库的事务都执行成功后,服务器再通过确认操作提交a和b相关事务,得到提交状态s1和s2,直到s1和s2全部为成功状态时提交结束。

208、当检测到多个待执行的事务中任意一个事务执行失败时,通过取消操作按照备份数据回滚已执行的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证,得到验证结果;

当检测到多个待执行的事务中任意一个事务执行失败时,服务器通过取消操作按照备份数据回滚已执行的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证,得到验证结果。其中,取消操作业用于取消执行预置业务,取消操作为cancel语句块,cancel语句块用于释放预留的预置业务资源和分布式事务锁,例如,在初步操作执行过程中,服务器检测到帐户a的余额满足预置条件,并且将相应金额成功冻结,但是帐户b的余额不满足预置条件,并且对帐户b的金额冻结失败,则服务器采用cancel语句块和备份数据c对帐户a被冻结的金额进行解冻。

具体的,当检测到多个待执行的事务中任意一个事务执行失败时,通过取消操作根据事务的唯一标识获取备份数据,例如,服务器在执行update的事务时,服务器首先执行before标签,将对应数据缓存起来,得到备份数据,当检测到事务执行失败,并且服务器检测到该事务中包括rollback标签时,服务器通过取消操作根据事务的唯一标识获取备份数据;服务器根据备份数据回滚已执行的事务,并释放分布式事务锁,得到已回滚数据。其中,回滚已执行的事务针对正在执行的脚本而言,例如,当a数据库执行a.update事务操作,服务器执行本地回滚就是执行a.rollback。b数据库回滚就是b.rollback,进一步地,服务器释放分布式事务锁和预留的预置业务资源。最后,服务器对已回滚数据和备份数据进行数据一致性验证,得到验证结果,进一步地,服务器调取对应的equals()函数对已回滚数据和备份数据进行一致性验证处理,得到验证结果。

209、判断验证结果与目标值是否相等;

服务器判断验证结果与目标值是否相等,其中,验证结果用于指示已回滚数据与备份数据之间是否存在差异数据。若验证结果与目标值相等,则服务器执行步骤210;若验证结果与目标值不想等,则执行步骤211。

210、若验证结果与目标值相等,则确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚;

若验证结果与目标值相等,则服务器确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚。其中,剩余已执行事务为从已执行的事务中去除已回滚的事务得到的事务集合,例如,服务器依次执行事务a和事务b,事务b在执行过程中出现异常,服务器根据备份数据依次对b和a进行回滚,b回滚后得到验证结果c,若验证结果c与目标值相等,则服务器继续对剩余已执行的事务a进行数据回滚。

211、若验证结果与目标值不相等,则确定差异数据,并根据备份数据对差异数据进行数据恢复。

若验证结果与目标值不相等,则确定差异数据,并根据备份数据对差异数据进行数据恢复,进一步地,在数据恢复成功后对剩余已执行的事务进行数据回滚,也就是说,当数据恢复成功时,数据一致性验证通过,服务器根据验证结果确保已回滚数据与备份数据的一致性和已回滚数据的正确性。

进一步地,服务器获取待执行的事务的不同执行状态,不同执行状态包括事务的执行成功状态和事务的执行失败状态;服务器按照事务的唯一标识将事务的执行成功状态和事务的执行失败状态记录到预置事务日志中;服务器对事务的执行失败状态发送预置告警信息。例如,服务器通过邮件方式或者短信方式对事务的执行失败状态进行实时告警,以便于目标人员及时响应和处理。

本发明实施例中,通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

上面对本发明实施例中跨数据库的事务管理方法进行了描述,下面对本发明实施例中跨数据库的事务管理装置进行描述,请参阅图3,本发明实施例中跨数据库的事务管理装置的一个实施例包括:

配置单元301,用于从预置映射对象文件中确定多个数据库的数据操作语句,并为多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,第一映射标签用于指示触发数据备份,第二映射标签用于指示触发数据回滚;

执行单元302,用于通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作;

提交单元303,当检测到多个待执行的事务全部执行成功时,用于通过确认操作提交全部执行成功的事务;

回滚验证单元304,当检测到多个待执行的事务中任意一个事务执行失败时,用于通过取消操作按照备份数据回滚已执行失败的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证,得到验证结果;

判断单元305,用于判断验证结果与目标值是否相等;

处理单元306,若验证结果与目标值相等,则用于确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚;

恢复单元307,若验证结果与目标值不相等,则用于确定差异数据,并根据备份数据对差异数据进行数据恢复。

本发明实施例中,通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

请参阅图4,本发明实施例中跨数据库的事务管理装置的另一个实施例包括:

配置单元301,用于从预置映射对象文件中确定多个数据库的数据操作语句,并为多个数据库的数据操作语句配置第一映射标签和第二映射标签,得到多个待执行的事务,第一映射标签用于指示触发数据备份,第二映射标签用于指示触发数据回滚;

执行单元302,用于通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,预置事务机制包括初步操作、取消操作和确认操作;

提交单元303,当检测到多个待执行的事务全部执行成功时,用于通过确认操作提交全部执行成功的事务;

回滚验证单元304,当检测到多个待执行的事务中任意一个事务执行失败时,用于通过取消操作按照备份数据回滚已执行失败的事务,得到已回滚数据,并根据备份数据对已回滚数据进行验证,得到验证结果;

判断单元305,用于判断验证结果与目标值是否相等;

处理单元306,若验证结果与目标值相等,则用于确定剩余已执行的事务,并根据备份数据对剩余已执行的事务进行数据回滚;

恢复单元307,若验证结果与目标值不相等,则用于确定差异数据,并根据备份数据对差异数据进行数据恢复。

可选的,配置单元301还可以具体用于:

部署预置项目框架,得到预置映射对象文件;

在预置映射对象文件中配置多个数据库的连接信息和多个数据库的数据操作语句,多个数据库的数据操作语句用于指示根据第一预置属性与预置接口类的不同函数名称进行关联;

将第一映射标签添加到多个数据库的数据操作语句中,并对第一映射标签和预置查询语句按照第二预置属性进行关联,第一映射标签用于指示触发数据备份;

将第二映射标签添加到多个数据库的数据操作语句中,第二映射标签用于指示触发数据回滚;

重新加载预置映射对象文件,得到多个待执行的事务。

可选的,执行单元302还可以进一步包括:

读取子单元3021,用于从预置映射对象文件中读取多个数据库的连接信息和多个待执行的事务;

连接子单元3022,用于根据预置连接类和多个数据库的连接信息连接到多个数据库;

执行子单元3023,用于通过预置事务机制中的初步操作执行多个待执行的事务,得到备份数据,并对多个待执行的事务添加分布式事务锁,预置事务机制包括初步操作、确认操作和取消操作。

可选的,执行子单元3023还可以进一步具体用于:

通过预置事务机制中的初步操作按照预置接口类的不同函数名称逐个执行多个待执行的事务,得到事务的唯一标识,预置事务机制包括初步操作、确认操作和取消操作;

执行第一映射标签对应的预置查询语句,得到备份数据;

将事务的唯一标识和备份数据设置成目标键值对,并将目标键值对存储到缓存中;

对多个待执行的事务添加分布式事务锁,并执行多个数据库的数据操作语句。

可选的,回滚验证单元304还可以具体用于:

当检测到多个待执行的事务中任意一个事务执行失败时,通过取消操作根据事务的唯一标识获取备份数据;

根据备份数据回滚已执行失败的事务,并释放分布式事务锁,得到已回滚数据;

对已回滚数据和备份数据进行数据一致性验证,得到验证结果。

可选的,提交单元303还可以具体用于:

当检测到多个待执行的事务全部执行成功时,通过确认操作获取全部执行成功事务的唯一标识;

根据全部执行成功事务的唯一标识提交事务,得到提交状态;

判断提交状态是否为成功状态;

若提交状态为成功状态,则触发分布式事务锁的释放操作;

若提交状态为失败状态,则对失败状态的事务进行重新提交,并统计提交次数,直到提交次数不小于预置次数或者提交状态为成功状态时为止。

可选的,跨数据库的事务管理装置还可以进一步包括:

获取单元308,用于获取待执行的事务的不同执行状态,不同执行状态包括事务的执行成功状态和事务的执行失败状态;

记录单元309,用于按照事务的唯一标识将事务的执行成功状态和事务的执行失败状态记录到预置事务日志中;

发送单元310,用于对事务的执行失败状态发送预置告警信息。

本发明实施例中,通过对跨数据库的分布式映射对象文件进行配置并执行,得到备份数据,根据事务机制和备份数据对分布式事务进行数据回滚验证和事务提交,确保回滚数据的正确性和多个跨数据库业务并发请求业务数据的一致性。

上面图3和图4从模块化功能实体的角度对本发明实施例中的跨数据库的事务管理装置进行详细描述,下面从硬件处理的角度对本发明实施例中跨数据库的事务管理设备进行详细描述。

图5是本发明实施例提供的一种跨数据库的事务管理设备的结构示意图,该跨数据库的事务管理设备500可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器(centralprocessingunits,cpu)501(例如,一个或一个以上处理器)和存储器509,一个或一个以上存储应用程序507或数据506的存储介质508(例如一个或一个以上海量存储设备)。其中,存储器509和存储介质508可以是短暂存储或持久存储。存储在存储介质508的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对跨数据库的事务管理中的一系列指令操作。更进一步地,处理器501可以设置为与存储介质508通信,在跨数据库的事务管理设备500上执行存储介质508中的一系列指令操作。

跨数据库的事务管理设备500还可以包括一个或一个以上电源502,一个或一个以上有线或无线网络接口503,一个或一个以上输入输出接口504,和/或,一个或一个以上操作系统505,例如windowsserve,macosx,unix,linux,freebsd等等。本领域技术人员可以理解,图5中示出的跨数据库的事务管理设备结构并不构成对跨数据库的事务管理设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。

以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1