索引 / 001 ZH-CN
Transaction Processing: Concepts and Techniques(事务处理:概念与技术) cover

计算机科学

计算机科学

Transaction Processing: Concepts and Techniques(事务处理:概念与技术)

Jim Gray; Andreas Reuter

英文原名: Transaction Processing: Concepts and Techniques

吉姆·格雷与安德烈亚斯·罗伊特关于如何构建事务处理系统的经典著作。书中先阐明具有原子性和持久性的事务背后的思想,再讲解实现这些性质的技术,从加锁、日志到恢复与容错,并附有详细的伪代码和对实际系统的综述。

需要的基础: 需修过数据库系统课程和操作系统课程;假定熟悉并发与文件系统。

难度等级
高级
学术层次
高级
databasestransaction processingconcurrency controlrecoveryfault tolerancemonograph

01 / 导读

导读

引用

Gray, J., & Reuter, A. (1992). Transaction Processing: Concepts and Techniques. Morgan Kaufmann.

章节概要

全书共十九章,分为八个部分:事务处理基础、容错基础、面向事务的计算、并发控制、恢复、作为示例资源管理器的事务型文件系统、系统概览,以及附录(参考文献、数据结构与接口、术语表)。书首有 Bruce Lindsay 所写的前言和一篇序言。第 1–15 章每章末尾都有习题与答案,其中多数还附有历史注记。

第一部分:事务处理基础(第1–2章)

第 1 章“引言”回顾历史,并追问什么是事务处理系统,分别从最终用户、管理员或操作员、应用设计者和资源管理器的角度来看,列出核心服务,以及涵盖应用开发、资源库、TP 监控器、数据通信、数据库、运行操作、教育与测试的功能清单。第 2 章“计算机科学基本术语”提供后文要用的词汇:硬件(存储器、处理器、通信、体系结构)、地址空间、进程、线程、消息与会话、客户端与服务器、命名、认证与授权、文件与 SQL、软件性能,以及 LU6.2、OSI-TP 与 X/Open DTP 等事务处理标准。

第二部分:容错基础(第3章)

第 3 章“容错”涉及定义(故障、失效、可用性、可靠性)、对停机事件的实证研究、典型模块失效率、N 重冗余与快速失效模块等硬件方法,以及为什么软件是主要问题。随后讲事务与软件容错、用于高可用存储的进程—消息—存储模型、进程与消息、一般原则,以及题为“系统错觉”的一则警示故事。

第三部分:面向事务的计算(第4–6章)

第 4 章“事务模型”由原子动作和平面事务出发,依次讲控制范围、描述模型的记号、带保存点的事务、链式事务、嵌套事务、分布式与多级事务、开放嵌套事务与长事务(包括 saga)以及“奇异”模型。第 5 章概述事务处理监控器:其作用、结构、事务型远程过程调用以及编程风格示例。第 6 章“事务处理监控器”进入内部:资源管理器接口、监控器的数据结构、沿事务型 RPC 路径的导览、请求与响应队列、负载均衡、认证与重启处理。

第四部分:并发控制(第7–8章)

第 7 章“隔离概念”篇幅很长:隔离的依赖模型、隔离定理、隔离度与 SQL、幻象与谓词锁、粒度锁与键范围锁、加锁启发式、嵌套事务加锁、调度与死锁,以及托管锁和乐观锁等“奇异”方法。第 8 章“锁的实现”转向原子机器指令、信号量、锁管理器(名字、队列、数据结构、内部逻辑、锁升级、重启)、死锁检测,以及并行事务的加锁。

第五部分:恢复(第9–12章)

第 9 章“日志管理器”讨论日志表、序号、公共接口、组提交与谨慎写等实现细节、重启逻辑和日志归档。第 10 章“事务管理器概念”涵盖应用接口和资源管理器接口、DO-UNDO-REDO 协议、值日志、逻辑日志与物理逻辑日志、先写日志规则、补偿记录以及两阶段提交。第 11 章“事务管理器结构”依次讲正常处理、检查点、系统重启、资源管理器失效与归档恢复。第 12 章“事务管理器高级专题”讲异构提交协调者、非阻塞提交、提交转移、两阶段提交的优化以及远程站点的灾难恢复。

第六部分:事务型文件系统——一个示例资源管理器(第13–15章)

第 13 章“文件与缓冲区管理”讲作为持久存储基础的文件系统、介质与文件管理以及缓冲区管理。第 14 章“面向元组的文件系统”讲如何把元组映射到页、元组的物理表示以及文件组织(入口顺序文件、键序文件、散列文件、聚簇文件与分区文件)。第 15 章“访问路径”讲散列与 B 树,包括它们的同步与恢复,附有 B 树操作的示例实现,还讲可扩展散列、网格文件和带孔砖块 B 树。

第七部分:系统概览(第16章)

第 16 章“事务处理系统概览”介绍 IMS、CICS 与 LU6.2、Guardian 90、DECdta、含 OSI-TP 与 CCR 的 X/Open DTP,以及其他系统(UTM、ADABAS TPF、Encina 和 Tuxedo)。

第八部分:附录(第17–19章)

参考文献、数据结构与接口、术语表,之后是索引。

核心概念

第一、二部分:基础与容错

  • 事务处理系统:围绕事务构建的系统,用户、管理员、应用设计者和资源管理器看到的面貌各不相同。
  • 可用性与可靠性:容错设计所依据的定义与失效率模型。
  • 快速失效模块与 N 重冗余:检测或屏蔽故障的硬件结构。

第三部分:面向事务的计算

  • 平面、链式、嵌套与多级事务:各种事务模型,各自由它对保存点、范围和提交所施加的规则界定。
  • Saga 与补偿:用补偿事务处理长时间运行工作的办法。
  • TP 监控器与事务型 RPC:组织、调度并把资源管理器挂接到事务上的中间件。

第四、五部分:并发控制与恢复

  • 隔离与隔离度:基于依赖关系的隔离定义,以及实践中使用的较弱级别。
  • 粒度锁与键范围锁:在多个层次和键范围上加锁以防止幻象。
  • 先写日志与物理逻辑日志:使重做和撤销得以成立的日志规则。
  • 两阶段提交:使分布式计算具有原子性的协议。

第六至八部分

  • B 树与散列作为访问路径:查找元组所用的结构,及其加锁与恢复。
  • 系统概览:对 IMS、CICS、Guardian 90、DECdta 与 X/Open DTP 的比较。

评析

优点

  • 以事务为统一框架。 出版社的介绍称作者把事务作为统一的概念框架,全书结构也印证了这一点:容错、事务模型、并发控制与恢复是同一论证的四个部分。
  • 实现层面的深度。 第 8、9、11 章考察锁管理器、日志管理器和事务管理器的内部,出版社还提到书中用可编译的 C 代码片段演示算法。
  • 教学辅助。 第 1–15 章每章末尾都有习题与答案,多数还有历史注记(目录中均有列出),使这部长篇论述适于自学。
  • 完整的示例资源管理器。 第六部分构建了事务型文件系统和 B 树访问路径,展示前面的思想如何落到具体的存储层。

局限

  • 系统概览已过时。 第 16 章介绍的是 20 世纪 90 年代初的产品与标准,如 IMS、CICS、Guardian 90 和 DECdta,没有更晚的系统。
  • 篇幅与专门化。 十六章正文加上对锁管理器和日志管理器的详细论述,使本书成为一部专题专著;课程通常只会指定部分章节。
  • 默认读者已有基础。 第 2 章提供了术语,但后面各部分预设读者学过数据库课程,并具备一些操作系统背景。

在课程中的定位

本课程中的其他书籍讲的是数据库系统的整体。Silberschatz、Korth 与 Sudarshan 的 Database System Concepts 和 Elmasri 与 Navathe 的 Fundamentals of Database Systems 是内容广泛的教材,把事务、并发和恢复作为其中的章节;Ramakrishnan 与 Gehrke 的 Database Management Systems 同样是一部通用教材。Coronel 与 Morris 以及 Hernandez 的书是讲设计与使用的较平易读物。当那些教材中的某一章引出的问题多于它回答的问题时,就该读 Gray 与 Reuter。

因此,这是第二阶段的书:先读通用教材中有关事务的章节,再用本书第四、五部分了解锁、日志、恢复与两阶段提交的全部细节。

如何使用本书

本书适合数据库与分布式系统方向的研究生,以及构建或调优存储引擎、数据库内核或事务监控器的工程师。读者应已修过数据库课程,并了解操作系统和并发的基础知识。

实用读法:

  • 核心: 第 1 章和第 4 章前几节(事务的词汇);第 7 章(隔离)和第 9–11 章(日志、事务管理器、重启、两阶段提交)。
  • 面向实现者: 第 8 章(锁的实现)、第 12 章(高级提交专题)以及第 13–15 章(文件、缓冲区和 B 树管理)。
  • 可选: 第 3 章(容错)、第 5–6 章(TP 监控器),以及第 16 章——宜当作历史概览,而不是当前产品的指南。

完成每章末尾的习题并对照答案检查,把书中的 C 代码片段当作可以改写并运行的范例。