目录
一、前言:
今天说一说事务处理的内容,我们会介绍事务处理的很多概念与应用。
二、事务处理的简介:
1.现实的问题:
一个在线多站航班预订系统(web或app)。
用户提交他们的订单并期望得到:
- 尽可能快地处理,也意味着用户在成功或失败时得到快速反馈。
- 完全按照要求,信息保持完整:预订所有行程的航班,并提交完整的信息,否则什么都不做。
- 并发性:不同的客户端可能会干扰,系统需要一直检查所有的可用航班,并告知用户
2.原子性要求:
完全按照要求,信息保持完整:预订所有行程的航班,并提交完整的信息,否则什么都不做。不允许出现只提交订单的部分信息的情况,要将整个订单看成一个最小的信息组。
3.并发性要求:
不同的客户端可能会干扰,系统需要一直检查所有的可用航班,并告知用户,如何能做到避免订单的提交干扰?
可能的解决方案:每次只执行一个用户订单。这个叫做DB-wide Mutual exclusion,数据库范围的互斥。那么在这种方案下,我们就需要确定什么时候一个事务结束,什么时候一个事务开始,那么就要进行事务划分。但是存在可伸缩性限制:DB-wide互斥对系统的吞吐量有严格的限制。
在互斥中,事务可能会被延迟。
4.什么是事务
事务:构成逻辑单元的一系列操作
5.隔离:
事务中的操作看起来与所有其他操作隔离。事务在系统中有一个虚拟串行视图。
6.耐用性/持久性
一旦用户被通知成功,事务将持久存在,而不会被撤销。
7.系统架构
8.数据库日志:
日志是典型数据库管理器的中心特性。
日志包含:
- 执行的写操作的列表。
- 事务划分:(BOT)、中止、提交。
日志显示内容:
- 日志序列号,或LSN (nr:)
- 执行事务的事务ID (ta:)。
- 受影响对象的标识符(obj:)
- 写操作之前的值(before-image, b:))。
- 写操作后的值(after-image, a:)。
日志的样子:
9.回滚
被中止的事务必须在回滚中撤消。
回滚是在正常操作期间撤销事务(也称为事务恢复)。
回滚基于日志。