这是我参与「第四届青训营」笔记创作活动的的第1天
1.大数据中的SQL
整个大数据体系可以分为业务应用、数据开发、权限管控、分析引擎、资源调度、存储系统、基础设施七个方面。
数据库主要由三部分组成,分别是解析器、优化器和执行引擎。其中优化器是数据库中用于把关系表达式转换成执行计划的核心组件,很大程度上决定了一个系统的性能。
graph TD
SQLstament --> Parser
Parser --> Analyzer
Analyzer--> Optimizer
Optimizer --> ExecutionEngine
ExecutionEngine -->QueryResult
Parser
把文本变成抽象语法树结构(AST), 涉及词法分析阶段(拆分字符串,提取关键字,字符串,数值等)和语法分析阶段。
Analyzer
访问库\表元信息且绑定。SQL合法性检查。将AST转换成逻辑计划树 (Logical Plan)。逻辑计划树描述语句对应的分步骤计算操作。
小结
- SQL是一种声明式语言,数据库无法直接理解。
- 查询优化器是数据库的大脑,可以帮助它更好的处理数据。
- SQL越复杂,涉及的数据量就越大。不同执行方式可能会有极大差异的性能。查询优化所发挥的作用就更重要了。
2.查询优化器分类
查询优化器(Optimizer)分为两类:基于规则的优化器(Rule-Based Optimizer,RBO) 和基于代价的优化器(Cost-Based Optimizer,CBO) 。
RBO
根据优化规则(利用关系代数、等价变换等)对关系表达式进行转换,原有关系表达式经过优化规则后会变成另外一个关系表达式,同时原有表达式会被裁剪掉,经过一系列转换后生成最终的执行计划。
优化原则:
- 读取数据更少,更快 (I/O)
- 传输数据更少,更快 (Network)
- 处理数据更少,更快 (CPU/Memory)
优化方式:列剪裁、谓词下推、传递闭包等
优点:实现简单,优化速度快。
缺点:不一定能得到最优的执行计划。
CBO
根据优化规则对关系表达式进行转换,关系表达式经过优化规则后会生成另外一个关系表达式,保留原有表达式,经过系列转换后会生成多个执行计划,然后CBO会根据统计信息和代价模型(Cost Model)计算每个执行计划的Cost,从中挑选Cost最小的执行计划。统计信息的准确与否、代价模型的合理与否都会影响CBO选择最优计划。通常可以使用贪心算法或动态规划选出最优执行计划。
小结
CBO于RBO相比,CBO更胜一筹。RBO基于规则的优化,对处理数据敏感性差。实际工作过程中RBO所生成的执行计划有可能不是最优的。在大数据场景下CBO对查询性能的提升非常重要。
3.前沿趋势
- 引擎架构的进化:
- 存储计算分离
- 一体化
- 云原生 (k8s)
- serverless
- 根据需求提供计算节点,减少成本。
- 湖仓一体
- 结合数据湖和数据仓库。
- DATA+AI
- 人工智能和数据库的结合
- AI4DB
- DB4AI
总结
本节课程围绕SQL,首先梳理了大数据的整体体系结构,然后对分析引擎的部分进行了深入探讨。本节课的重点在于查询优化器,了解其分类,特性和工作原理。