18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 信息时代 > 高级事务模型(数据库)

高级事务模型(数据库)

时间:2022-12-22 04:30:01 | 来源:信息时代

时间:2022-12-22 04:30:01 来源:信息时代

    高级事务模型 : 相对传统事务模型而言对具有某种内部结构的事务的总称。传统的事务概念及其ACID性质在大多数应用中是非常有用的,构成了数据库事务处理系统的基础。传统的事务只涉及单一数据库,仅包括对单一数据库的读/写,事务本身并没有内部结构。但是,在一些复杂的应用中,事务可能涉及多个数据库,事务处理的时间也可能很长。例如在CAD/CAM、办公自动化、软件开发环境中,事务可能持续几个小时或几天,可能访问不同服务器上的多个数据。为这样的长事务或者分布式事务保持隔离性和原子性会给系统的性能带来很大的负担。将一个事务分解成一些更小的、相互关联的部分,即为事务引入某种结构,是一种可行的办法。因此,事务模型被扩展为各种高级事务模型。这些高级事务模型的共性是它们不再要求严格保持事务的ACID性质,而是在不同程度上放宽了事务对原子性和隔离性的要求。
1. 分布式事务
分布式事务(distributed transaction)是指在分布式数据库上执行的事务。分布式数据库是由分布存储在网络若干个结点上的数据构成,每个场地的数据由独立于其他场地的DBMS进行管理,因此,分布式事务通常由在不同结点的数据库服务器上的子事务组成。分布式事务也称全局事务(global transaction),每个结点上的事务称为子事务(subtransaction)。每个服务器上的子事务要保持局部数据库的ACID性质,同时系统还要维护全局事务的ACID性质。分布式事务的全局原子性(global atomicity)是指每个子事务在它所运行的局部数据库上具有原子性,并且所有的子事务或者全部提交或者全部异常中止。因此,当分布式事务的一个子事务完成了,它不能马上提交,因为其他子事务可能异常中止,从而造成所有其他子事务也都必须异常中止。分布式事务的全局隔离性(global isolation)是指分布式事务的每个子事务在它所运行的局部数据库上具有隔离性,而且分布式事务作为一个整体和其他分布式事务之间也具有隔离性。
分布式事务的全局原子性是由二阶段提交协议(two-phase commit protocol)来保证的,其大致过程如下: 第一阶段: 投票阶段。由事务协调者将事务提交命令发给全部参加该事务的各局部数据库,局部数据库在收到这个命令后决定是中止还是提交本地的子事务,并向本地的日志写入abort或者prepare的信息,然后发送相应的消息给事务协调者。第二阶段: 终止阶段。协调者在收到全部子事务发回的同意提交的消息后,向日志写入commit信息,然后向各子事务发出提交的命令。如果协调者收到了一个或者以上的不同意提交的消息,向日志写入abort信息,然后向各子事务发出回滚的命令。各局部数据库在收到提交命令后,向日志写入commit信息并给协调者回复应答信息,实际执行局部提交动作。如果收到的是回滚命令,则向日志写入abort信息并给协调者回复应答信息,执行实际回滚动作。最后,协调者在收到了全部子事务的应答信息后,在日志中写入事务结束标志,结束该事务。
分布式事务的全局隔离性是通过适当的并发控制机制来保证的,即确保分布式事务之间存在某种全局可串行化的执行序列。全局可串行化(global serializability)表示两个分布式事务T1和T2的子事务在所有局部数据库上是可串行化的,而且这个串行化的次序在所有的结点是一致的。
最有影响的分布式事务模型是由X/Open组织于1996年开发的X/Open DTP(X/Open Distributed Transaction Processing)模型,它是两阶段提交(2-PC)协议的标准。
2. 嵌套事务
嵌套事务(nested transaction)是按照树结构组织的多个子事务的集合。采用自顶向下的方法将一个复杂事务按照功能划分(而不是按照数据分布)为若干子事务。与分布式事务要么全做要么全不做的处理方法不同,嵌套事务中的各个子事务的异常中止不会导致整个事务的异常中止。但是,嵌套事务作为一个整体仍然保持全局隔离性和原子性。
嵌套事务可以用一棵树来表示,根结点称为顶层事务,其他结点称为子事务,它可以是嵌套事务,也可以是普通事务,称为平坦事务(flat transaction),树叶一级的事务称为叶子事务,它一定是平坦事务。子事务只有在其父事务开始后才可以开始,而父事务只有在所有的子事务全部结束后才能提交。一个父事务创建的子事务可以顺序执行,也可以并发执行。但父事务不会与其子事务并发执行。
嵌套事务以及其子事务具有隔离性。一个子事务(包括其所有后代子事务)可以看作一个隔离单位,与其并发执行的同层兄弟事务看不到其内部结构,因此与并发执行的兄弟事务之间满足可串行性。即与它们按某种次序顺序执行的结果是一样的。进一步地,整个嵌套事务的层次结构也不为其他顶层事务所见,因此是全局隔离的。
嵌套事务以及其子事务具有原子性。每个子事务可以独立地提交或异常中止,但是子事务的最终提交还依赖于其父事务。如果父事务异常中止,则该事务的所有子事务必须中止。只有当所有的祖先事务都提交了,即整个嵌套事务提交了,每个子事务才最终提交并保持持久性。如果某个子事务异常中止,那么它对数据库的影响会被消除,但是,此子事务中止的状态返回给父事务后,父事务可以采取适当的操作,比如触发另一个子事务执行一个替换性操作。这样,一个异常中止的子事务会影响父事务的执行路径,这和传统的平坦事务的情形不同。
嵌套事务作为一个整体需要保持一致性,但是子事务不一定保持一致性。
3. 多层事务
多层事务(multilevel transaction)是将事务分解为若干嵌套的子事务,其目的是为了提高系统的性能。但是不同于嵌套事务,多层事务中的全部叶子事务必须在同一个层次上,而且只有叶子事务才能访问数据库。多层事务中的子事务可以在整个事务成功提交之前提交并释放它们所占用的资源,从而允许在该资源上等待的其他事务提前执行,提高了并发执行的效率。但是这也造成了其他并发的事务可以存取到该多层事务的中间结果,若调度不当,会危及事务的隔离性。
多层事务具有隔离性。由于并发事务可能看到不一致的数据库状态(因为可以看到其他并发事务的中间状态),因此,需要引进一种特殊的多层并发控制(multilevel concurrency control)策略才能保证多层事务的隔离性。其基本思想如下: 逐层实施并发控制,某层的并发控制为上一层事务提供可串行化的保证。这样,尽管子事务不一定满足数据库完整性约束,多层事务作为一个整体仍然满足完整性约束。
多层事务具有原子性。如果一个多层事务被异常中止,原子性要求所有已提交的子事务都要撤消。由于子事务的提交并不依赖于其父事务的提交,它对数据项所作的修改可能已经被其他并发事务存取,因此其撤销操作比平坦事务复杂得多,需要通过运行补偿子事务(compensating subtransaction)完成。一个补偿事务清除一个已提交事务的执行结果。作为应用系统设计的一部分,要为每一个子事务设计一个补偿子事务。一般地,如果第Li-1级的子事务STi-1,1,…,STi-1,k都提交以后,需要异常中止第Li级的父事务STi,j,此时要以逆序执行补偿事务:CTi-1,k,…,CTi-1,1,其中CTi-1,1是STi-1,1的补偿事务。
4. 链式事务
链式事务(chained transaction)是一个子事务序列,当序列中的一个事务提交后,自动启动下一个事务的执行。有时候,一个长事务可以分解成一系列前后相连的子事务,形成链式事务。除了启动序列中的第一个事务,其他事务的启动没有begin_transaction()所产生的开销。另外,当序列中的一个子事务提交后,它对数据库所作的修改具有持久性。这样做的好处是在事务执行过程中如果系统崩溃了,则在该事务之前完成的那些子事务所作的修改在系统重启后可以保持下来,避免重做长事务。但是,链式事务作为一个整体就不再具有原子性和隔离性,因为如果系统崩溃了,系统不会重新执行序列中未完成的事务。如同多层事务,可以用补偿事务机制来强化链式事务的原子性和隔离性。
随着IT技术不断发展,未来的事务管理也随之需要研究如何在新的环境中提供更多的功能和更好的性能。例如,面向企业业务流程建模的工作流,可以看成是由一系列的任务通过层次或序列的方法合成得到的具有更加复杂结构的事务,可以称为工作流事务;为了满足Web应用所需要的一致性和可靠性而引进Web服务事务(Web services transaction); 为网络上通过共享计算资源进行分布式计算的网格(gird)系统引进的网格事务(grid transaction)等现代事务模型。

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭