这是我参与「第四届青训营 」笔记创作活动的的第2天
一、本堂课重点内容
二、详细知识点介绍
1、大数据体系
大数据体系中,最为核心的部分就是分析引擎,主要包含批式分析、实时分析和交互分析三个部分。其中,批式分析包括Spark、Hive和MapReduce,实时分析包括Flink,交互分析包括Presto、ClickHouse和Doris。
2、SQL为什么这么重要?
- 有连接JDBC和ODBC的标准接口;
- 方便数据科学家和数据分析师获取想要分析的数据,不需要通过编程语言获取数据。
3、SQL是如何被执行的?
- Parser:解析SQL语句,将文本转化为抽象语法树AST;
- Analyzer:判断SQL语句是否合理(比如数据库是否存在、表和列名是否存在、列的数据类型是否正确等),并将AST转换成逻辑计划树;
- Optimizer(尤为关键):对SQL进行查询优化,分为RBO和CBO两种优化方式;
- Executor:按照Optimizer输出的物理执行计划实际执行SQL,充分利用机器资源。
4、常见的查询优化器
- Rule-based Optimizer (RBO)
- 根据关系代数等价语义,重写查询(本质上就是根据事先定好的规则,匹配符合条件的子树,然后对子树进行替换);
- 基于启发式规则;
- 会访问表的元信息,不会涉及具体的表数据。
- Cost-based Optimizer (CBO)
- 使用一个模型估算执行计划的代价,选择代价最小的执行计划;
- 具体步骤为:统计信息+推导规则计算算子代价计算执行计划代价执行计划枚举。
5、查询优化器开源实践
Calcite项目链接:🔗Apache Calcite • Dynamic data management framework, 该项目既支持RBO,又支持CBO。其中,RBO对应的实现为HepPlanner,可以使用内置的100多种优化规则,其优点是优化速度快,实现简单,但是不保证最优。CBO对应的实现为VolcanoPlanner,最核心的部分是Memo,本质上是一个AND/OR Graph,通过共享相同的子树减少内存开销,用来记录搜索过的子树的最优执行计划。
6、相关前沿趋势
- 存储计算分离
- HSAP, HTAP, HTSAP
- Cloud Native, Serverless
- 数据仓库,数据湖,湖仓一体,联邦查询
- 智能化
- AI4DB:简单来说,就是通过机器学习算法和深度学习算法,优化SQL的执行效率;
- DB4AI:让数据库更好地支持人工智能算法应用。
7、课后个人总结
本节课主要讲解了有关SQL Optimizer的相关知识和前沿趋势,本堂课的核心知识点就是SQL Optimizer的两个主要优化方向,分别是RBO和CBO。RBO的实现较为简单,优化速度快,但是优化结果可能不是最优;CBO优化效果较好,但是比较依赖推导统计信息(选择率和基数)的精确程度,因此大多数的业界实现都是RBO和CBO相结合的方式。