RDBMS详解

22 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

关系型数据库(RDBMS)

一、RDBMS中的ACID

  • 原子性(Atomicity):事务是一个不可再分割的工作单元,事务中的操作要么都发生,要么都不发生

    image-20230213203928627

  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性

    image-20230213203947929

  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果

    image-20230213204008591

  • 持久性(Durability):在事务完成以后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。

    image-20230213210319456

RDBMS的数据模型

image-20230213210550105

二、一条SQL的一生

image-20230213211033919

SQL引擎

Parser

parser,即解析器,先对SQL语句进行词法分析,然后进行语法分析,最后进行语义分析

image-20230213211525169

Optimizer

根据Parser产生的语法树,根据规则或者代价产生执行计划树

image-20230213212326462

一条sql语句有多个执行方案,CBO会选择其中代价最低(即时间最少)的方案去真正的执行

Executor

根据计划树进行执行,常见的执行方式是火山模型

image-20230213212808660

Plan tree为基础,调用关系是从根到叶,数据关系是从叶到根

存储引擎 - InnoDB

image-20230213213256762

Buffer Pool

存储引擎位于内存中的重要结构,用于缓存数据,减少磁盘IO的开销

image-20230213213429360

每个chunk的大小一般为128M,每个block对应一个page,一个chunk下面有8192个block,这样可以避免内存碎片化,chunks又分成多个instance,可以避免并发冲突

页面置换算法,采用优化后的LRU算法

Page

数据存储的最基本单位,一般为16KB

image-20230213214350982

B+ Tree

InnoDB中最常用的索引结构

image-20230213214612154

页目录中使用二分法快速定位到对应的槽,然后再遍历该槽对应分组中的记录,即可快速找到指定的记录

事务引擎

Atomicity

InnoDB中通过undo日志实现了数据库的原子性,通过Undo Log,数据库可以回滚到事务开始的状态

image-20230213214951797

需要记录数据修改前的状态,以便在事务失败时进行回滚

Isolation

通过Undo Log实现MVCC(多版本并发控制),降低读写冲突

image-20230213215223615

Durability

通过Redo Log(一种WAL实现方式)来保证事务在提交后一定能持久化到磁盘中

image-20230213215334325

Consistency

一致性本质上是一种业务层的限制

三、总结