OceanBase 从0到1数据库内核实战教程学习笔记
本篇文章主要介绍一些通用的 SQL 引擎技术,文章中以通用性为主,辅助以很多 OB 的实现方式,希望通过今天的内容让大家对 SQL 层有一个清晰的理解。
下面我们先看一下 SQL 层整体架构,下图左边是 MySQL 在 SQL 层的处理模块,右边是 OB 的 SQL 层处理模块: 一条 SQL 语句的常见结构如下,分别在图上给大家标注了一下每一段语法的执行顺序。 接下来我们看一下一条 SQL 是如何通过 SQL 层一层层解析的呢?
Parser Parser 根据预定义的语法规则,来解析判断 SQL 是否符合语法结构;使用的是 Flex 和 Bison 生成的。Parser 解析出来的逻辑结构就是类似于下图的树状结构。 Resolver Resolver 部分主要是对前面 Parser 生成的语法树进行进一步的检查: 在 OB 中, Resolver 可以表示为如下,这个在每一种数据库中的工程实现都是不一样的,OB 中我们称之为 OceanBase Statement: Transformer & Optimizer 这两部分一起构成了优化器。 优化的操作如下图,经过优化器优化的过滤下推就可以将连接的数据集减少,连接项也会减少; 在 OB 里面,包含以下优化元素。这些内容在后面的下篇中会详细介绍。 Executor Exector 中最典型的模型是 火山模型。在火山模型中,也存在很多变通的提速方式,比如:操作符融合、拉取模型和推送模型等等。 Plan Cache OB 提供了一种 Fast Parser 机制,可以对查询进行快速参数替换,然后配合 Plan Cache 进行快速查询优化,这样可以避免很多硬解析操作,提高特定场景下的查询速度。
今天的内容大概就这些~