
| 作 者 | 李国良 冯建华 柴成亮 李辉 |
|---|---|
| 单 位 | 清华大学 |
| 内容提要 | 本书是计算机领域本科教育教学改革试点工作(简称“101计划”)系列教材之一。本书主要讲述数据库管理系统基本原理与核心技术,重点介绍了数据库的构建方法。主要内容包括引言、关系模型和关系代数、关系数据库设计、SQL、数据库存储、事务管理、数据库原子性和持久性的实现及故障恢复、并发控制、索引、查询处理、查询优化、查询执行、数据库安全、高级数据库技术,以及两个数据库案例——GaussDB和SQLite。
本书可作为高等学校计算机及相关专业数据库课程教材使用,也可供研究人员和业界工程师实施数据库项目研发时参考。 |
在信息化时代,大量数据被生产、传输、存储、查询和分析,这些数据都需要被有效地管理起来。数据库管理系统则是用来有效管理数据的核心基础软件,被称为信息技术系统皇冠上的明珠。数据库管理系统是数字化时代的核心基础设施,已经广泛地应用于各行各业(例如金融、电信、制造、能源等),对社会的发展和人类进步产生了深远的影响。
本书从系统角度深入剖析数据库的基本原理和核心技术,并以问题驱动的思路详细讲述了数据库解决了什么问题,如何解决这些问题,为什么这样解决这些问题等。通过阅读本书,读者可以深入了解数据库的系统架构、设计理念、基本原理与核心技术。
1.本书写作思路
学习数据库不是简单地学会“用”数据库,更重要的是学习如何“造”数据库(即自主研发数据库),掌握数据库的核心技术。本书从端到端系统层面深入阐述数据库管理系统的核心技术,不仅介绍数据库的基本原理,更重要的是介绍数据库的构建方法。
总体来讲,本书具有以下特点。
(1)系统、全面。本书从系统角度详细讲述数据库构建的核心技术,包括数据库存储引擎、事务机制、并发控制、故障恢复、优化器、执行器,深入介绍了数据库管理系统的各个重要组成部分以及相关关系,使读者充分了解数据库管理系统的全貌和基本原理。
(2)原理剖析。本书不仅详细介绍数据库管理系统的设计思路(what和how),还重点介绍数据库管理系统的设计理念(why),既授之以鱼,又授之以渔。对于数据库管理系统的核心技术,例如事务处理、故障恢复、查询优化、查询执行等,本书进行了非常深入的讲解与讨论,使读者真正了解数据库管理系统设计的魅力。
(3)理论与实践相结合。相关核心数据库技术算法均以伪代码形式给出,并给出详细的例子以便读者理解。本书还结合开源数据库系统,为读者提供自己造一个数据库的案例。
(4)通俗易懂。全书从系统架构到模块设计再到技术细节、从全局到局部讲述了数据库管理系统的设计思路,还配备了大量的插图和例子,深入浅出,帮助读者融会贯通地理解数据库管理系统的核心技术。
(5)配套资源丰富。本书配有PPT讲义、教学视频、小型数据库HuaDB的代码,可以供读者参考学习。
2. 本书内容组织
本书共16章,分为7个部分。
第一部分(第1章):从端到端、从全局视角介绍数据库系统全貌,以数据库整体架构图为基础,自顶向下介绍数据库的各个组成部分,包括数据库系统架构、核心模块、关键技术以及数据库发展历史和数据库发展趋势。
第二部分(第2 ~ 4章):主要介绍关系数据库基础,包括关系模型和关系代数、数据库设计方法、SQL语言,重点介绍用户如何使用数据库和如何设计数据库。第2章介绍关系模型、关系代数、关系演算等关系理论和基础。第3章介绍关系数据库设计理论与方法,包括E-R模型、E-R模型到关系的设计、数据库规范化设计方法、函数依赖、数据库范式、关系模式分解理论与方法。第4章介绍SQL语言,包括数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)、事务处理语言、存储过程和函数、触发器、数据库访问接口JDBC和ODBC。
第三部分(第5 ~ 9章):主要介绍数据库的存储引擎和事务处理,包括数据组织、缓冲区管理、日志管理、元数据管理、事务处理、故障恢复、并发控制、索引。第5章介绍数据库存储引擎。数据库存储系统的设计关系到数据库的效率和稳定性,是数据库的核心模块。本章主要阐述存储介质的特性、数据页面的组织方式、数据文件的组织方式、空闲空间管理、缓冲区设计机制、行列存储的优缺点。第6章介绍数据库事务处理机制,它是数据库最核心的特性之一,本章介绍了事务的基本概念ACID、事务隔离级别、事务可恢复性、可串行化调度以及事务ACID实现的思路。第7章介绍数据库原子性和持久性的实现机制,讲解了数据库故障的分类以及相应恢复方法。针对单机恢复,详细介绍影子页面、仅重做(redo)日志、仅回滚(undo)日志、重做/回滚日志的实现机制。特别详细介绍业界常用的Aries算法。针对多机容灾恢复,介绍了主备数据库、两地三中心、同城双集群、多地多活等恢复方法。还介绍了基于数据备份的恢复方法。第8章介绍数据库的并发控制机制,详细介绍数据库如何支持事务的并发,包括乐观并发控制技术、悲观并发控制技术、基于时间戳的方法以及多版本并发控制技术。还介绍了如何使用这些技术实现不同的隔离级别。第9章介绍数据库索引技术,包括索引的分类,常用的B + 树索引、哈希索引、LSM树索引、位图索引和高维索引等内容。
第四部分(第10 ~ 12章):主要介绍数据库的查询处理和执行,包括数据库查询处理框架、数据库优化器和数据库执行器。查询处理决定了数据库的查询处理性能。第10章介绍查询处理全流程,包括查询解析、查询优化与查询执行,并详细介绍了数据库的查询算子。第11章详细阐述了查询优化方法。查询优化是数据库的“发动机”,与执行效率息息相关。本章主要介绍逻辑优化(基于规则的查询重写)、基数和代价估计、物理优化(基于代价的物理优化、代价估计系统、连接顺序选择、物理算子选择等)、优化器模型、基于物化视图的查询优化。第12章介绍查询执行模式,包括推送式和拉取式(具体有火山模型、物化模型、向量化执行模型)。最后还介绍了编译执行和并行执行。
第五部分(第13章):主要介绍数据库的安全管理。数据库安全已经成为当前数据安全的核心问题,保护数据库免受安全威胁需要设计一系列安全措施。本章主要阐述数据库外围级安全、访问级安全和数据级安全在内的多层安全机制。外围级安全措施包括安全认证、防火墙、入侵检测。访问级安全方法包括访问控制、安全权限配置与管理、数据库审计。数据级安全包括数据加密、隐私保护等。
第六部分(第14章):主要介绍高级数据库技术,包括分布式数据库、OLAP数据库、HTAP数据库、内存数据库、云原生数据库、新硬件与数据库、NoSQL数据库,帮助读者了解数据库的前沿进展。
第七部分(第15 ~ 16章):通过两个流行的真实数据库系统案例来介绍数据库的核心技术和设计理念,讨论上述数据库技术如何应用在实际数据库产品中。第15章介绍了国产云原生分布式数据库GaussDB,其单机版openGauss已经开源。本章介绍GaussDB整体架构、分布式事务处理与优化技术、云原生计算/存储分离技术、数据库高可用技术、多合一存储引擎、查询优化与并行执行技术、数据库安全技术。第16章介绍了开源嵌入式数据库SQLite。SQLite是一款轻量级嵌入式数据库,其特点是体积小、跨平台、灵活、易用。本章介绍了SQLite的设计思路、查询优化方法、基于虚拟机的执行机制和基于B树的存储引擎。
3.本书特色
首先,本书强调从学“用”数据库转变为学“造”数据库。通过阅读本书,读者可以深入理解数据库的整体架构、实现原理、核心技术和开发思路,并能够具备开发一款数据库的能力。
其次,本书凝练了数据库设计理念,帮助读者更加深入地理解数据库整体系统和核心技术。(1)数据库的核心理念是抽象和建模,包括数据的建模和查询的建模。通过抽象和建模形式化定义数据库可支持的边界。(2)数据库存储引擎的设计理念是协同磁盘和内存缓冲区来提升数据处理速度,通过将数据的随机写转化为日志的连续写来优化数据库性能。(3)数据库事务处理的设计理念是系统思维和协同优化,保证正确并发一致的数据处理,包括基于日志的数据恢复、并发控制协议等。(4)数据库的核心引擎是优化器,优化器将简单的声明式查询语言交给用户,而把复杂的查询优化留给系统本身,帮助用户自动优化查询。(5)数据库索引是提升查询性能的加速器,能够通过空间换时间的数据结构来加速查询。(6)数据库安全是保护数据免受未授权访问、篡改和泄露的屏障。(7)数据库高可用是核心竞争力,任何时候都保障数据不丢失、系统不停服,这就需要基于冗余来设计高可用能力。(8)数据库技术一直在发展,只有掌握数据库的核心理念和设计精髓,才能跟随时代潮流,打造更优的数据库。最后,本书还详细介绍了数据库新技术和未来发展趋势,可以帮助从事数据库领域研究的读者更加深入地了解数据库,寻找研究灵感。
4. 致采用本书作为教材的教师
数据库教学可以分为关注不同主题的四类:数据库应用开发、数据库原理、数据库实现、数据库新技术,针对每一类主题可以选讲不同的章节。下表给出了不同类型选讲的章节建议。
5. 致读者
高等院校学生可以通过学习本书内容掌握数据库管理系统的基本原理和核心技术。高校教师可以根据本书因材施教,讲解数据库的基本原理、设计理念和核心技术。研究人员和业界工程师可以参考本书学习“造”数据库,掌握数据库研发的核心技术。
本书要求读者对数据结构和算法有一定基础,需要掌握基本的数据结构和基本的算法知识。对于本书编写过程中的疏漏之处,欢迎读者给作者发送邮件(liguoliang@tsinghua.edu.cn)指正错误。
6. 致谢
首先,特别感谢清华大学周立柱教授,他全面、细致地审阅了本书,并提出了很多宝贵的修改建议,提升了本书的质量。
其次,感谢本书的合著者冯建华教授、柴成亮教授、李辉教授的辛勤付出,冯建华教授对第二部分进行了详细的审阅和校正,柴成亮教授对第五部分和第六部分进行了详细的审阅和校正,李辉教授撰写了第16章,并对第七部分进行了详细审阅和校正。
感谢哈尔滨工业大学李建中教授、高宏教授,中国人民大学的王珊教授、杜小勇教授、陈红教授,西北工业大学的李战怀教授,他们对本书提出了宝贵的修改建议。
感谢骆昱宇、秦雪迪、韩越、李元丙、余翔、金连源、钮泽平、张金涛、王嘉翼、朱耀宇、刘佳斌、周煊赫、李文博、董昊文、赵新阳、黄帅、王勇、赵天宇、饶淙元、张新宁、张晨阳、孙昭言、张超、过云燕等同学对本书提出的宝贵意见。
第 1 章 引言
1.1 数据库概述
1.2 数据库发展简史
1.3 数据库系统的应用和展望
1.4 小结
1.5 习题
第 2 章 关系模型和关系代数
2.1 关系数据库和关系模型
2.2 关系代数
2.3 关系演算
2.4 小结
2.5 习题
第 3 章 关系数据库设计
3.1 数据库设计和数据模型
3.2 概念结构设计:E-R 模型
3.3 逻辑结构设计:从 E-R 图到关系设计
3.4 数据库规范化设计理论
3.5 数据库规范化设计与实现
3.6 小结
3.7 习题
第 4 章 SQL
4.1 SQL 查询语言概览
4.2 SQL 数据定义语言
4.3 SQL 数据操纵语言
4.4 SQL 数据控制语言
4.5 存储过程和函数
4.6 触发器
4.7 使用程序设计语言访问数据库
4.8 小结
4.9 习题
第 5 章 数据库存储
5.1 存储概览
5.2 存储介质
5.3 存储结构
5.4 记录组织
5.5 页面组织
5.6 文件组织
5.7 空闲空间管理
5.8 元数据存储
5.9 缓冲区
5.10 行存储与列存储
5.11 小结
5.12 习题
第 6 章 事务管理
6.1 事务概览及其概念
6.2 事务的特性
6.3 可串行化调度
6.4 事务的隔离级别
6.5 保证事务 ACID 的技术
6.6 小结
6.7 习题
第 7 章 数据库原子性和持久性的实现及故障恢复
7.1 正常无故障事务原子性和持久性的实现
7.2 数据库故障恢复机制概述
7.3 单机系统崩溃恢复方法
7.4 ARIES 恢复算法
7.5 数据库备份技术
7.6 数据库多机恢复
7.7 小结
7.8 习题
第 8 章 并发控制
8.1 并发控制概览
8.2 悲观并发控制技术
8.3 乐观并发控制技术
8.4 多版本机制
8.5 并发控制协议比较
8.6 小结
8.7 习题
第 9 章 索引
9.1 索引概述
9.2 索引基本概念
9.3 B+ 树索引
9.4 哈希索引
9.5 LSM 树索引
9.6 位图索引
9.7 多维索引
9.8 小结
9.9 习题
第 10 章 查询处理
10.1 查询处理概述
10.2 SQL 解析
10.3 查询优化概述
10.4 查询算子概述
10.5 排序算子实现与代价分析
10.6 选择算子实现及代价分析
10.7 连接算子实现及代价分析
10.8 其他运算实现与代价分析
10.9 小结
10.10 习题
第 11 章 查询优化
11.1 查询优化概述
11.2 查询重写
11.3 代价估计
11.4 连接顺序选择
11.5 物理计划选择
11.6 基于物化视图的查询优化
11.7 小结
11.8 习题
第 12 章 查询执行
12.1 查询执行概述
12.2 拉取式模型
12.3 推送式模型
12.4 编译执行与代码生成
12.5 小结
12.6 习题
第 13 章 数据库安全
13.1 数据库安全概述
13.2 数据库安全威胁
13.3 外围级数据库安全措施
13.4 访问级数据库安全措施
13.5 数据级数据库安全措施
13.6 小结
13.7 习题
第 14 章 高级数据库技术
14.1 分布式数据库
14.2 OLAP 数据库
14.3 HTAP 数据库
14.4 内存数据库
14.5 云数据库
14.6 数据库与新硬件
14.7 NoSQL 数据库
14.8 小结
14.9 习题
第 15 章 GaussDB 简介
15.1 GaussDB 总体架构
15.2 GaussDB 单机查询处理技术
15.3 GaussDB 存储技术
15.4 GaussDB 分布式技术
15.5 GaussDB 高可用技术
15.6 GaussDB 安全
15.7 小结
15.8 习题
第 16 章 嵌入式数据库 SQLite 简介
16.1 嵌入式数据库与 SQLite 概述
16.2 SQLite 总体架构
16.3 SQLite 查询处理技术
16.4 SQLite 存储技术
16.5 SQLite 事务管理技术
16.6 小结
16.7 习题

