您的位置:首页 > 编程语言 > C#

C#事务处理(一)之概念

2017-03-14 11:07 183 查看

1.简介

事务的主要特征是,任务要么全部完成,要么都不完成。在写入一些记录时,要么写入所有的记录,要么什么都不写入。在写入一个记录时即使出现一次失败,在事务中已写入的所有其他数据也会回滚。

事务常用于数据库,但利用System.Transactions名称控件中的类,还可以对不稳定的,基于内存的对象执行事务处理,如对象列表。对于支持事务的对象列表,如果添加或删除了一个对象时事务处理失败,这个列表的操作会自动的撤销。写入一个基于内存的列表与写入数据库一样,也可以在事务中完成。

自从Window Vista之后,文件系统和注册表也支持事务。在注册表中写入一个文件,并做出一些修改的操作可以通过事务来完成。

2.概述

为了理解事务,考虑一下在Web站点上订购图书。图书订购进程会把客户要购买的图书从创库中取出,并把它放在客户的订购框中,再从客户的信用卡收取图书的费用。这两个动作要么是成功完成,要么都不完成。如果从仓库中取出图书时,出现错误,就不应从行用卡中收取费用。这个工作可以用事务来完成。

事务最常见的用途是写入或更新数据库中的数据。在信息队列中写入信息,或将数据写入文件或注册表时,也可以使用事务来完成。一个事务可以包含多个操作。

下图是事务中的主要元素。事务由事务管理器和协调。每个影响事务结果的资源都由一个资源管理器管理。事务管理器与资源管理器通信,以定义事务的结果。



2.1事务处理的阶段

激活阶段:在这阶段创建事务。为资源管理事务处理的资源管理器可以用事务进行登记。

准备阶段:在这阶段,每个资源管理器都可以定义事务的结果,事务的创建者发出结束事务的指令时,就启动这个阶段。事务管理器给所有的资源管理器发出一条“准备”的信息。如果资源管理器可以成功生成事务的结果,就向事务管理器发出一条“已准备好”信息。如果没有就发出“回滚”信息,强制事务管理器执行回滚操作。在发出“已准备好”信息后,资源管理器必须保证在提交阶段能完成工作。为此,稳定的资源管理器必须将准备状态的信息写入一个日志中,这样,如果在准备和提交过程中出现停电等故障时,就可以从该状态继续执行。

提交阶段:当所有的资源管理器都成功准备好了,就开始这个阶段。即所有资源管理器都发出了“已准备好”信息。接着,事务管理器就可以给所有的参与者发出一条“提交”信息,已完成工作。资源管理器现在可以完成事务中的工作,并返回一条“已提交”信息。

2.2ACID属性

事务由一些特殊的要求,例如,事务的结果必须处于有效的状态。即使是断电了,也必须有有效状态。事务的特征可以用术语ACID定义。

Atomicity(原子性):表示一个工作单元。在事务中,要么整个工作单元都完成,要么都不完成。

Consistency{一致性}:事务开始前的状态和事务完成后的状态必须有效。在执行事务的过程中,状态可以有临时值。

Isolation(隔离性):表示并发进行的事务独立于状态,而状态在事务处理过程中可能发生变化。在事务未完成时,事务A看不到事务B的临时状态

Durability(持久性):在事务完成后,它必须可持久的方式存储起来,如果关闭电源或服务器奔溃,该状态在重启时必须恢复。

注:并不是每个事务都有这4个属性。例如,基于内存的事务,就不需要持久性。事务也不总是与外界隔离,如后面的事务隔离等级。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  事务