这是我参与「第五届青训营」伴学笔记创作活动的第 14 天,今天学习的内容是关于深入理解RDBMS,经典案例、发展历史、关键技术与企业实践四个部分,根据课程内容整理学习笔记如下。
12 MySQL - 深入理解RDBMS
12.1 经典案例
通过抖音红包雨的案例,介绍 RDBMS 中 ACID 的概念:
- 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
- 持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
12.2 发展历史
12.2.1 前DBMS时代 - 人工管理
结绳记事=>账本=>18世纪打孔机
12.2.2 前DBMS时代 - 文件系统
1956年IBM发布磁盘驱动器 - 文件系统实现
12.2.3 DBMS时代
DBMS(数据库管理系统):按照某种数据模型来组织、存储和管理数据的仓库
数据库发展最初过程中,诞生过3种数据模型,最终关系型模型成为了应用最为广泛的数据库模型。
- 网状模型: 用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型。
- 层次模型: 层次数据模型是用树状<层次>结构来组织数据的数据模型。
- 关系模型: 使用表格表示实体和实体之间关系的数据模型称之为关系数据模型。
12.2.4 DBMS数据模型对比
| 网状模型 | 层次模型 | 关系模型 | |
|---|---|---|---|
| 优势 | 能直接描述现实世界 存取效率较高 | 结构简单 查询效率高 可以提供较好的完整性支持 | 实体及实体间的的联系都通过二维表结构表示 可以方便的表示M:N关系 数据访问路径对用户透明 |
| 劣势 | 结构复杂 用户不易使用 访问程序设计复杂 | 无法表示 M:N 的关系 插入、删除限制多 遍历子节点必须经过父节点 访问程序设计复杂 | 关联查询效率不够高 关系必须规范化 |
12.2.5 SQL语言
1974年提出,将关系数据库的12条准则的数学定义以简单的关键字语法表现出来
特点:
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁,易学易用
12.2.6 历史回顾
12.3 关键技术
12.3.1 SQL 执行流程
在SQL执行过程中,需要经历SQL引擎、存储引擎、以及事务引擎等模块。而其中SQL引擎又分为Parser、Optimizer、Executor几个部分:
12.3.2 SQL 引擎
SQL引擎包括了:
-
解析器 (Paser) : 经过词法分析、语法分析等步骤生成语法树,然后进行语义分析对语法树进行合法性校验。
-
优化器 (Optimizer) : 根据Parser产生的语法树,根据规则 (RBO - Rule Base Optimizer) 或者代价 (CBO - Cost Base Optimizer) 产生执行计划树。
-
执行器 (Executor) : 根据计划树进行执行,常见的执行方式是火山模型。
12.3.3 存储引擎
存储引擎负责了数据的底层存储、管理和访问工作。各大RDBMS存储引擎的设计都有不少的差异,这里选择MySQL的InnoDB存储引擎来向大家做一个介绍:
- Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销。
- Page:数据存储的最基本单位,一般为16KB。
- B+ Tree:InnoDB中最常用的索引结构。
12.3.4 事务引擎
事务引擎实现了数据库的ACID能力,这里还是以MySQL的InnoDB为例来介绍数据库内部是通过哪些技术来实现ACID:
-
Atomicity:InnoDB中通过undo日志实现了数据库的原子性,通过Undo Log,数据库可以回滚到事务开始的状态;
-
Isolation:通过Undo Log实现MVCC(多版本并发控制),降低读写冲突。
-
Durability:通过Redo Log(一种WAL实现方式)来保证事务在提交后一定能持久化到磁盘中。
-
Consistency:一致性本质上是一种业务层的限制。
12.4 企业实践
字节中是国内数据规模最大的互联网公司之一,公司内部有成千上万套RDBMS系统。这一章节还是以红包雨为案例,展示了字节是如何解决大流量、流量突增、高可靠等问题的。
12.4.1 大流量 - Sharding
12.4.2 流量突增 - 扩容
12.4.3 流量突增 - 代理连接池
12.4.4 稳定性&可靠性
3AZ高可用
HA管理