嵌套事务

更新时间:2022-08-25 12:40

嵌套事务(nested transaction)是指间接涉及多个服务器的客户事务。

概念

嵌套事务(nested transaction)是指间接涉及多个服务器的客户事务。

在某些情况下,一个服务器的一个操作可能触发另一个服务器的某个操作,通常后者可能又进一步请求操作,依此类推。处理这种情况时,每个客户事务由一系列嵌套事务构成。如图1所示,服务器Z上的一个客户事务T调用服务器X和Y上的操作,形成嵌套事务 和 ,嵌套事务 又调用服务器M和N上的操作,形成深层嵌套事务 和 ,类似地, 调用服务器N和P上的操作,形成深层嵌套事务 和 。总之,事务由嵌套事务的层次结构组成。同层次的嵌套事务间可并发执行。

工作原理

一组嵌套事务中的最外层事务被称为顶层事务,其余事务称为子事务。如图2中,T是顶层事务, , , , , 和 是子事务, 和 是T的子事务,T作为它们父母。同样地, 和 是 的子事务, 和 是 的子事务。

当一子事务完成后,它作出独立决定,或者暂时提交或者中止。暂时提交子事务的最后结果取决于它的父母并最终取决于顶层事务。顶层事务完成后,它的服务器需与后裔子事务的服务器通信,以执行原子提交协议。

嵌套事务的服务器要提供打开子事务的操作,以及使子事务询问其父母是否提交的操作,客户通过打开顶层事务来开始一组嵌套事务,用OpenTansaction操作为顶层事务返回一事务标识。顶层事务通过OpenTansaction操作开始位于其他服务器之上的嵌套事务,该操作为子事务返回一事务标识。

子事务的标识可通过扩展其父母的TID获得,这样子事务标识就是全局唯一的。一般,顶层事务可提交,仅当其所有暂时提交的子事务可提交。而后者可提交,仅当它们的所有暂时提交子事务可提交。依此类推,直至子事务没有下层子事务了。当一嵌套事务暂时提交,它将其状态及其子孙的状态报告给它的父母,当一嵌套事务中止,它仅向其父母报告中止。最后,顶层事务收到一张表,表中记录了所有子事务及其状态。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}