深入理解RDBMS | 青训营笔记
这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天 ✌
1. DBMS数据模型 -- 关系模型
- (1)实体之间的联系都通过二维表结构表示
- (2)便于表示多对多的M:N关系
- (3)数据访问路径对用户透明
- (4)通过表关联查询效率较低,且关系必须规范化
SQL(Structed Query Language):接近自然语言、非过程化、面向集合
2. DBMS关键技术
SQL执行: SQL --> Parser语法解析 --> AST查询树 --> 预处理器 --> 查询优化器 --> 查询执行引擎 --> 存储引擎API接口调用
SQL引擎:
-
Parser:解析器一般包括词法分析、语法分析、语义分析等步骤,将SQL语言转换为AST解析查询树,便于后续进行查询优化与执行。
-
Optimizer:优化器,基于规则设计(表连接、scan优化)的优化,基于代价(时间、资源代价)的优化
-
Executor: (1)火山模型执行(每个Operator调用Next操作,访问下层Operator,获得下层返回经过计算之后,再将这行数据返回给上层,算子独立抽象实现,相互之间没有耦合,但同时存在多次函数调用开销大的问题)
(2)编译执行:极力减少函数调用开销,所有的操作封装到一个函数里面(相关技术:LLVM动态编译执行)
存储引擎 -- InnoDB:
(1)内存存储:
- Buffer Pool:用于在磁盘和内存之间交换暂存数据,基于最近使用原则LRU调整内容
- Change Buffer
- Adaptive Hash Index
- Log Buffer
(2)磁盘存储:
- System Tablespace(ibdata1)
- General Tablespaces(xxxibd)
- Undo Tablespaces(xxx.ibu)
- Temporary Tablespaces(xxx.ibt)
- Redo Log(ib_logfileN)
(3)B+树索引
B+树索引优点:
- 索引节点没有数据,比较小,能够完全加载到内存中
- 叶子节点之间都是链表的结构,可以支持范围查询
- B+树中因为数据都在叶子节点,每次查询的时间复杂度是稳定的
B+树索引结构:
事务引擎:
-
Undo Log:逻辑日志,记录的是数据的增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制( MVCC )解决读写冲突和一致性读的问题。
-
Isolation与Lock:实现读写一致性,MVCC(MVCC是在并发访问数据库时,通过对数据进行多版本控制,避免因写锁而导致读操作的堵塞,从而很好的优化并发堵塞问题。
-
Durability与Redo Log:永久保存与重做,redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。