DDBMS - 事务处理系统

本章讨论事务处理的各个方面。 我们还将研究事务中包含的低级任务、事务状态和事务属性。 在最后一部分中,我们将研究调度和调度的可序列化性。

事务

事务是包含数据库操作集合的程序,作为数据处理的逻辑单元执行。 事务中执行的操作包括一项或多项数据库操作,例如插入、删除、更新或检索数据。 它是一个原子过程,要么完全执行完成,要么根本不执行。 仅涉及数据检索而不涉及任何数据更新的事务称为只读事务。

每个高级操作都可以分为多个低级任务或操作。 例如,一个数据更新操作可以分为三个任务 −

  • read_item() − 将数据项从存储器读取到主存。

  • modify_item() − 更改主内存中项目的值。

  • write_item() − 将修改后的值从主存写入存储器。

数据库访问仅限于 read_item() 和 write_item() 操作。 同样,对于所有事务,读取和写入构成了基本的数据库操作。

事务操作

事务中执行的低级操作是 −

  • begin_transaction − 指定事务执行开始的标记。

  • read_item 或 write_item − 作为事务的一部分,数据库操作可能与主内存操作交织在一起。

  • end_transaction − 指定事务结束的标记。

  • commit − 一个信号,表明事务已完全成功完成并且不会被撤消。

  • rollback − 一个信号,表明事务已不成功,因此数据库中的所有临时更改均已撤消。 已提交的事务无法回滚。

事务状态

事务可能会经历五种状态的子集:活动、部分提交、已提交、失败和中止。

  • Active − 事务进入的初始状态是活动状态。 事务在执行读、写或其他操作时保持此状态。

  • Partially Committed − 事务在执行完事务的最后一条语句后进入此状态。

  • Committed − 事务成功完成且系统检查已发出提交信号后,事务进入此状态。

  • Failed − 当发现正常执行无法继续或系统检查失败时,事务从部分提交状态或活动状态转为失败状态。

  • Aborted − 这是事务失败后回滚并且数据库已恢复到事务开始之前的状态后的状态。

以下状态转换图描述了事务中的状态以及导致状态更改的低级事务操作。

状态转换图

事务的属性

任何事务都必须维护 ACID 属性,即。 原子性、一致性、隔离性和持久性。

  • 原子性 − 该属性表明事务是处理的原子单元,也就是说,它要么全部执行,要么根本不执行。 不应存在部分更新。

  • 一致性 − 事务应该将数据库从一种一致状态转变为另一种一致状态。 它不应对数据库中的任何数据项产生不利影响。

  • 隔离 − 一笔事务应该像系统中唯一的一笔事务一样执行。 同时运行的其他并发事务不应受到任何干扰。

  • 耐用性 − 如果提交的事务带来了更改,则该更改应该在数据库中持久存在,并且在发生任何故障时不会丢失。

日程和冲突

在具有多个同时事务的系统中,调度是操作执行的总顺序。 给定一个包含 n 个事务的时间表 S,例如 T1、T2、T3…………..Tn; 对于任何事务 Ti,Ti 中的操作必须按照时间表 S 中的规定执行。

时间表类型

有两种类型的时间表 −

  • 串行时间表 − 在串行调度中,在任何时间点,只有一个事务处于活动状态,即没有事务重叠。 这如下图所示−

串行时间表
  • 并行计划 − 在并行计划中,多个事务同时处于活动状态,即事务包含有时重叠的操作。 这如下图所示−

并行计划

时间表冲突

在包含多个事务的调度中,当两个活动事务执行不兼容的操作时,就会发生冲突。 当以下三个条件同时存在时,两个操作被称为冲突 −

  • 这两个操作是不同事务的一部分。

  • 这两个操作访问相同的数据项。

  • 至少其中一个操作是 write_item() 操作,即它尝试修改数据项。

可串行化

"n"个事务的可串行化调度是并行调度,相当于包含相同"n"个事务的串行调度。 可串行化调度包含串行调度的正确性,同时确定并行调度更好的 CPU 利用率。

时间表的等效性

两个调度的等价可以是以下类型 −

  • 结果等价 − 产生相同结果的两个计划被称为结果等效。

  • 查看等价 − 以相似方式执行相似操作的两个调度被认为是视图等效的。

  • 冲突等价 − 如果两个调度都包含相同的事务集并且具有相同顺序的冲突操作对,则称两个调度是冲突等价的。