前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >列存数据库 Code Generation & Vectorized Model

列存数据库 Code Generation & Vectorized Model

原创
作者头像
jasong
发布2023-05-14 17:13:53
8630
发布2023-05-14 17:13:53
举报
文章被收录于专栏:ClickHouseClickHouse

Push Base Pull Base

Push Base Vs Pull Base
Push Base Vs Pull Base

1 Code Generation & Vectorized Model

很多同学认为,笔者之前也这么认为(才疏学浅)

1 Volcano Model 不能和 向量化兼容

2 Pull Base Model 不能和 向量化兼容

3 Code Generation 技术不能与 向量化兼容

4 向量化 只能和 PipeLine Mode 兼容

现在个人只是储备来看,向量化跟以上是都可以兼容的,所有引擎是可以简单都理解为是Valcano Model 的变种吧

数据库执行引擎演进
数据库执行引擎演进

2 SQL Engine 应该是 Push Engine 还是 Pull Engine 哪个好

列存 vs 行存

1 Batter Compresion Ratio

2 Mini IO (Projection Parttion Prunning 、Predicate Push Down/Filter)

之前的误解

1 个人之前的理解是 Push Engine 是最好的,因为是数据驱动的计算,目前个人理解来看现在的数据库两者都可,没有太大对错

2 之前的理解为必须实现Push Engine 才能实现深度得向量化引擎,目前个人理解就是 不冲突

Row at a Time to Vector at a time
Row at a Time to Vector at a time

3 个人总结

1 Push Base Engine == Pipeline Engine

2 Pull Base Engine == Valcano Model 升级吧 这里不是完全正确(我理解目前没有完全好的一个名字替代它 可以叫 Spark SQL Engine)

两级分化,因为Code Generation 和 Vetorized Model 的使用偏重,出现了组合拳,但是很多人理解他们水火不融,个人理解可以为

1 PipeLine Engine == Vectorized Model (主) + Code Generation Model (辅)

2 Spark Engine = Code Generation Model(主) + Vetorizied Model (辅)

PipeLine Engine 是向量化驱动,CodeGen 优化虚函数, Spark Engine 是 CodeGen 驱动, 向量化跟进, 都有向量化的能力,都有Code Genration 的能力

准确应该叫

Spark = Whole-Stage Code Generation + Vectorization

ClickHouse = Vectorization + Runtime Code Generation

4 一句话分别概括

Vectorized Model:解决复杂的数据处理逻辑(Function)

Code Generation: 解决简单的上下文切换 (数据装箱、虚函数 多态)

Whole-Stage Code Generation: SQL语句编译后的operator-tree中,每个operator执行时就不是自己来执行逻辑了,而是通过whole-stage code generation技术,动态生成代码

Runtime Code Generation: ClickHouse实现了Expression级别的runtime codegen

5 同宗数据库

PipeLine : ClickHouse 为主 、DuckDB、TiFlash 向量化(不过其加入了MPP)、DataBend、StarRocks 新版、Doris 新版

Valcano Model: Impala 、TiDB、StarRocks 旧版、Doris 旧版、PG、Spark

位置: ADB .... 、Snowflake、DataBricks、Velox

欢迎批评指正

学习来源

https://www.youtube.com/watch?v=FrspnYbFSxQ

https://www.bilibili.com/video/BV1ed4y1d7DR/?spm_id_from=333.788&vd_source=868cb9f482f5dcef86edeeddc5cab9e3

https://www.slideshare.net/databricks/vectorized-query-execution-in-apache-spark-at-facebook

https://hyperj.net/note.sql-engine/special/columnar-and-vectorization/

https://juejin.cn/post/7103061067743363085

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Code Generation & Vectorized Model
  • 2 SQL Engine 应该是 Push Engine 还是 Pull Engine 哪个好
  • 3 个人总结
  • 4 一句话分别概括
  • 5 同宗数据库
相关产品与服务
TDSQL-C MySQL 版
TDSQL-C MySQL 版(TDSQL-C for MySQL)是腾讯云自研的新一代云原生关系型数据库。融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL,为用户提供极致弹性、高性能、高可用、高可靠、安全的数据库服务。实现超百万 QPS 的高吞吐、PB 级海量分布式智能存储、Serverless 秒级伸缩,助力企业加速完成数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档