关系型数据库 | 青训营笔记

97 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记

RDBMS

事务 ACID

事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性

ACID:

  • 原子性(Atomicity):事务是一个不可在分割的工作单元,事务中的操作要么都发生,要么都不发生。
  • 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
  • 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行效果
  • 持久性(Durability):在事务完成之后,该事务所对数据库所作的更改持久的保存在数据库之中,并不会被回滚。

RDBMS发展历史

人工管理

文件系统

数据管理直接通过文件系统来实现

DBMS时代

数据库管理系统:按照某种数据模型来组织、存储和管理数据的仓库

  • 网状模型
  • 层次模型,即使用树形结构来描述实体及其之间关系的数据模型
  • 关系模型

image.png

SQL语言

  • 语法风格接近自然语言
  • 高度非过程化
  • 面向集合的操作方式
  • 语言简洁,易学易用

关键技术

Parser

解析器一般分为词法分析、语法分析、语义分析等步骤

Optimizer

优化器

  • 基于规则的优化(RBO Rule Base Optimizer)
  • 基于代价的优化(CBO Cost Base Optimizer)

Exuecutor

火山模型

image.png

优点:

每个算子独立抽象实现,相互之间没有耦合,楼及结构简单

缺点:

每计算一条数据有多次函数调用开销,导致CPU效率不高

向量化

image.png

每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算计返回一个结果

编译执行:

image.png

将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低

Atomicity与Undo Log

Undo Log是逻辑日志,记录的是数据增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制,解决读写冲突和一致性读的问题

Isolation与锁

MVCC

  • 读写互不阻塞
  • 降低死锁概率
  • 实现一致读写

Durability与Redo Log

方案一:事务提交前页面写盘(随机IO、写放大)

方案二:WAL(Write-ahead logging)

redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后根据redo log重做。