关键技术
这是我参与「第五届青训营」伴学笔记创作活动的第十三天
1.1 一条SQL的一生
UPDATE account_table SET balance = balance - '小目标' WHERE name = '抖音';
1.2 SQL引擎
- Parser
- 解析器(Parser)一般分为词法解析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。
- 解析器(Parser)一般分为词法解析(Lexical analysis)、语法分析(Syntax analysis)、语义分析(Semantic analyzer)等步骤。
- Optimizer
- 基于规则的优化(RBO Rule Base Optimizer)
- 条件化简
- 表连接优化
- 总是小表先进行连接
- Scan优化(数据库索引:是数据库管理系统中辅助数据结构,一哦协助快速查询、更新数据表中数据。目前数据库中最常用的索引是通过B+树实现的。)
- 唯一索引
- 普通索引
- 全表扫描
- 基于代价的优化(CBO Cost Base Optimizer)
- 基于规则的优化(RBO Rule Base Optimizer)
- Excutor
- 火山模型
-
-
每个Opertor调用Next操作,访问下层Operator,并获得下层Operator返回的一行数据,经过计算之后,将这行数据返回给上层。
-
优点:每个算子独立抽象实现,相互之间没有耦合,逻辑结构简单
-
缺点:每计算一条数据有多次函数调用开销,导致CPU效率不高
-
- 向量化
- 每个Operator每次操作计算的不再是一行数据,而是一批数据(Batch N行数据),计算完成后向上层算子返回一个Batch
- 优点:
- 函数调用次数降低为1/N
- CPU cache命中率更高
- 可以利用CPU提供的SIMD机制
- 编译执行
- LLVM动态编译技术
- 火山模型
1.3 存储引擎
- InnoDB
- Buffer Pool
- Page
- B+ tree
1.4 事务引擎
- Atomicity 与 Undo Log
- undo log是逻辑日志,记录的是数据的增量变化。利用undo log 可以进行事务回滚,从而保证事务的原子性。同时也实现了多版本并发控制(MVCC),解决读写冲突和一致性的问题。
- Isolation与锁
- Isolation与MVCC
- MVCC的意义
- 读写互不阻塞
- 降低死锁概率
- 实现一致性读
- Undo Log在MVCC的作用
- 每个事务有一个单增德事务ID
- 数据页的行记录中包含DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR
- DB_ROLL_PTR将数据行的所有快照记录都通过链表的结构串联了起来
- MVCC的意义
- Durability与Redo Log
- WAL(Write-ahead logging)
- redo log是物理日志,记录的是页面的变化,它的作用是保证事务持久化。如果数据写入磁盘前发生故障,重启MySQL后会根据redo log重做。
- WAL(Write-ahead logging)