青训营第一课SQL Optimiter|青训营笔记

254 阅读8分钟

这是我参与「第四届青训营 」笔记创作活动的的第1天

预习部分

市场上云厂商:火山引擎,阿里云,腾讯云,华为云,Google Cloud,Microsoft Azure
常见的查询优化器

  • Top-down Optimizer
  • Bottom-up Optimizer
  • Rule-based Optimizer,RBO
  • Cost-based Optimizer,CBO
    • 贪心算法
    • 动态规划

查询优化器的社区开源实践

  • Apache Calcite

  • Orca

  • Volcano/Cascade 框架 SQL 相关的前沿趋势

  • 存储计算分离

  • HSAP, HTAP, HTSAP

  • 数据仓库,数据湖,湖仓一体,联邦查询

课前文章阅读

一.解读数据架构的2021:大数据1.0体系基本建成,但头上仍有几朵乌云_架构_关涛 Tony_InfoQ精选文章 记:(1)大数据平台可以认为已经开始进入复兴期和普惠期。
(2)整个大数据领域里有非常多不同的引擎设计。整个引擎的架构,可以分成三种体系:Shared-Nothing(MPP)、Shared-Data、Shared-Everything。
(3)湖仓一体化(数据湖存储的是文件,数据仓库存储的是表)

795726acc6566d145b361fbbabfcfba3.webp (4)通过拼接不同引擎来搭建自己的计算平台: Spark 做批处理、Flink 做流处理、Clickhouse 做交互分析,这是最简单的一套。再复杂一点,可能还要部署 HBase 做 KV 查询,用 ElasticSearch 做文本检索。 (5)面向未来,新一代数据平台系统需要形成一个从离线到实时的全频谱计算能力,并在 Data Freshness、Resource Costs 和 Query Performance 的不可能三角里边给用户提供多种不同平衡的选择。

二.面向未来的HTSAP一体化数据平台该是什么样子?_文化 & 方法_张翔_InfoQ精选文章
记: (1)TP,AP,Serving

f77e93dec4b0db5cf59f8dcacdfc3cdd.webp

162859259f5bdfeb5b2ecab60e97f5bf.webp

c0bb39a49c61b6793dd6c7289d17e6ee.webp (2)HTAP,HSAP,HTSAP
HTAP 是面向 TP 和 AP 混合场景的负载而设计的系统。一份数据上同时支撑业务系统运行和 OLAP 场景(代表TiDB)

02e7265f43a76f085455bebc9fe5b772.webp

HSAP 是面向 Serving 和 AP 场景混合设计的系统.(代表Hologres)

6a46cc496b3cb8b7df62d7a91404244d.webp HTSAP 是同时支撑好 TP、AP 和 Serving 工作负载的 HTSAP 系统

18f1460aa1967419b81efb4188c587ba.webp (3)随着 TiDB 的高速演进,以及配合着同样快速进步的 Flink,我们最终能够得到一个能够良好支撑 TP、AP 和 Serving 业务的开放的 One Database 平台。

三.云原生数据库设计新思路

记:(1)分布式数据库的发展历程
第一代是基于简单的分库分表或者中间件来做 Data Sharding 和 水平扩展。
第二代系统是Cassandra、HBase 或者 MongoDB 为代表的 NoSQL 数据库,一般多为互联网公司在使用,拥有很好的水平扩展能力。
第三代系统我个人认为是以 Google Spanner 和 AWS Aurora 为代表的新一代云数据库,他们的特点是融合了 SQL 和 NoSQL 的扩展能力,对业务层暴露了 SQL 的接口,在使用上可以做到水平的扩展。
第四代系统是以现在 TiDB 的设计为例,开始进入到混合业务负载的时代,一套系统拥有既能做交易也能处理高并发事务的特性,同时又能结合一些数据仓库或者分析型数据库的能力,所以叫 HTAP,就是融合型的数据库产品。

(2)NoSQL
NoSQL 的特点就是放弃到了高级的 SQL 能力,但是有得必有失,或者说放弃掉了东西总能换来一些东西,NoSQL 换来的是一个对业务透明的、强的水平扩展能力,但反过来就意味着你的业务原来是基于 SQL 去写的话,可能会带来比较大的改造成本。
HBase 是 Hadoop 生态下的比较有名的分布式 NoSQL 数据库,它是构建在 HDFS 之上的一个 NoSQL 数据库。Cassandra 是一个分布式的 KV 数据库,其特点是在 KV 操作上提供多种一致性模型,缺点与很多 NoSQL 的问题一样,包括运维的复杂性, KV 的接口对于原有业务改造的要求等。

(3)NewSQL(诞生出了两个流派,一个是 Spanner,一个是 Aurora)
Shared Nothing 这个流派是以 Google Spanner 为代表,好处是在于可以做到几乎无限的水平扩展,整个系统没有端点,不管是 1 个 T、10 个 T 或者 100 个 T,业务层基本上不用担心扩展能力。第二个好处是他的设计目标是提供强 SQL 的支持,不需要指定分片规则、分片策略,系统会自动的帮你做扩展。第三是支持像单机数据库一样的强一致的事务,可以用来支持金融级别的业务。代表产品就是 Spanner 与 TiDB。
第二种流派就是 Shared Everything 流派,代表有 AWS Aurora、阿里云的 PolarDB。Aurora 作为一种在云上 Share Everything Database 的代表,Aurora 的设计思路是把整个 IO 的 flow 只通过 redo log 的形式来做复制,而不是通过整个 IO 链路打到最后 Binlog,再发到另外一台机器上,然后再 apply 这个 Binlog,所以 Aurora 的 IO 链路减少很多,这是一个很大的创新。

(4)HTAP
(5)Snowflake 是一个 100% 构建在云上的数据仓库系统,底层的存储依赖 S3,基本上每个公有云都会提供类似 S3 这样的对象存储服务,Snowflake 也是一个纯粹的计算与存储分离的架构,在系统里面定义的计算节点叫 Virtual Warehouse,可以认为就是一个个 EC2 单元,本地的缓存有日志盘,Snowflake 的主要数据存在 S3 上,本地的计算节点是在公有云的虚机上。

课堂内容

  • 大数据体系

屏幕截图 2022-07-24 172915.png

  • SQL处理过程 屏幕截图 2022-07-24 173056.png (1)parser:将文本转化成AST

屏幕截图 2022-07-24 173612.png (2)analyzer:对AST做绑定和检查,并画出逻辑树

image.png
(3)optimiter:根据逻辑树画出执行计划子树,优化数据传输

image.png
(4)Executor:执行
单机并行:cache,pipeline,SIMD 多机并行:一个Fragments对应多个实例

  • 关系代数

屏幕截图 2022-07-24 103005.png

  • 查询优化器分类 Top-down Optimizer
    Bottom-up Optimizer
    Rule-based Optimizer,RBO
    Cost-based Optimizer,CBO\

  • RBO的优化原则(铺路)

    • 列裁剪
    • 谓语下推
    • 传递闭包
    • Rumtime Filter
  • CBO(找出最短的路)

屏幕截图 2022-07-24 181359.png

屏幕截图 2022-07-24 181728.png

屏幕截图 2022-07-24 181821.png

屏幕截图 2022-07-24 182234.png

屏幕截图 2022-07-24 182129.png

  • 社区开源实践

概览 image.png

  • Apache Calcite
    • HepPlanner
    • VolcanoPlanner
      • 应用rule搜索候选计划
      • Memo
      • Group
      • 剪枝
      • 动态规划
      • Top-down遍历

image.png

  • 前沿趋势

image.png

总结

昨天到今天的学习还是让我收获很多的,首先最让我印象深刻的是HTSAP那一部分的学习,让我认识到有这么牛的东西在发展,原来的我对这些东西一无所知。其次呢,通过今天的学习我初步知道了SQL是个什么东西,他是怎么运作的,包括对里面的RBO,CBO知道是怎么回事,明白了他们的功能和作用。期待接下来的学习,希望能优秀的完成大项目,加油吧!!!

课后学习

  • 联邦学习,联邦查询
    联邦机器学习(Federated machine learning/Federated Learning),又名联邦学习,联合学习,联盟学习。联邦机器学习是一个机器学习框架,能有效帮助多个机构在满足用户隐私保护、数据安全和政府法规的要求下,进行数据使用和机器学习建模。联邦学习作为分布式的机器学习范式,可以有效解决数据孤岛问题,让参与方在不共享数据的基础上联合建模,能从技术上打破数据孤岛,实现AI协作。
    联邦学习有三大构成要素:数据源、联邦学习系统、用户。
    联邦学习可以被分为三类:横向联邦学习、纵向联邦学习、联邦迁移学习。

  • 哈希表
    给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

t013fb226703a8f0755.jpg

  • 贪心算法
    贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。

课后作业

  1. Top-down 和 Bottom-up 的优化方式各有什么优缺点?
    top-down是由目的开始,推到达到目的的方法与其细节。而bottom-up则是由要采取、或是能采取的行动开始思考,最后看这些行动是否能达到目的。 Top-down优化能搞清楚目的与框架,在视野上俯瞰,但可能会对每一个SCAN做不到那么清楚;bottom-up优化则是通常先把要做的事情一个个列出来后,才思考这和原本的目的有什么关系,这种方式对整个逻辑树会有较为细致的遍历,但这个工作量会比较多,比较大,运行负荷大。
  1. Aggregate 和 Join 上面的 Filter 下推需要注意什么?什么类型的谓词才能下推倒 Aggregate 和 Join 算子的下面?
  1. Runtime Filter 在什么情况下会造成性能回退?
  1. 了解一下 Spark 系统中 Join Cardinality 的估算方式
  1. 了解一下 Aggregate cardinality/NDV 的估算方式
  1. 了解直方图在统计信息估计中的作用
  1. RBO 里几种 pattern 匹配规则(ARBITRARY,DEPTH_FIRST,TOP_DOWN,BOTTOM_UP)有什么优缺点?
  1. RBO 直到没有可以匹配的 rule 才结束在 serving 场景(在线服务场景)可能会有什么问题?(考虑 rule 很多的情况)除了这种结束方式,还有什么其他结束方式?
  1. CBO 里 Branch-and-bound pruning 可以以 bottom-up 的方式进行吗?