这是我参与「第三届青训营 -后端场」笔记创作活动的的第4篇笔记
RDBMS
事务 ACID
事务(Transaction):是由一组SQL语句组成的一个程序执行单元(Unit),它需要满足ACID特性
ACID:
- 原子性(Atomicity):事务是一个不可在分割的工作单元,事务中的操作要么都发生,要么都不发生。
- 一致性(Consistency):数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
- 隔离性(Isolation):多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行效果
- 持久性(Durability):在事务完成之后,该事务所对数据库所作的更改持久的保存在数据库之中,并不会被回滚。
RDBMS发展历史
人工管理
文件系统
数据管理直接通过文件系统来实现
DBMS时代
数据库管理系统:按照某种数据模型来组织、存储和管理数据的仓库
- 网状模型
- 层次模型,即使用树形结构来描述实体及其之间关系的数据模型
- 关系模型
SQL语言
- 语法风格接近自然语言
- 高度非过程化
- 面向集合的操作方式
- 语言简洁,易学易用
关键技术
Parser
解析器一般分为词法分析、语法分析、语义分析等步骤
Optimizer
优化器
- 基于规则的优化(RBO Rule Base Optimizer)
- 基于代价的优化(CBO Cost Base Optimizer)
Exuecutor
火山模型
优点:
每个算子独立抽象实现,相互之间没有耦合,楼及结构简单
缺点:
每计算一条数据有多次函数调用开销,导致CPU效率不高
向量化
每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算计返回一个结果
编译执行:
将所有的操作封装到一个函数里面,函数调用的代价也能大幅度降低
Atomicity与Undo Log
Undo Log是逻辑日志,记录的是数据增量变化。利用Undo Log可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制,解决读写冲突和一致性读的问题
Isolation与锁
MVCC
- 读写互不阻塞
- 降低死锁概率
- 实现一致读写
Durability与Redo Log
方案一:事务提交前页面写盘(随机IO、写放大)
方案二:WAL(Write-ahead logging)
redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后根据redo log重做。