什么是事务?

事务是具有以下属性的一组操作:atomic、一致、隔离和持久 (ACID) 。 通过事务支持,可以开发新类型的应用程序,同时简化开发过程并使应用程序更可靠。 本主题的其余部分提供了演示需要这些属性的方案,然后提供定义每个属性的表。

原子 操作组中,组中的每个操作都必须成功,或者必须撤消所有这些操作的效果, (也称为 回滚) 。 例如,银行转帐必须是两个操作的原子集:一个帐户的借方和另一个帐户的信用额度。 借方和额度必须作为原子组实现。 如果这两个操作都不成功,那么转移要么不公平地有利于银行或账户持有人。

致性 要求意味着,在事务 (假设我们在事务) 之前使用一致的系统启动,则数据是一致的。 对于银行转帐示例,一致性可以定义为使两个帐户的组合帐户余额为常量。 若要在银行转帐示例中实现一致性,只需对相同金额进行借记和信用操作。

事务的另一个示例是网站更新。 电子商务网站要求新产品类别导航页面与描述新产品的产品详细信息页面完全相同。 在这种情况下,需要在事务的控制下更新和添加多个目录条目。 不仅需要让更新成为原子更新,而且当前正在购物的客户必须看不到正在进行的更新。 这是事务的 隔离 属性的一个示例。

持续性的 属性要求更新完成后,即使系统停止响应,其效果也会保留。 在前面的示例中,只需确保足够的数据恢复即可提供持久性,以便在系统停止响应后显示表示向站点添加新产品的所有新文件系统条目。 这需要具有数据备份、恢复和高可用性机制的系统。

在面对任意数量的故障(包括在先前故障的恢复阶段发生的故障)时,可以保证事务的原子性以及其他属性。 最终,系统将达到以下两种状态之一:已应用所有操作或未应用任何操作。

下表汇总了事务的属性。

术语 说明
原子
事务中的所有操作都成功,或者所有操作都不会保留。
一致
如果数据在事务开始前保持一致,则事务完成后数据将保持一致。
孤立
正在进行的事务的效果对所有其他事务都隐藏。
耐用
事务完成后,其结果是永久性的,并且会在系统崩溃时幸存下来。

这些属性可确保软件可以处理意外错误,因为它可以在意外情况阻止成功完成时中止事务。 事务基础结构确保回滚中止事务的所有影响,将数据返回到一致状态。 因此,事务系统支持从系统故障中正常恢复。

为了保证 ACID 属性,支持事务的系统必须具有可靠的日志记录功能,以便根据需要提交或回滚事务。 有关详细信息,请参阅 通用日志文件系统