这是我参与「第三届青训营 -后端场」笔记创作活动的第1篇笔记
深入理解RDBMS
存储系统
块存储、文件存储、对象存储、key-value存储
数据库系统
关系型数据库、非关系型数据库
分布式架构
数据库分布策略、数据复制协议、分布式事务算法
传统数据库系统
- 网状数据库
- 层次数据库
- 关系数据库
事务(Transaction)
由一组SQL语句组成的一个程序执行单元(unit)
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
事务的并发问题
- 脏读
- 不可重复读
- 幻读
MySQL事务隔离级别
- 读未提交
- 不可重复读
- 可重复读
- 串行化
彻底搞懂 MySQL 事务的隔离级别-阿里云开发者社区 (aliyun.com)
SQL引擎
-
解析器(parser)
一般分为词法分析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤
-
优化器(Optimizer)
- 基于规则的优化——RBO
- 基于代价的优化——CBO
-
执行器(Executor)
存储引擎
-
InnoDB
-
Buffer Pool
MYSQL的优化思路就是:对数据进行冷热分离,将LRU链表分成两部分,一部分用来存故冷数据,也就是列从磁盘读进来的数据,另一部分用来存放热点数据,也就是经常被访问到数据 当从磁盘读段攻数据页后,会先将数们手存故到LRU特表冷数据区的头部,如果这些缓存页在1秒之后被访问,那公就将缓存页移动到热数裾区的头部;如果是1秒之内被破j访问,则不会移动,缓存页仍然处于冷数据风中,淘汰时,首先淘汰冷数据区。
-
Page
-
B+ Tree
事务引擎
-
Atomicity与Undo Log
- 原子性:一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执对行过程中发生错误,会被恢复(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。需要记录数据修改前的状态,—边在事务失败时进行回滚。
- Undo log是逻辑日志,记录的是数据的增量变化,它的作用是保证事务的原子性和事务并发控制。可以用于事务回滚,以及提供多版本机制(MVCC),解决读写冲突和一致性读的问题。
-
Isolation与锁
-
Isolation与MVCC
-
Durability与Redo log
-
持久化:事务处理结束后,对数据的修改就是永久的,即使系统故障也不会丢失。
-
WAL(Write-ahead logging)
Redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。
-