这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
关系型数据库的关键技术
- SQL引擎
- 存储引擎
- 事务引擎
SQL引擎
当一条SQL语句到达RDBMS后,将如下图所示执行:
可以看到在RDBMS中,SQL语句先后由 Parser 解析生成语法树,交由 Optimizer 优化生成计划树,最终由 Executor 执行。
- Parser 解析器:经过词法分析、语法分析生成语法树,然后对语法树进行合法性校验。
- Optimizer 优化器:根据Parser产生的语法树,根据规则或者代价产生执行计划树。
- Executor 执行器:根据计划树进行执行,常见的执行方式是火山模型。
Parser 解析器
在 Parser 中词法分析、语法分析、语义分析的流程
Optimizer 优化器
查询优化器方法有两类,基于规则的优化RBO 和 基于代价的优化CBO Rule/Cost Base Optimizer
RBO - 基于规则优化,通过关系代数的等价语义重写查询语句
- 条件简化 - 将复杂语句简化
- 表连接简化 - 总是小表先进行连接
- Scan优化 - 对索引的选择优化,在唯一索引、普通索引、全表扫描中选择效率最高的方式
CBO - 基于开销优化,考虑时间、IO、CPU、NET、MEN等资源
Execuot 执行器
火山引擎
执行流程:对于每个 Operator 调用Next操作,访问下一层的 Operator,获取下一层返回的结果,再执行计算,将该层的结果向上返回
优点:每次的计算独立、没有耦合,逻辑简单清晰
缺点:每次计算有多次函数调用开销,CPU效率不高
向量化模型
执行流程:每次操作计算一批数据(Batch N行数据),计算完成后向上返回Batch
优点:将函数调用次数降低至 1/N ,CPU cache命中率更高,可以利用CPU的SIMD机制
SIMD(单指令多数据流):一条指令同时处理多个数据
编译执行模型
将所有操作封装到一个函数中,降低函数调用的代价。
需要通过LLVM动态编译执行技术
存储引擎
InnoDB是最为常见的存储引擎,通过InnoDB来了解存储引擎的特点
分为两个部分 In-Memory 和 On-Disk,内存和磁盘两个部分
- In-Memory - 在内存中做数据缓存减小IO开销
- On-Disk - 存储系统表、事务日志表