这是我参与「第五届青训营 」伴学笔记创作活动的第 15 天
1.主要内容
- 经典案例
- RDBMS发展历史
- RDBMS的关键技术
2.本节详细内容
经典案例
抖音红包雨
- 四种情况引出事务ACID特性
- 高并发请求
- 高可用
ACID
-
原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生。
-
一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
-
隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
-
持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
RDBMS发展历史
-
RDBMS 经历了 :人工管理 - 文件系统 - DBMS时代
-
DBMS:按照某种数据模型来组织、存储和管理数据的仓库
-
根据数据模型的特点将传统数据库分为 网状数据库、层次数据库、关系型数据库三种
网状模型
网状数据库所基于的网状数据模型建立数据之间的联系,能反映现实中信息二点关联,是许多空间对象的自然表达形式。
- 网状模型:用有向图表示实体和实体之间的联系的数据结构模型称为网状数据模型
- 是以记录模型为结点的网格结构,两个结点之间可以有多种联系
- 两个记录类型之间的值可以是多对多的联系
层次模型
世界上第一个层次数据库,也是世界上第一个大型商用的数据库系统,IMS
- 层次模型:层次数据模型是用树状层次结构来组织数据的数据模型
- 有且仅有一个根节点,其余结点为非根
- 每个结点表示一个记录类型对应与实体的概念
- 各个记录类型及其字段都必须记录
关系模型
IBM的研究员发表,Oracle首次商业化
- 关系模型:使用表格表示实体和实体之间关系的数据模型称之为关系数据模型
- 实体和实体之间的联系被映射为一张表
- 操作对象和结果都是一张表
三者优劣
SQL语言
- 接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁、易学易用
关键技术
SQL执行流程
在SQL执行过程中,需要经历SQL引擎、存储引擎、以及事务引擎等模块
SQL引擎
-
Paser(解析器):经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。
-
Optimizer(优化器):根据Parser产生的语法树,根据规则或者代价产生执行计划树。
- 条件化简
- 表连接优化:总是小表进行连接
- Scan优化:索引
-
Executor(执行器):根据计划树进行执行,常见的执行方式是火山模型
InnoDB存储引擎
各大RDBMS存储引擎的设计都有不小的差异
- Buffer Pool:存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销
- Page:数据存储的最基本单位,一般为16KB
- B+ Tree:InnoDB中最常用的索引结构
事务引擎
undo log(Atomicity)
- 逻辑日志,记录数据的增量变化,保证事务的原子性和事务的并发控制,可以用于事务回滚
- 提供多版本机制(MVCC),解决读写冲突和一致性读的问题
- 通过Undo Log,数据库可以回滚到事务开始的状态
业务层限制(Consistency)
一致性本质上是一种业务层的限制
MVCC、锁(Isolation)
- 多个并发事务访问同一个记录,使用锁来保证,防止多个事务并发执行时由于交叉执行导致的数据不一致
- 通过Undo Log实现MVCC(多版本并发控制),降低读写冲突
- MVCC意义
- 读写互不阻塞
- 降低死锁频率
- 实现一致性读
Redo Log(Durability)
- 通过Redo Log(一种WAL实现方式)来保证事务在提交后一定能持久化到磁盘中
- 物理日志,记录页面变化,保证事务持久化,如果数据写入前发生故障,重启MySQL后会根据redo log重做
3.企业实践
春节红包雨
大流量
- 业务水平拆分
- 代理层进行分片路由
流量突增
- 扩容DB物理节点数量
- 利用影子表进行压测
- 业务侧预热连接池
- 代理侧预热连接池
- 代理侧支持连接队列
稳定性&可靠性
- 3AZ高可用
- HA管理
4.课后总结
- RDBMS是重要组件,必须深入了解
- MySQL日常常用
- 事务是重点,熟知索引和锁
5.引用
字节内部课:深入理解RDBMS
稀土掘金-后端学习资料