数据库系统实现
0 作者&译者
0.1 作者 Hector Garcia-Molina Jeffey D.Ullman Jennifer Widom著
0.2 译者 杨冬青 吴愈青 包小源 唐世渭等译
1 第一章 DBMS系统概述
1.1 什么是数据库?
本质上讲,数据库就是信息的集合。
1.2 数据库管理系统(DBMS)特性
1.2.1 内容摘要
- 允许用户使用专门的数据定义语言来创建新的数据库并指定其模式(数据的逻辑结构)。
- 给予用户使用适当的语言来查询数据(“查询”是数据库术语,指关于数据的问题)和修改数据的能力,这种语言通常称为查询语言(query language)或数据操纵语言(data-manipulation language)。
- 支持对非常大量的数据(许多TB或者更多)长期地进行存储,允许高效地存取数据以进行查询和数据库修改。
- 使数据具有持久性(durability),即能够从故障、多种类型的错误或者故意滥用中进行恢复。
- 控制多个用户同时对数据进行访问,不允许用户间有不恰当的互相影响(称作孤立性(isolation)),并且不会发生在数据上进行了部分的而不是完整的操作的情况(称作原子性(atomicity))。
1.2.2 个人理解
- DBMS首先是管理系统,管理的是数据库,数据库本质上来说是由数据库管理系统管理的数据的集合。
- DBMS支持数据定义语言(DDL),用来创建新的数据库并指定数据的逻辑结构。例如:
create table student_info(id number, name varchar(50), age number);
- DBMS支持数据操纵语言(DML),用来帮助用户进行数据的增删改查。例如:
insert into student_info values(001, 'zhangsan', 20); select * from student_info; delete from student_info;
- DBMS支持大量数据存取,高效存取。
- DBMS具备持久性,能够从故障、错误和故意滥用中恢复。
- DBMS支持并发访问,保证孤立性和原子性(操作完整)。
1.3 数据库系统概述
1.3.1 DBMS成分
如图<1.3.1-图1>所示: <1.3.1-图1>
1.3.2 DBMS工作流程概述
首先,对于DBMS来说,有两个不同的命令来源:
- 普通用户和应用程序,他们要求对数据进行访问和修改。
- 数据库管理员(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 查询处理概述
- 查询响应
- 由查询编译器对查询进行分析和优化,得到的查询计划或DBMS为了回答查询采取的动作序列,发送给执行引擎。
- 执行引擎向资源管理器发出一系列对小的数据单元(通常是记录或关系的元组)的请求。
- 查找数据的请求被发送给缓冲区管理器,缓冲区管理器的任务是从持久的存储数据的辅助存储器中将数据的适当部分取到主存的缓冲区中。
- 缓冲区管理器和存储器管理器进行通信,以从磁盘获取数据。
- 事务处理 事务是组成一组的若干个查询和其他动作,是必须作为一个原子被孤立地执行的单位。事务的执行必须是持久的,即任何已完成的事务的影响必须保留下来。
- 并发控制管理器或调度器,它负责保证事务的原子性和孤立性。
- 日志和恢复管理器,它负责事务的持久性。
1.3.3 主存和缓冲区管理器
数据库中的数据通常来说存储在辅助存储器中,目前来说,通常是磁盘,存储管理器的任务是控制数据在磁盘上的放置和在磁盘与主存之间的移动。 缓冲区管理器负责将可利用的主存空间分割成缓冲区,缓冲区是与页面同等大小的区域,磁盘块的内容可以发送到缓冲区中。 主要为数据(数据库自身的内容)、元数据(描述数据库的结构及其约束的数据库模式)、日志记录、统计信息、索引等。
1.3.4 事务处理
1.3.4.1 事务执行任务
- 日志记录——为了保证持久性,日志管理器遵循某种策略工作,保证不管什么时候系统发生故障或”崩溃”,恢复管理器都能查看关于数据库变化的日志,并将数据库恢复到某个一致的状态。
- 并发控制——事务的执行从表面上看必须是孤立的,可以利用锁防止两个事务以造成不良后果的方式存取数据的相同部分。
- 死锁解决——当事务之间通过调度器所赋予的锁进行资源竞争时,可能因为锁的竞争而导致任何一个事务都无法进行下去,事务管理器由责任进行干预,取消一个或多个事务,从而使其他事务能进行下去。
1.3.4.2 ACID准则
正确执行的事务复合”ACID”准则:
- A表示原子性(Atomicity),即事务完全执行或者完全不执行。
- I表示孤立性(Isolation),即表面看起来每一个事务都是在没有其他事务同时执行的情况下执行的。
- D表示持久性(Durability),即一旦事务完成了,则事务对数据库的影响就不会丢失。
- C表示一致性(Consistency),也即是说,所有的数据库都有一致性约束,或关于数据之间联系的预期状况。(例如,一个事务完成后,账户余额不能是负数。)
1.3.5 查询处理器
- 查询编译器 1.1 查询分析器——文本查询转化为树结构。 1.2 查询预处理器——语义检查,树结构转化,将分析树转化为代数操作树。 1.3 查询优化器——将查询计划转化为对实际数据的最有效的操作序列。
- 执行引擎 负责执行查询计划中的每一步,与其它模块大都有交互。例如和调度器交互,防止访问加锁数据;例如和日志管理器交互,以确保对数据库的修改都记录了日志。