深入理解RDBMS | 青训营笔记

91 阅读2分钟

深入理解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重做。