深入理解RDBMS | 青训营笔记

47 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

主要内容

了解了RDBMS的发展过程,学习了RDBMS的几个关键技术,包括SQL引擎、存储引擎、事务引擎等。并通过具体实例将理论与实际结合了起来。

具体内容

首先通过红包雨的例子引入了事务与ACID的概念。此外,红包雨这个例子还需要保证高并发与高可靠。接着学习了数据库的发展历史。

关系型数据库的发展历史

在发明现代计算机前,主要通过人工进行数据记录和管理。
之后引入了文件系统进行数据管理(相当于从用纸记录变成了用磁盘记录)。DBMS应运而生,数据库管理系统按照某种模型来组织、存储和管理数据的仓库,通常按模型特点将传统数据库分为网状数据库层次数据库关系数据库
网状数据库:是第一个数据库,诞生于通用电气公司。他是基于数据之间的联系建立的,能反映现实世界中信息的关联。其优点是存取效率高,缺点是结构复杂,访问程序设计复杂。
层次模型:诞生于IBM公司,是使用树状结构来描述实体及其之间关系的数据模型。把网状模型的多对多变成了一对多。优点是结构简单,查询效率高,缺点是插入删除限制多,访问程序设计复杂等。
关系数据库:1970年IBM的E.F.Codd最早提出,奠定了关系模型的理论基础。关系模型是所有的数据都是一张二维表。优点是可以方便的表示M:N关系,且数据访问路径对用户透明,缺点是关联查询效率不高,且关系必须规范化。

SQL语言:1974年IBM的工作人员提出了SQL(Structured Query Language)。只需要告诉数据库做什么,却不需要说明怎么做。优点是语言简洁、易学易用,高度非过程化,其语法风格接近自然语言。
之后回顾了关系型数据库的历史。

RDBMS的关键技术

SQL引擎

SQL引擎有解析器(Parser)、优化器(Optimizer)、执行器(Executor)。
解析器一般分为词法分析、语法分析、语义分析等步骤。词法分析会抓取关键词,运算符等。语义分析可以理解为合法性的校验。
优化器则是在多条可能的路径中选出最佳的路径。可以基于规则优化,也可以基于代价优化。现在的数据库会先基于规则做简单的优化,再基于代价进行优化。这里的代价通常以时间为标杆,但是也可以以IO、CPU等为标杆。
Executor有多种执行模型。首先学习了火山模型。火山模型的优点是逻辑结构简单、每个算子相互之间没有耦合,缺点是每计算一条数据有多次函数调用开销,CPU效率不高。在其基础上发展出了向量化模型和编译执行模型。
向量化模型的优点是函数调用次数降低,CPU cache的命中率更高,且可以利用CPU的SIMD机制。编译执行模型采用动态编译。

存储引擎-InnoDB

对存储引擎这部分应该多关注概念而非实现。
InnoDB分为In-Memory和On-disk两部分。其中In-Memory主要有Buffer Pool、Change buffer等,On-disk有Redo Log、Undo Tablespaces等。

事务引擎

事务引擎解决ACID的实现,分别学习了ACID在数据库中是如何实现的。
通过Undo Log,可以进行事务回滚,保证事务的原子性,还可以实现MVCC。
一致性的主要是由业务实现,不在数据库实现。
隔离性通过锁或者MVCC实现。使用MVCC可以实现读写互不阻塞、降低死锁概率,实现一致性读。
通过Redo Log实现持续性。了解了事务提交前页面读盘和WAL(Write-ahead logging)两种方案。

企业实践

主要是通过春节红包雨这个案例讲解了遇到的困难以及解决方案。该案例主要面临流量大、流量突增和稳定性的问题。对流量大这个问题,通过Sharding解决,也就是分库分表。对流量突增要设法扩容,可以扩容DB物理节点的数量,并通过影子表进行压测,也可以通过代理连接池。稳定性和可靠性可以用3AZ高可用方案和HA管理。其中3AZ是指三机房部署,实时监控报警。

总结

这节课首先回顾了RDBMS的诞生过程,之后了解了其基本的原理以及关键的技术,包括各种引擎的组成,最后通过红包雨这个实际案例,讲解了遇到的困难以及解决方案。这节课还有不少概念不太懂,比如说WAL方案、SIMD机制等,后续还需要阅读更多的材料进行学习。