这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
关系型数据库(RDBMS)
一、RDBMS中的ACID
-
原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生
-
一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性
-
隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果
-
持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。
RDBMS的数据模型
二、一条SQL的一生
SQL引擎
Parser
parser,即解析器,先对SQL语句进行词法分析,然后进行语法分析,最后进行语义分析
Optimizer
根据Parser产生的语法树,根据规则或者代价产生执行计划树
一条sql语句有多个执行方案,CBO会选择其中代价最低(即时间最少)的方案去真正的执行
Executor
根据计划树进行执行,常见的执行方式是火山模型
Plan tree为基础,调用关系是从根到叶,数据关系是从叶到根
存储引擎 - InnoDB
Buffer Pool
存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销
每个chunk的大小一般为128M,每个block对应一个page,一个chunk下面有8192个block,这样可以避免内存碎片化,chunks又分成多个instance,可以避免并发冲突
页面置换算法,采用优化后的LRU算法
Page
数据存储的最基本单位,一般为16KB
B+ Tree
InnoDB中最常用的索引结构
页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录,即可快速找到指定的记录
事务引擎
Atomicity
InnoDB中通过undo日志实现了数据库的原子性,通过Undo Log,数据库可以回滚到事务开始的状态
需要记录数据修改前的状态,以便在事务失败时进行回滚
Isolation
通过Undo Log实现MVCC(多版本并发控制),降低读写冲突
Durability
通过Redo Log(一种WAL实现方式)来保证事务在提交后一定能持久化到磁盘中
Consistency
一致性本质上是一种业务层的限制