数据库系统实现

0 作者&译者

0.1 作者 Hector Garcia-Molina Jeffey D.Ullman Jennifer Widom著

0.2 译者 杨冬青 吴愈青 包小源 唐世渭等译

1 第一章 DBMS系统概述

1.1 什么是数据库?

本质上讲,数据库就是信息的集合。

1.2 数据库管理系统(DBMS)特性

1.2.1 内容摘要

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

1.2.2 个人理解

1.3 数据库系统概述

1.3.1 DBMS成分

如图<1.3.1-图1>所示: 数据库管理系统成分 <1.3.1-图1>

1.3.2 DBMS工作流程概述

首先,对于DBMS来说,有两个不同的命令来源:

  1. 普通用户和应用程序,他们要求对数据进行访问和修改。
  2. 数据库管理员(database administrator, DBA),负责建立数据库的结构或模式的一个人或一组人。
1.3.2.1 数据定义语言命令

数据定义语言(DDL)处理起来相对比较简单,一般来说按照图<1.3.1-图1>右上部分开始它的处理流程。例如: DBA需要定义一张表或关系,它包括学生学号、姓名以及性别。DBA决定所允许的性别只能是M/F,此结构约束信息都是数据库模式的一个部分。如图<1.3.1-图1>所示,由DBA输入这些信息,而且有雨这些命令会发生深刻的影响,DBA也需要相应的权限来进行这些命令,这些命令通过DDL处理程序进行分析,然后传给执行引擎,由执行引擎经过索引/文件/记录管理器去改变元数据(metadata),即数据库的模式信息。

1.3.2.2 查询处理概述

1.3.3 主存和缓冲区管理器

数据库中的数据通常来说存储在辅助存储器中,目前来说,通常是磁盘,存储管理器的任务是控制数据在磁盘上的放置和在磁盘与主存之间的移动。 缓冲区管理器负责将可利用的主存空间分割成缓冲区,缓冲区是与页面同等大小的区域,磁盘块的内容可以发送到缓冲区中。 主要为数据(数据库自身的内容)、元数据(描述数据库的结构及其约束的数据库模式)、日志记录、统计信息、索引等。

1.3.4 事务处理

1.3.4.1 事务执行任务
  1. 日志记录——为了保证持久性,日志管理器遵循某种策略工作,保证不管什么时候系统发生故障或”崩溃”,恢复管理器都能查看关于数据库变化的日志,并将数据库恢复到某个一致的状态。
  2. 并发控制——事务的执行从表面上看必须是孤立的,可以利用锁防止两个事务以造成不良后果的方式存取数据的相同部分。
  3. 死锁解决——当事务之间通过调度器所赋予的锁进行资源竞争时,可能因为锁的竞争而导致任何一个事务都无法进行下去,事务管理器由责任进行干预,取消一个或多个事务,从而使其他事务能进行下去。
1.3.4.2 ACID准则

正确执行的事务复合”ACID”准则:

  1. A表示原子性(Atomicity),即事务完全执行或者完全不执行。
  2. I表示孤立性(Isolation),即表面看起来每一个事务都是在没有其他事务同时执行的情况下执行的。
  3. D表示持久性(Durability),即一旦事务完成了,则事务对数据库的影响就不会丢失。
  4. C表示一致性(Consistency),也即是说,所有的数据库都有一致性约束,或关于数据之间联系的预期状况。(例如,一个事务完成后,账户余额不能是负数。)

1.3.5 查询处理器

  1. 查询编译器 1.1 查询分析器——文本查询转化为树结构。 1.2 查询预处理器——语义检查,树结构转化,将分析树转化为代数操作树。 1.3 查询优化器——将查询计划转化为对实际数据的最有效的操作序列。
  2. 执行引擎 负责执行查询计划中的每一步,与其它模块大都有交互。例如和调度器交互,防止访问加锁数据;例如和日志管理器交互,以确保对数据库的修改都记录了日志。

2 第二章 辅助存储管理

2.1

Table of Contents