编辑
2023-10-27
数据库理论基础
00
请注意,本文编写于 561 天前,最后修改于 561 天前,其中某些信息可能已经过时。

目录

Transactions
Strawman/Simple System
Formal Definitions

在前面的课程中介绍了 DBMS 的主要模块及架构,自底向上依次是 Disk Manager、Buffer Pool Manager、Access Methods、Operator Execution 及 Query Planning。但数据库要解决的问题并不仅仅停留在功能的实现上,它还需要具备:

满足多个用户同时读写数据,即 Concurrency Control,如: 两个用户同时写入同一条记录

面对故障,如宕机,能恢复到之前的状态,即 Recovery,如: 你在银行系统转账时,转到一半忽然停电

Concurrency Control 与 Recovery 都是 DBMSs 的重要特性,它们渗透在 DBMS 的每个主要模块中。而二者的基础都是具备 ACID 特性的 Transactions,因此本节的讨论从 Transactions 开始

Transactions

A transaction is the execution of a sequence of one or more operations (e.g., SQL queries) on a shared database to perform some higher-level function.

用一句白话说,transaction 是 DBMS 状态变化的基本单位,一个 transaction 只能有执行和未执行两个状态,不存在部分执行的状态。

一个典型的 transaction 实例就是:从 A 账户转账 100 元至 B 账户:

检查 A 的账户余额是否超过 100 元

从 A 账户中扣除 100 元

往 B 账户中增加 100 元

Strawman/Simple System

系统中只存在一个线程负责执行 transaction:

任何时刻只能有一个 transaction 被执行且每个 transaction 开始执行就必须执行完毕才轮到下一个

在 transaction 启动前,将整个 database 数据复制到新文件中,并在新文件上执行改动

如果 transaction 执行成功,就用新文件覆盖原文件

如果 transaction 执行失败,则删除新文件即可

Strawman System 的缺点很明显,无法利用多核计算能力并行地执行相互独立的多个 transactions,从而提高 CPU 利用率、吞吐量,减少用户的响应时间,但其难度也是显而易见的,获得种种好处的同时必须保证数据库的正确性和 transactions 之间的公平性。 显然我们无法让 transactions 的执行过程在时间线上任意重叠,因为这可能导致数据的永久不一致。于是我们需要一套标准来定义数据的正确性。

Formal Definitions

Database: A fixed set of named data objects (e.g., A, B, C, ...)

Transaction: A sequence of read and write operations (e.g., R(A), W(B), ...)

transaction 的正确性标准称为 ACID:

Atomicity:"all or nothing"

Consistency: "it looks correct to me"

Isolation: "as if alone"

Durability: "survive failures"

事物的四大特性性,ACID

原文链接https://zhenghe.gitbook.io/open-courses/cmu-15-445-645-database-systems/concurrency-control-theory

https://zhuanlan.zhihu.com/p/538492851

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!