CMU-15-445 数据库系统总结

前言

接近两个月的时间,完成了CMU数据库系统课程的学习,收获颇丰。

现在我再来回顾和总结过去两个月的学习,并从一个宏观的角度看数据库系统。

数据库系统

数据库满足的五条规则

  1. 允许用户使用专门的数据定义语言创建新的数据库并指定其模式
  2. 给予用户使用适当的语言来查询数据和修改数据的能力
  3. 支持非常大量的数据长期地进行存储,允许高效地存储数据以进行查询和数据库修改
  4. 使数据具有持久性,即能从故障、多种类型的错误或者故意滥用中进行恢复
  5. 控制多个用户同时对数据进行访问,不允许用户间有不恰当的相互影响(孤立性),并且不会发生在数据上进行了部分的而不是完整的操作的情况(原子性)

数据库的发展

早期的数据库管理系统

第一个商用数据库管理系统产生于20世纪60年代末,由文件系统演变而来,提供了上述第三点的部分支持

文件系统不支持第二条,对于第一条仅限于创建文件的目录结构,第四条并不总被文件系统支持,你可能会丢失并没有备份的数据。最后文件系统也不支持第五条

数据库管理系统概述

这里写图片描述

数据定义语言命令

对于DBMS有两个不同的命令来源: 1. 普通用户和应用程序,他们要求对数据进行访问或修改 2. 数据库管理员,负责建立数据库的结构或模式的一个人或一组人

查询处理概述

查询响应

查询编译器 对查询进行分析和优化。得到的查询激活或DBMS为了回答查询采取的动作序列,被传给 执行引擎 。执行引擎向资源管理器发出一系列对小的数据单元的要求, 资源管理器 掌握着存放关系的数据文件、文件中的数据格式和记录大小,以及支持对于数据文件中的元素进行快速查找的索引文件。

查找数据的请求被传入给 缓冲区管理器。缓冲区管理器的任务是从持久地存储数据的辅助存储器中将数据的适当部分取到主存的缓冲区中 存储管理器 可能使用操作系统命令,但通常是DBMS直接发命令给磁盘控制器

事务处理

事务 是组成一组的若干个查询和其他动作,是必须作为原子被孤立地执行的单位。事务的执行必须是持久的 事务处理器分为两个部分: 1. 并发控制管理器 或调度器,它负责保证事务的 原子性孤立性 2. 日志和恢复管理器 ,它负责事务的 持久性

主存和缓冲区管理器

  • 存储管理器 的任务就是控制数据在磁盘上的放置和在磁盘与主存之间的移动
  • 缓冲区管理器 负责将可利用的主存空间分割成缓冲区,缓冲区是与页面同等大小的区域,磁盘块的内容可以传送到缓冲区中。这样,所有需要从磁盘得到信息的DBMS成分都或直接或通过执行引擎与缓冲区交互。
  • 不同的DBMS成分所需要的信息的类型包括
  • 数据:数据库自身的内容
  • 元数据:描述数据库的结构及其约束的数据库模式
  • 日志记录:关于最近对数据库所做改变的信息,这些信息支持数据库持久性
  • 统计信息:DBMS收集和存储的关于数据库中的各个关系或其他成分的大小、取值等信息
  • 索引:支持对数据进行高效存取的数据结构

事务处理

事务管理器从应用系统接收事务命令,从而得知什么时候事务开始,什么时候事务结束,以及应用系统的期望 事务管理器执行以下任务:

  1. 日志记录:为了保持持久性,对于数据库的每一个变化都在磁盘上记录日志。日志管理器遵循几种策略中的某一种进行工作,这些策略保证不管在什么时候系统发生故障或“崩溃”, 恢复管理器 都能查看关于数据库变化的日志,并将数据库恢复到某个一致的状态。开始时,日志管理器将日志写到缓冲区中,然后它与 缓冲区管理器 协调,保证在适当时候将缓冲区写到磁盘中

  2. 并发控制:事务的执行从表面上看必须是孤立的。调度器(并发控制管理器)必须保证多个事务的一个个动作以一种适当的顺序执行,典型的调度器会维护若干个 来进行它的工作,锁通常存储在主存储器中的 封锁表 中。

  3. 死锁解决:当事务之间通过调度器所授予的所进行资源竞争时,可能进入这样的情况:没有任何一个事务能够进行下去,因为每个事务都需要另一个事务所持有的某一个资源。事务管理器有责任进行干预,取消(回滚或中止)一个或多个事务,从而使多个事务能够进行下去

事务的ACID特性

  • Atomicity 原子性
  • Isolation 孤立性
  • Durability 持久性
  • Consistency 一致性

查询处理器

查询处理器分为两个成分:

  1. 查询编译器,它将查询翻译成一种内部形式,称为查询计划。查询计划是要在数据上执行的一系列操作
  • 通常查询计划中的操作是“关系代数”的实现。查询编译器包括三个主要部分:
    1. 查询分析器,由文本形式的查询出发,建立一个树结构
    2. 查询预处理器,对查询进行语义检查,并进行某些树结构转换,将分析树转换为表示最初的查询计划的代数操作树
    3. 查询优化器,将最初的查询计划转换为对于实际数据最有效的操作序列
  • 查询编译器利用元数据和关于数据的统计数据来确定哪一个操作序列可能最快的
  1. 执行引擎,负责执行选中的查询计划中的每一步。

回顾实验

  • 缓冲区管理器
  • B+Tree
  • 并发控制
  • 日志和恢复 对比上面的图可知,该课程的实验已经覆盖了数据库的大部分内容,除了查询编译器和DDL编译器, 编译器是和SQL语句打交道的,其他的组件都或多或少的编写过代码。

前两个实验是最靠近存储的组件,后两个实验是中上层的与执行引擎和事务管理器相关的组件。

展望

CMU数据库系统课程就暂且告一段落,接下来打算继续完成CMU计算机网络课程,并在一个月内完成第一个project: 一个Web服务器。(MIT6.824又要拖一段时间了…)