这是我参与「第四届青训营 」笔记创作活动的的第1天
前言
第一节课有四个部分,分别是:
- 大数据体系和 SQL;
- 常见的查询优化器;
- 查询优化器的社区开源实践;
- SQL 相关的前沿趋势
但是,内容过于深奥,先入个坑吧,因此本篇博客是篇基础知识扫盲文,在课程的四个部分框架下,填补自己不懂的知识。
大数据体系和 SQL
大数据体系中的名词解释
左边一栏:大数据划分
中间一栏:大数据常用的细分
右边一栏:运维管理组件,更好利用大数据
K8S:容器协调器,一般管理Dockers?
下面三个都是交互性分析:
Presto:大数据分布式 SQL 查询引擎
ClickHourse:一个列式存储的数据库(DBMS),在线分析处理查询,其针对的场景是OLAP,流批一体,未基于Hadoop
Doris:一个基于MPP架构的高性能、实时的分析型数据库
Apache Ranger:一个跨 Hadoop 平台启用、监控和管理综合数据安全性的框架
大数据中的SQL
- Q:为什么选择SQL?
- A:简单
One SQL rules big data all
基本上所有的分析引擎都支持了SQL的api
SQL流程
这一步就是将SQL语言转换为分析引擎认识的语言,更多内容在编译原理有所介绍。
Paeser:将字符串转换为AST(抽象语法树),包括词法分析和语法分析
Analyzer:检查分析合法性,然后输出底层逻辑(Logical Plan)
- Plan Fragment:执行计划子树,目标:最小化网络数据传输,方式:利用数据上的物理分布(就近),和增加shuffle算子(以后再搞懂)
Optimizer:查询优化器,找到正确且执行代价最小的执行计划
Executor:执行物理计划,按照物理执行计划扫描和处理数据,充分利用机器资源(CPU 流水线,乱序执行,cache,SIMD)
常见Optimize
按照遍历树的顺序划分
-
Top-down Optimizer
-
Bottom-up Optimizer
按照优化的方法划分
-
Rule-based Optimizer,RBO,根据关系代数等价语义,重写查询;是基于启发式规则,会访问表的信息(catalog),不会涉及具体的表数据
-
Cost-based Optimizer,CBO,使用一个模型估算执行计划的代价,选择代价最小的执行计划
现在的优化器基本上会混着用,都有使用到
RBO
- 优化原则
- 优化IO:更快更少的读
- 优化网络:传输的数据更少更快
- 优化CPU和内存:处理的更少更快
优点:实现简单,优化速度快 缺点:不能保证得到最优的执行计划
列裁剪
基本思想:删除不会使用到的列
谓词下推
基本思想:尽早进行过滤,减少不必要开销
传递闭包
基本思想:根据等价代换,构造新的过滤条件
Runtime Fileter (更高级)
基本思想:在执行过程中,记忆化查询,减少不必要开销,加快速度 个人理解:感觉是在过程中及时更新条件,做一步优化一步,让下一步查询的范围缩小
CBO
先用一个模型估算执行计划的代价,然后选择代价最小的执行计划
类似于,DP问题,动态规划或贪心,最优解?
通过RBO得到(所有)肯的等价执行计划
在大数据场景下CBO对查询性能非常重要
社区开源数据库的Optimzer
Apache Calcite
统一的SQL查询引擎
模块化,插件化,稳定可靠
支持异构数据类型:关系型、半结构化、流式、地理空间数据
内置RBO和CBO
这块内容,暂时不深入学了,放几张图,用到的时候再来补充
RBO
CBO
Group winnner:目前的最优计划
剪枝:减少搜索空间
Top——down遍历:选择winner构建最优的执行计划
前沿趋势
总结
感觉很深奥,是未接触的领域,可能要进入企业之后,深入了解并学习使用,以后再填坑吧~