这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
一、本堂课的知识要点有哪些?
- 经典案例:通过抖音红包雨的案例,介绍 RDBMS 中 ACID 的概念;
- 前 DBMS 时代,DBMS 数据模型,SQL 语言;
- SQL 关键技术:SQL 引擎、存储引擎(页面组织、B+Tree 和 Buffer Pool),事务引擎(Undo Log、锁/MVCC、Redo Log);
- 企业实践:大流量、流量突增、稳定性和可靠性。
二、本堂课介绍了哪些知识点?
-
RDBMS 中 ACID 的概念:
- 原子性 (Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性 (Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 隔离性 (Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
- 持久性 (Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
-
数据库发展过程诞生的 3 种数据模型:
- 网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
- 层次模型:层次数据模型是用树状<层次>结构来组织数据的数据模型。
- 关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
-
SQL 执行流程:在 SQL 执行过程中,需要经历 SQL 引擎、存储引擎、以及事务引擎等模块。而其中 SQL 引擎又分为 Parser、Optimizer、Executor 几个部分:
-
SQL 引擎包括了:
- Paser:经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。
- Optimizer:根据 Parser 产生的语法树,根据规则或者代价产生执行计划树。
- Executor:根据计划树进行执行,常见的执行方式是火山模型。
-
存储引擎:负责数据的底层存储、管理和访问工作。MySQL 的 InnoDB 存储引擎:
- Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘 IO 的开销。
- Page:数据存储的最基本单位,一般为 16KB。
- B+ Tree:InnoDB 中最常用的索引结构。
-
事务引擎:实现了数据库的 ACID 能力, MySQL 的 InnoDB 通过下面的技术来实现 ACID:
- Atomicity:InnoDB 中通过 undo 日志实现了数据库的原子性,通过 Undo Log,数据库可以回滚到事务开始的状态;
- Consistency:一致性本质上是一种业务层的限制。
- Isolation:通过 Undo Log 实现 MVCC(多版本并发控制),降低读写冲突。
- Durability:通过 Redo Log(一种 WAL 实现方式)来保证事务在提交后一定能持久化到磁盘中。
三、个人总结:
这节课深入介绍了 MySQL 内部原理,包括一条 SQL 语句是如何在数据库内部执行的,介绍了 MySQL 的 SQL 引擎、存储引擎和事务引擎。看完之后发现之前学的 CMU15445 的课程内容差不多,不过肯定没 MySQL 那么复杂,有机会把这门课继续学完。