这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天,参与青训营的第29天。今天主要学习了RDBMS相关的知识。
01、经典案例
红包雨
RDBMS
- 事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性。
事物具有(ACID):
- Atomicity, 事务内的操作要么全做,要么不做
- Consistency, 事务执行前后,数据状态是一致的
- Isolation, 可以隔离多个并发事务,避免影响
- Durability,事务一旦提交成功,数据保证持久性
高并发
高可靠/高可用
02、发展历史
人工管理
文件系统
DBMS
网状模型
层次模型
关系模型
SQL(Structured Query Language)语言
- 语法风格接近自然语言
- 高度非或称话
- 面向集合的操作方式
- 语言简洁、易学易用
03、关键技术
SQL语句的一生
SQL引擎-Parser
解析器(Parser)一般分为分析(Lexical anslysis),语法分析(Syntax anslysis),语义分析(Semantic analyzer)等步骤
SQL引擎-Optimizer
基于规则的优化(RBO Rule Base Optimizer)
Scan优化
- 唯一索引
- 普通索引
- 全表扫描
数据库索引:是数据库管理系统中辅助数据结构,以协助快速查询,更新数据库表中数据。目前数据库中最常用的索引是通过B+树实现的。
SQL引擎-Executor
火山模型
优点:
每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单;
缺点:
每计算一条数据有多次函数调用开销,导致CPU效率不高
向量化 ; 编译执行 LLVM动态编译技术
存储引擎-InnoDB
存储引擎-Buffer Pool
MySQL中的优化思路为:对数据进行冷热分离,将LRU链表分成两部分,一部分用来存放冷数据,即刚从磁盘读进来的数据,另一部分用来存放热点数据,即进场被访问到的数据。
存储引擎-Page
存储引擎-B+ Tree
页面内:
页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录即可快速找到指定的记录。
从根到叶:
中间节点存储
事务引擎-Atomicity与Undo Log
Undo Log是逻辑日志,记录的是数据的增量变化,利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC),解决读写冲突和一致性读的问题。
事务引擎-Isolation与锁
MVCC(Mutil Version Concurrency Control)的意义:
- 读写互不阻塞
- 降低死锁概率
- 实现一致性读
Undo Log在MVCC的作用
- 每个事务有一个单增的事务ID
- 数据页的行记录中包括了DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR;
- DB_ROLL_PTR将数据行的所有快照记录都通过链表的数据结构串联了起来。
事务引擎-Durability与Redo Log
保证事务结束后对数据修改永久的保存:
方案一:事务提交前页面写盘
方案二:WAL(Write-ahead logging)
redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。
04、企业实践
春节红包雨挑战
大流量-Sharding
扩容
代理连接池
稳定性&可靠性:
3AZ高可用 、 HA管理
今日总结
今天学习了RDBMS的整个历史、框架、和企业实践的相关分析。详细学习了关系型数据库MySQL的关键技术,其能快速查询事务,存储事务,并且能保证事务的ACID性质,可以比较好得应对红包雨这样的业务需求,对大流量需求进行稳定性和可靠性的技术支持,并且在活动结束后实现扩缩容保证服务始终能够应对需求又能保证服务成本。