
本书详细剖析了作为核心基础软件系统的数据库在云计算时代的技术演进历程,从架构设计、实现机制和系统优化等多个角度阐述传统数据库技术是如何一步步发展到云原生形态的。本书强调理论和实践的充分结合,分析MySQL、PostgreSQL等工业界“活”的系统实现数据库的SQL优化与执行、事务处理、缓存与索引等原理,在面对实际应用需求时做了哪些权衡与折中,面对复杂的应用场景如何优化,以及做出种种选择背后的原因。同时,本书结合阿里云在数据库领域的研发实践经验,着重讲述现代数据库从系统进化到服务的一系列核心技术原理,例如利用云计算资源池化技术、分布式技术实现数据库的高可用、弹性扩展和按需使用等。本书内容翔实,兼具理论深度和实现细节,同时开放性地探索了数据库的最新发展方向,能够启发读者进一步深入思考。本书可作为高等院校信息类专业的本科生和硕士研究生教材,也可作为数据库行业的内核研发和系统运维等从业人员的参考书。
写作背景 数据库系统是基础系统软件“三驾马车”之一,自诞生以来已发展60余年。关系数据库以其良好的抽象,强大的表达能力,易于使用的SQL语言占据了主流地位。在长达半个世纪的发展过程中,关系数据库的理论和技术都得到了长足发展,相关书籍不计其数,每一部分的技术如SQL解析、优化与执行、事务处理、日志恢复、存储引擎、数据字典等都有详尽分析。然而,数据库技术的日臻成熟并不意味着停止发展,相反,在互联网和大数据日渐兴盛的当下,业务的复杂性、数据模型的多样性、数据规模的爆炸式增长和硬件技术的更新都为这一相对古老的技术注入了新的活力。 互联网应用以前所未有的速度全面重塑了人们的生活方式,大量的数据得以在线化,这些数据需要被存储、分析和消费,承载这些功能的数据库面临的访问量远超以往。互联网应用为适应高度变化的市场,迅速调整其业务形态和模式,也产生了更加灵活丰富的数据模型、频繁变化的负载特征,这些都要求数据库具备弹性伸缩的能力,既可以适应业务的变化,又可以尽可能地降低成本。传统的数据库大多采用单机部署,规格固定,难以满足这些要求。云计算的出现恰逢其时,它把信息化需要的基础设施作为一种服务来提供,建立超大规模的资源池,并在此基础之上提供统一的、虚拟化的抽象界面。利用容器、虚拟化、编排调度和微服务等技术在多样化硬件上建立了一个庞大的操作系统,利用云计算的能力,数据库把固定规格部署的实例变为一种服务,用户可以按需取用,并根据业务变化实时伸缩。 云原生数据库不仅仅是把传统数据库架构在云计算平台上的一种服务,而是要从整体架构上进行彻底的改造,以充分利用云计算平台资源池化的能力,将原本一体运行的数据库拆解,让计算、存储资源完全解耦,使用分布式云存储替代本地存储,将计算层变成无状态(Serverless)。云原生数据库将承载每层服务的资源池化,独立实时地伸缩资源池的大小,以匹配实时的工作负载,使得资源利用率最大化。 主要内容 本书详细介绍了数据库技术在云计算时代背景下的演进历程,通过具体的实例介绍云原生、分布式等技术是如何让数据库的内涵变得更加丰富的。 第1章回顾了数据库发展的简要历程,并以一条SQL语句的执行过程简要阐述典型关系数据库的结构、重要模块和实现原理。 第2章讲述数据库在云计算时代背景下的发展与变迁,如何从单机数据库进化到云原生分布式数据库。云计算发展对数据库不仅带来了技术上的变化,还有商业模式上的变革,因此本章还探讨了数据库技术的未来可能发展趋势。 第3章主要讲述架构在云平台上的云原生数据库基本架构设计理念,以及设计选择背后的原因。同时分析了目前市场上最重要的几个云原生数据库,如AWS Aurora、Aliyun PolarDB、Microsoft Socrates的技术特点。 第4章到第7章分别讲述云原生数据库的几个重要组件,如存储引擎、共享存储、数据库缓存和计算引擎等的实现原理。每章都遵循相同的结构,首先讲述这些模块的理论基础、一般实现方法,然后介绍在云原生数据库中的针对性改进与优化方法。 第8章详细介绍了水平扩展的分布式技术在数据库中的应用、实现原理,以及与云原生技术融合后如何将数据库技术提升到新的水平。 第9章和第10章以PolarDB为例集中介绍云原生数据库应用实践,如何创建云上数据库实例,如何更好地使用和运维,充分发挥云数据库的弹性、高可用、安全和高性价比特性。 主要作者 本书由阿里巴巴数据库产品事业部李飞飞和华东师范大学周烜教授撰写,参与撰写内容的还有周烜团队的蔡鹏教授和张蓉教授,李飞飞团队的资深技术专家黄贵,阿里云副总裁、阿里巴巴达摩院秘书长刘湘雯。阿里云数据库团队的章颖强、王剑英、胡庆达、陈宗志、王宇辉、王波、孙月、庄泽超、应珊珊、宋昭、 王康、 程训焘、张海平、吴晓飞、吴学强、杨树坤等多位技术专家也提供了重要的技术素材,在此一并致谢。 特别感谢阿里云智能事业群总裁、达摩院院长张建锋,中国工程院院士陈左宁,中国科学院院士梅宏为本书作序。 特别感谢李战怀教授、杜小勇教授、周傲英校长、彭智勇教授、李国良教授、崔斌教授、陈国总经理、周彦伟会长、张文升主席为本书推荐。 感谢阿里巴巴数据库事业部生态与市场负责人胡铭娅所做的组织策划工作。感谢电子工业出版社博文视点宋亚东编辑的组织策划和出版工作。 正是所有人的努力才促成了本书的面世。 由于时间有限,书中不足之处在所难免,恳请广大读者批评指正! 作者 2021.11
目 录 第1章 数据库发展历程 1 1.1 数据库发展概述 2 1.1.1 萌芽 2 1.1.2 商业化起步 3 1.1.3 发展成熟 3 1.1.4 云原生与分布式时代 4 1.2 数据库技术发展趋势 6 1.2.1 云原生与分布式 6 1.2.2 大数据与数据库一体化 6 1.2.3 软硬件一体化 7 1.2.4 多模 7 1.2.5 智能化运维 8 1.2.6 安全可信 8 1.3 关系数据库主要技术原理 8 1.3.1 接入管理 9 1.3.2 查询引擎 10 1.3.3 事务处理 14 1.3.4 存储引擎 17 参考文献 19 第2章 数据库与云原生 20 2.1 数据库在云时代的发展 21 2.1.1 云计算时代的兴起 21 2.1.2 数据库作为一种服务 22 2.2 数据库在云原生时代面临的挑战 23 2.3 云原生数据库的主要特点 24 2.3.1 分层架构 24 2.3.2 资源解耦与池化 24 2.3.3 弹性伸缩能力 24 2.3.4 高可用与数据一致性 25 2.3.5 多租户与资源隔离 26 2.3.6 智能化运维 26 参考文献 26 第3章 云原生数据库架构 27 3.1 设计理念 28 3.1.1 云原生数据库的本质 28 3.1.2 计算与存储分离 29 3.2 架构设计 30 3.3 典型的云原生数据库 31 3.3.1 AWS Aurora 31 3.3.2 PolarDB 37 3.3.3 Microsoft Socrates 40 参考文献 44 第4章 存储引擎 45 4.1 数据组织 46 4.1.1 B+树 47 4.1.2 InnoDB引擎中的B+树 49 4.1.3 LSM-tree 52 4.2 并发控制 56 4.2.1 基本概念 56 4.2.2 锁方法 56 4.2.3 时间戳方法 58 4.2.4 MVCC 61 4.2.5 InnoDB MVCC的实现 63 4.3 日志与恢复 65 4.3.1 基本概念 65 4.3.2 逻辑日志 66 4.3.3 物理日志 66 4.3.4 恢复原理 67 4.3.5 MySQL的Binlog 68 4.3.6 InnoDB的物理日志 68 4.4 新型LSM存储引擎 70 4.4.1 PolarDB X-Engine 70 4.4.2 高性能事务处理 72 4.4.3 软硬结合优化 75 4.4.4 低成本分层存储 78 4.4.5 双存储引擎技术 84 4.4.6 实验评估 85 参考文献 88 第5章 高可用共享存储系统 89 5.1 高可用基础 90 5.1.1 Primary-Backup 90 5.1.2 Quorum 92 5.1.3 Paxos 93 5.1.4 Raft 95 5.1.5 Parallel Raft 98 5.2 集群高可用 100 5.2.1 MySQL集群高可用 100 5.2.2 PolarDB高可用 103 5.3 共享存储架构 116 5.3.1 Aurora存储系统 117 5.3.2 PolarFS 119 5.4 文件系统优化 121 5.4.1 用户态I/O计算 121 5.4.2 近存储计算 124 参考文献 130 第6章 数据库缓存 131 6.1 数据库缓存简介 132 6.1.1 数据库缓冲作用 132 6.1.2 缓冲池 132 6.2 缓存恢复 133 6.2.1 云环境对缓存的挑战 133 6.2.2 基于CPU与内存分离的缓存恢复 133 6.3 PolarDB的实践 135 6.3.1 缓冲池的优化 135 6.3.2 数据字典缓存和文件系统缓存的优化 140 6.3.3 基于RDMA的共享内存池 141 参考文献 146 第7章 计算引擎 147 7.1 查询处理概述 148 7.1.1 数据库查询处理概述 148 7.1.2 并行查询概述 149 7.2 查询执行模型 151 7.2.1 火山模型 151 7.2.2 编译执行模型 152 7.2.3 向量化执行模型 152 7.3 查询优化概述 153 7.3.1 查询优化整体介绍 153 7.3.2 逻辑查询优化 153 7.3.3 物理查询优化 154 7.3.4 其他优化方法 154 7.4 PolarDB查询引擎实践 155 7.4.1 PolarDB的并行查询技术 155 7.4.2 PolarDB的执行计划管理 168 7.4.3 PolarDB的向量化执行 175 参考文献 178 第8章 云原生与分布式融合 179 8.1 分布式数据库的基本原理 180 8.1.1 分布式数据库架构 180 8.1.2 数据分区 181 8.1.3 分布式事务 183 8.1.4 MPP并行查询处理 187 8.2 分布式与云原生 188 8.2.1 共享存储架构 189 8.2.2 无共享存储架构 189 8.3 云原生分布式数据库 PolarDB-X 190 8.3.1 架构设计 190 8.3.2 拆分方式 191 8.3.3 全局二级索引 192 8.3.4 分布式事务 193 8.3.5 HTAP 193 参考文献 194 第9章 云原生数据库PolarDB 应用实践 195 9.1 创建云上实例 196 9.2 数据库接入 198 9.2.1 相关账号的创建 198 9.2.2 图形化访问 198 9.2.3 连接方式访问 199 9.3 基本操作 202 9.3.1 数据库与表创建 202 9.3.2 创建测试数据 203 9.3.3 账号与权限管理 204 9.3.4 数据查询 205 9.4 云上数据迁移 208 9.4.1 云上数据的迁入 208 9.4.2 云上数据的导出 211 第10章 PolarDB运维管理 212 10.1 数据库运维概述 213 10.2 扩展资源 213 10.2.1 系统扩展 213 10.2.2 手动升降配 213 10.2.3 手动增减节点 214 10.2.4 自动升降配和增减节点 214 10.3 备份与恢复 215 10.3.1 备份 215 10.3.2 恢复 217 10.4 监控与诊断 218 10.4.1 监控与报警 218 10.4.2 诊断与优化 218 参考文献 220