这是我参与[第四届青训营]笔记创作活动的第一天。
一、大数据体系
二、SQL处理流程
1、为何SQL如此流行?
(1)有MYSQL、Oracle之类使用SQL作为交互语言的数据库。 (2)有JDBC、ODBC之类和各种数据库交互的标准接口。 (3)有大量不会使用编程语言但又要使用数据库的人。 (4)分析引擎中有相应的SQL接口。
2、SQL的一生
(1)parser
1)把文本变成抽象语法树结构AST。2)涉及词法、语法分析阶段。3)和编译中前端相关。4)实现:递归下降等。
(2)Analyzer
1)访问库、表元信息并绑定。2)判断SQL是否合理。3)将AST转换成逻辑成AST。
(3)Logical Plan逻辑执行计划
(4)Optimizer 查询优化
1)目标:找到一个正确且执行代价最小的物理执行计划。
2)为什么优化?
因为SQL语句只描述做什么,却没告诉数据库该怎么做。查询优化在大数据中应用广泛。
(5)Physical Plan物理执行计划
1)Plan Fragment:执行计划子树。
2)目标:在小化网络数据传输。
3)增加shuffle算子。
(6)Excutor---单机并行和多机并行
三、常见查询优化器
(1)TOP-down Optimizer:从目标输出开始,由上往下遍历计划树找到最完整的最优执行计划。 Bottom-up Optimizer:从零开始,由下往上遍历计划执行树找到完整的最优执行计划。
(2)⭐Rule-based Optimizer(RBO):基于规则的,根据关系代数等价语义,重写查询。会访问表的元信息,不会涉及具体的表数据。Cost-based Optimizer(CBO):基于代价的,使用一个模型估算执行的代价,选择代价最小的执行计划。
1、RBO
(1)优化规则
列裁剪、谓词下推、传递闭包、Runtime Filter等。
(2)优化原则
I/O、NetWork、CPU&Memory。
(3)优点
实现简单、优化速度快。
(4)缺点
1)因为是基于计划的,所以不能保证得到最优的执行计划。2)多表连接,不知道那种顺序最优。3)不知道用哪种小表构建哈希表等。
2、CBO
(1)执行计划代价=所有算子执行代价之和。
通过RBO得到所有可能的等价执行计划。
(2)算子代价
1)算子代价是CPU、内存、磁盘I/O、网络I/O等代价。
2)算子代价和具体算子类型、以及算子的物理实现有关。
3)叶子算法:通过统计原始表数据得到。
4)中间算子:根据一定的推导规则,从下层算子的统计信息推导得到。
(3)公式
1)其中计算算子代价和计算执行计划代价,选择不同公式不同。
2)统计信息
- 原始表统计信息:
表、分区级别:行、行平均大小、表在磁盘中占用多少字节等。
列级别:min、max、num nulls(表空个数)、histogram(直方图)等。
- 推导统计信息
选择率:对于某一个过滤条件,查询会从表中返回多大比例的数据。
基数:查询中常值算子需要处理的行数。(准确的基数,远比代价模型本身重要)
- 收集方式
在DDL里指定需要收集的统计信息,数据库会在数据写入时收集、更新统计信息。
手动执行,触发数据库收集、更新统计信息。
动态采样。
(4)统计信息推导规则
- filter selectivity运算法则
- 考虑中国人口数据库、性别、年龄都不是均匀分布,用直方图。
(5)执行计划枚举
1)解决在RBO缺点。2)通常使用贪心算法、动态规划选出最优执行计划。
(6)CBO效果
1)开启CBO:减少数据量,提升速度比。
2)关闭CBO:shuffle数据量太大,执行效率差。
四、社区开源实现--Apache calcite概览
(1)优点
1)统一的SQL查询引擎。2)模块化、插件化、稳定可靠。3)支持异构数据模型:关系型,半结构化、流式等。4)内置RBO、CBO。
(2)Calcite RBO
- Hep Planner
1)优化规则:1、pattern--匹配表达式子树。2、等价变化--得到新表达式。
2)匹配规则:深度优点、拓扑顺序等。
(3)Calcite CBO
- Volcano Planner
1)基于Volcano/Cascade框架
2)Memo(搜索的空间是一个关系代数子树所组成的森林,保存这个森林的数据结构):存储候选执行计划--本质(AND/OR graph)
3)Group:等价计划集合
4)TOP-down:动态规划搜索,找最优计划。
(4)前沿趋势
- HTAP:事务型+分析型数据查询。
- HSAP:分析型查询。
- HTSAP:分析型+线上查询。
- serveless:根据流量对数据流控。
- 湖仓一体:湖、仓都是数据不规则的,湖仓一体把其优点结合。
(1) DATA+AI
1)AI4D8
- 自配置:智能调参、负载预测/调度。
- 自诊断和自愈合:错误恢复和迁徙。
- 自优化:统计信息估计、代价估计、学习型优化器、索引
2)DB4AI
- 内嵌人工智能算法。
- 内嵌机器学习框架。