Doris为什么那么快?
对于一个分析型数据库,最核心的三个组成部分就是存储引擎、查询引擎和查询优化器,这也是Doris极致性能的决定因素。在此之外,向量化执行引擎的加入,让CPU的能力得到了更充分的发挥,更进一步提升了Doris查询性能。
和大多数分析型数据库一样,Doris也是以列存格式存储数据的。数据按照列进行连续存储,因为类型相同,因此可以获得极高的压缩率,节省磁盘空间。Doris对不同列的数据类型还提供了不同的编码方式,如INT类型会使用BitShuffle的编码方式,而字符串类型会使用字典编码。更进一步,Doris还会自动根据列的值分布情况来切换编码类型。比如对于字符串类型,如果列的去重值比较多,则不再使用字典编码,而直接切换到Plain Text编码,以避免不必要的空间浪费。
从文件组织形式上,Doris的文件格式和Parquet比较类似。一个数据版本会被分割成最大空间为256MB一个的Segment,每个Segment对应一个物理文件。Segment通常分为Header、Data Region、Index Region、Footer几个部分。Data Region 用于按列存储数据,每一列又被分为多个Page,而Page是Doris的最小数据存取单元,如图1所示。
(相关资料图)
▲图1 Doris文件格式
Index Region负责存储数据的索引。Doris提供了丰富的索引结构来帮助加速数据的读取和过滤。索引的类型大体可以分为智能索引和二级索引两种。其中智能索引是在Doris数据写入时自动生成的,无须用户干预,包括前缀稀疏索引、Min Max索引等。而二级索引是用户可以选择性地在某些列上添加的辅助索引,需要用户自主选择是否创建,比如像Bloom Filter、Bitmap倒排索引等。
前缀稀疏索引是建立在排序结构上的一种索引。存储在文件中的数据是按照排序列有序存储的。Doris会在排序列数据上,每1024行创建一个稀疏索引项,如图2所示。索引的Key即当前这1024行中第一行的前缀排序列的值。当用户的查询条件包含这些排序列是,我们可以通过前缀稀疏索引快速的定位到起始行。
▲图2 Doris前缀稀疏索引和Min Max索引示例
Min Max索引是建立在Segment和Page级别的索引。对于Page中的每一列,Min Max索引都会记录这个Page中的最大值和最小值,同样,在Segment级别也会对每一列的最大值和最小值进行记录。这样当进行等值或范围查询时,可以通过Min Max索引快速过滤掉不需要读取的行。
Bloom Filter(布隆过滤器)是一种需要用户自主选择是否创建的索引。当对某一列创建Bloom Filter索引后,Doris会在page级别创建该列的Bloom Filter结构。Bloom Filter是一种使用固定空间的位图来快速判断一个值是否存在的数据结构,这种数据结构非常适合用于高基数列上的等值查询,比如UUID。
Bitmap也是一种需要用户自主选择是否创建的索引。Bitmap索引是一种基于位图的数据结构,其Key值是实际的列值,而Value值是key在数据文件中的offset。通过Bitmap索引,Doris可以很快定位到列值对应的行号,进行快速取数。这种索引比较合适在基数较低的列上进行等值查询的场景,比如城市等。
除了存储方式和索引结构,Doris在读取逻辑上也有很多优化。比如延迟物化功能会先根据有索引的列,定位到一个数据范围,然后再根据有过滤条件的列进行进一步过滤来缩小数据范围,最后再读取其他需要读取的列。这种方式可以很大程度上减少不必要的数据读取,降低查询请求对I/O的资源消耗。
02查询引擎Doris的查询引擎是基于MPP的火山模型,是从早期版本的Apache Impala演化而来的。在Doris中,一个SQL语句会先生成一个逻辑执行计划,然后根据数据的分布,形成一个物理执行计划。物理执行计划会有多个Fragment,而Fragment之间的数据传输则是由Exchange模块完成的。通过Exchange模块,Doris在执行整个查询的时候就有了数据重分布(Reshuffle)的能力,查询不再局限于数据的存储节点,从而能够更好地利用多节点资源进行并行数据处理。执行框架如图3所示。
▲图3MPP框架执行流程示意图
逻辑执行计划的Agg阶段变成了物理执行计划中的先重分布然后汇总的两个步骤,这个过程和Hadoop是类似的,都是按照相同的Key进行数据重分布。
除了整体的执行框架通过并行设计来提高查询效率外,Doris 还对很多具体的查询算子进行了优化。比如图4种的聚合算子。
▲图4 聚合算子
在Doris中,聚合算子会被拆分成两级聚合。第一级聚合会在数据所在节点先进行一次本地聚合,以减少发送到第二层聚合时需要传输的数据量,而第二级聚合会将Key相同的数据汇聚到同一个节点,进行最终的聚合计算。
在此基础上,Doris还实现了自适应的聚合算法。首先我们要知道,聚合算子是一种阻塞型算子,需要等到全部数据处理完成后,才会将数据发送给上层节点。而自适应聚合算法的意思是,在第一级聚合算子中,如果发现数据的聚合效果很低,即使聚合后也无法有效降低需要传输的数据量,则会自动停止第一级聚合,而将算子转换为一个非阻塞的流式算子,直接将读取到的数据发送到上层节点,从而避免不必要的阻塞等待时间。
针对Join算子,Doris也进行了大量优化,其中Runtime Filter是很重要的一种优化方式。在两个表的Join操作中,我们通常将右表称为BuildTable,而将左表称为ProbeTable。在实现上,通常首先读取右表的数据,在内存中构建一个HashTable,然后开始读取左表的每一行数据,并在HashTable中进行连接匹配,返回符合连接条件的数据。通常来说,左表的数据量会大于右表的数据量。
而Runtime Filter的设计思路,是在右表构建HashTable的同时,为连接列生成一个过滤结构。之后把这个过滤结构推给左表。这样,左表就可以利用过滤结构,对数据进行过滤,从而减少Probe节点需要传输和比对的数据量。这种过滤结构被称为Runtime Filter。针对不同的数据,Doris也实现了不同类型的过滤器,例如In Predicate,Bloom Filter和Min Max。用户可以根据不同场景选择不同的过滤器。Runtime Filter实现逻辑示意图如图5所示。
▲图5Runtime Filter实现逻辑示意图
Runtime Filter可以适用于大部分Join场景,包括节点的自动穿透,将Filter穿透下推到最底层的扫描节点,例如分布式Shuffle Join中,将多个节点产生的Filter进行合并后再下推数据读取节点等。
03查询优化器除了查询执行层方面的优化,Doris 在查询优化器方面也做了大量工作。Doris中的查询优化器能够同时进行基于规则和基于代价的查询优化。在基于规则的查询优化方面,Doris包括但不限于以下优化规则。
1)常量折叠。常量折叠可以预先对常量表达式进行计算,计算后的结果有助于规划器进行分区分桶裁剪,以及执行层利用索引进行数据过滤等。例如将where event_dt>=cast(add_months(now(),-1) as date)折算成where event_dt >=’2022-02-20’[14][15](编写本节时是2022年3月20日晚上)。
2)子查询改写。将子查询改写为Join操作,从而利用Doris在Join上做的一系列优化来提升查询效率。例如select * from tb1 where col1 in (select col2 from tb2) a改写成select tb1.* from tb1 inner join tb2 on tb1.col1=tb2.col2。
3)提取公共表达式。提取公共表达式可以将SQL中的一些析取范式转换成和取范式,而和取范式通常对执行引擎是比较友好,可以将查询条件重组或者下推,减少数据扫描和读取的行数。例如将条件where (a>1 and b=2) or (a>1 and b=3) or (a>1 and b=4)转化成 where a>1 and b in (2,3,4),明显后者的判断速度比前者的快很多。
4)智能预过滤。智能预过滤可以将SQL中的析取范式转换成和取范式并提炼出公共条件部分。这些公共条件可以预先过滤部分数据,从而减少数据处理量。
5)谓词下推也是查询优化器常见的优化手段。Doris中的谓词下推不仅可以穿透算子,更能进一步地下推到存储引擎,利用数据索引进行数据的过滤,如图6所示。
▲图6Doris中的谓词下推示意图
而在基于代价的查询优化方面,Doris主要针对Join算子进行了大量优化。
Join Reorder功能可以通过一些表的统计信息,自动的调整Join的顺序。而Join顺序的调整,会显著降低Join操作中生成的中间数据集的大小,从而加速查询的执行,如图7所示。
▲图7 Doris Join Reorder优化示意图
Colocation Join可以利用数据的分布情况,将原本需要Shuffle后才能进行Join的数据,在本地即可完成Join操作,从而避免了Shuffle时大量的网络数据传输。如图8所示。
▲图8 Doris Colocation Join示意图
Bucket Join是Colocation Join的通用版本。在Colocation Join中,用户需要在建表时就指定表的分布,以保证需要关联查询的若干个表有相同的数据分布。而Bucket Join会更智能地自动判断SQL中的关联条件和数据分布之间的关系,将原本需要同时Shuffle的左右两张表的数据的操作,变成仅将右表数据重分布到左表所在的节点,从而减少数据的移动量。如图9所示。
▲图9 Doris Bucket Join示意图
04向量化执行引擎传统的数据库都是典型的迭代模型,执行计划里面的每个算子通过调用下一个算子的next()方法来获取数据,数据从最底层的数据块中一条一条的读取处理最终返回给客户,它的问题在于每个tuple(也叫元组,是一种常见的编程数据类型,和数组类似,但是元组的元素可以是不同的类型)都要调用一次函数,调用开销太大,而且因为CPU每次只处理一条数据,无法利用[18][19]CPU技术升级带来的新特性,比如SIMD。向量化模型每次处理的是一批数据,这些数据会被保存在一种叫作向量的数据结构里面,然后因为每次处理的是一批数据,因此可以在每个Batch内部可以做各种优化。简单的说,向量化执行引擎 = 高效的向量数据结构(Vector)+ 批量化处理模型(nextBatch)+ Batch内性能优化(例如SIMD等)。
原本向量化执行引擎只是一个概念,是ClickHouse将其变成了现实,率先在数据库产品中实现了向量化执行引擎并展示出强悍性能。通过向量化执行引擎原理的介绍,我们可以看出,向量化执行引擎非常适合基于列存储的OLAP数据库,可以极大的提高并行查询效率。在ClickHouse之后,OLAP数据库实现向量化执行引擎几乎已经成为标配。目前,除了Doris以外,polar-x、TDSQL都声称部分或者全部实现了向量化执行引擎功能。
Doris是在0.15版本引入向量化执行引擎功能的,并在1.0版本中逐渐成熟。根据Doris的演进计划,向量化执行引擎会逐步替换当前Doris的行式SQL执行引擎,以充分释放现代CPU的计算能力,实现更强悍的查询性能。
在绝大多数场景之中,用户只需要将session变量enable_vectorized_engine设置为true,则FE在进行查询规划时就会默认将SQL算子与SQL表达式转换为向量化的执行计划,从而提升SQL执行性能。
关于作者:王春波,资深大数据架构师,现就职于一家互联网公司,任高级数仓工程师,负责电商数仓项目;在银行业、零售行业深耕多年,参与和负责过多家银行、零售数据分析实施项目;“数据中台研习社”号主,《Doris实时数仓实战》《高效使用Greenplum:入门、进阶与数据中台》作者。
标签:
- Doris为什么那么快?
- 将“青少年模式”纳入标准 网络表演直播短视频领域再出新“团标”
- 日本:东京玩具展开幕
- 朗进科技:公司拥有成熟的液冷技术及产品,公司坚持持续创新,不断研发新技术和新产品,更好的满足客户需求-每日看点
- 新疆持续优化营商环境 紧贴民生推动高质量发展
- rf网盘停止服务_rf网盘_世界速看料
- 如通股份: 董事集中竞价减持股份结果公告
- 乘联会:5月全国乘用车市场零售达174.2万辆 同比增长28.6% 环比增长7.3%
- 【天天速看料】“幼”见交警 安全“童”行:合肥幼教集团世茂首府幼儿园开展交通警察进课堂活动
- 雄安新区第四届“智绘未来”创新创业大赛启动
- 公积金提取额度是多少?_公积金提取额度是多少
- ml-1676打印机驱动下载_ml1676打印机驱动下载
- 陈道明:每个人的人生都是主旋律_观焦点
- 印尼东爪哇南部海域6.0级地震 喷发中的默拉皮火山未受影响 全球百事通
- 鞋子简笔画儿童画_鞋子简笔画 速读
- 有哪些松的古诗 4.描写松的古诗词_环球快播
- 中央气象台:继续发布强对流天气蓝色预警
- 全球播报:线上线下拥抱非遗 动静之间收获惊喜
- 今夜利空!半导体龙头遭大减持 剑桥科技二股东康宜桥拟清仓减持 关注
- 中国5月末外汇储备报3.1765万亿美元
- 快看:郑州城市防洪排涝监测预警中枢系统正式投用
- 天天热消息:2023年高考那些防弊黑科技——磁弹枪在考点现场出现
- 苹果手机输入法怎么改成九键的键盘_苹果手机输入法怎么改成九键的|微动态
- 关注:机构:韩国将垄断中大尺寸OLED发光材料需求至2027年
- 全球快报:江西:118家法院少年法庭全覆盖
- 沙特额外减产无法盖过需求忧虑!国际油价延续跌势
- 编纂与编撰的读音_编撰和编纂的读音
- 【天天快播报】乐享缤纷童年,唐昌镇幼儿园载歌载舞欢庆六一!
- 河南各地加强服务保障 确保收割机顺利跨区作业
- 【法网】王欣瑜/谢淑薇晋级女双四强
- 焦点速读:聚力打造鲁北地区生物医药产业创新高地
- 刚柔并济 软硬兼施_软硬兼施的意思
- 看热讯:盈康生命旗下医院引入山西省首台纳米刀(IRE)肿瘤消融系统
- 热消息:天源环保:公司生产制造的纳滤、反渗透集成装备可用于盐湖提锂过程中的工艺单元 公司尚未涉及该类业务
- 东岳硅材:目前,公司单体车间有计划内的部份设备停工检修及更换,单体车间其他在运行装置负荷正常,开工率处于正常合理水平-环球热讯
- 焦点短讯!兽不足到此人何取而自贻患耶_兽不足道,此人何取而自贻患耶翻译
- 三年复习资料全丢失,无法复习的高考生急得直掉泪,后来……
- 天天快报!东方电气国内单机容量最大冲击式水电机组完成国产化改造
- 焦点日报:廉江市气象台发布雷雨大风黄色预警【III级/较重】【2023-06-07】
- 乌克兰卡霍夫卡水电站大坝遭破坏,外交部:严重关切
- 广西南宁警方回应“女子被当街强奸”:传言与事实不符 每日消息
- 收盘丨A股三大指数走势分化,创业板指跌1.61%
- 速讯:广东省发文进一步完善和落实积极生育支持措施
- 直击郑州高考现场!加油吧少年
- 评测iPhone11系列在哪儿买便宜及苹果iOS13屏幕使用时间怎么开启和关闭
- 天天观点:城市传媒:公司和上海爱美联合出品电影《好像也没那么热血沸腾》
- 腾讯QQ回应“QQ空间新版太难用”
- 您敢选电车吗?撞收费站起火的案例带给我们哪些警示
- 盈康生命旗下医院引入山西省首台纳米刀(IRE)肿瘤消融系统-全球实时
- 【环球快播报】协调的意思解释_协调的意思
- 道德产生的客观条件是社会关系_道德产生的客观条件
- 【清一色午报】三大股指涨跌不一,宁德时代跌超5%,AI概念股再迎集体反弹|世界速讯
- 6月7日广西地区电解锰市场价格_环球资讯
- 四川银政通信息服务平台系统推荐会在四川天府银行召开
- 新加坡羽毛球公开赛:石宇奇战胜乔纳坦 “双塔组合”遭遇“一轮游”|世界播资讯
- 一牛顿的力等于多少千克_一牛顿的力等于多少公斤|当前资讯
- 全新一代途观曝光!造型酷似途锐配ID家族内饰 有望明年国产
- 外籍海员突发疾病危及生命 边检畅通“绿色通道”紧急救助
- 环球热消息:光大证券收警示函 持续督导纳芯微帝科股份存4宗违规
- 市卫监所集中检查中央空调新风系统
- 外交部:日本政府一再为福岛核污染水洗白,事实却一再打脸 环球微头条
- 世界速看:屋顶的大象下载_屋顶的大象
- 今日看点:昆船智能06月07日主力资金大幅流出
- 环球快讯:收盘丨A股三大指数走势分化,创业板指跌1.61%
- 文润河北 冀望未来 河北展区精彩亮相第十九届深圳文博会
- 双子座女的性格特点_双子座女孩子性格脾气|全球要闻
- 数百名非法移民冲过美墨边境大桥 墨西哥边防人员被撞倒_天天新消息
- 全球快消息!城市传媒:公司和上海爱美联合出品电影《好像也没那么热血沸腾》
- 津南区气象台发布雷雨大风蓝色预警/IV级/一般【2023-06-07】|时讯
- 经典互联网是否仍然重要?
- 什么是国防生大学_什么是国防生
- 售价126.20万元 新款宝马740Li尊享型上市 焦点简讯
- 2023年南宁邕音乐节举办地点在哪里
- 天天热资讯!中科星图智慧与亿水泰科股权转让签约仪式举行
- 天檀 | 病入膏肓的A股,什么时候才能被拯救?-全球热点
- 天天速看:二级建造师和二级注册建造师的区别是什么-二级建造师和二级注册建造师的区别
- 云图控股:截至本公告日,宋睿累计质押股数约为1.09亿股
- 6月7日华东地区加氢苯市场价格暂稳_天天快播报
- 中银证券首席经济学家徐高:中国居民资产负债率相当健康,不需太过担心
- 焦点热讯:23国丰债01今日发布发行公告
- 神仙道3新手阵容推荐 2023开局最强阵容搭配攻略[多图] 天天日报
- 当前速讯:贝锐蒲公英携手人工智能企业,高效搭建5G通信及远程访问管理
- 愿做生态文明追梦人 ——记全国林草系统先进工作者潘雪雷_天天新消息
- 海澜之家(600398)6月7日主力资金净卖出259.65万元
- 全球消息!孚能科技(688567.SH)股东深圳安晏减持期满未减持
- 攀枝花学院获颁“四川省哲学社会科学重点实验室”牌匾-前沿热点
- 唠叨的爱作文500字
- 滚动:关于尘的文案
- 恒兴科技曲折上市梦:保荐机构曾信心溃败,净利润大跌毛利率三年巨降
- 天天热门:心疼老公的句子
- 全球速递!日本实际工资连续13个月同比减少
- 长安汽车回应网传“克扣10%货款”:不实,已报案
- 广丰区气象台发布雷电黄色预警信号【III级/较重】【2023-06-07】|世界热资讯
- 北京最大集租房项目首创和园·繁星社区入市 可提供6500套租赁房源
- 天天快看点丨最高人民法院关于审理涉及计算机网络著作权纠纷案件适用法律若干问题的解释(对于最高人民法院关于审理涉及计算机网络著作权纠纷案件适用法律若干问题的解释简单介绍)
- 今日热闻!超图软件董秘回复: 公司在2021年推出的SuperMap GIS 2021产品中,新增支持MR
- 力争世界排名前三 中国三人女篮多队出击抢积分
- 每日播报!618大促超值好价!ThinkBook 14+到手仅4979元
- 徐州泉山消防举办脱口秀 寓教于乐宣传消防知识-快报
- 世界微速讯:叫我大掌柜九龙人生结局大全 九龙人生全结局攻略
广告
广告
- 世界滚动:中光防雷(300414):独立董事提名人声明(一)
- 全球头条:外媒:乌克兰富豪总资产较俄乌冲突前缩水逾200亿美元
- 全球焦点!回首·2022 | 长江黄河、黑土湿地……纵览2022美丽中国新画卷
- 当前视点!3299起我要冠军版!红米K60Pro还是你的菜吗?
- 今日视点:日本长期利率调整的市场效应
- 【全球热闻】跨越8800公里,爱尔兰面包蟹爬上中国人的餐桌
- 全球今头条!铜陵有色:公司没有独立的镍矿资源,公司的镍产品是冶炼的副产品之一,作为资源综合回收利用
- 资讯:倒计时5天!多家“重庆造”新能源汽车应声涨价
- 天天微动态丨2023年将成钠电产业化元年
- 天天最新:【和讯期货早报】大有期货-油脂-12月26日
- 【环球时快讯】赛升药业(300485.SZ)参股公司康乐卫士北交所上市获审核通过
- 世界通讯!捷信超贷贷款逾期1个月不还会上征信吗
- 前沿资讯!平安新一贷逾期12个月会不会上征信啊
- 【独家】三维通信: 三维通信公司章程(2022年12月)
- 今日讯!息县公安局扎实推进今冬明春禁种铲毒工作
- 环球精选!我阳了...
- 每日焦点!节能风电: 中节能风力发电股份有限公司章程(第十三次修订)
- 世界热消息:英诺特董秘回复:目前公司的联合检测产品需要在符合国家检验资质的医疗机构使用
- 环球微头条丨货币政策、流动性、房地产 央行这场重磅会议都说到了!
- 今头条!美吉姆最新公告:股东张源减持到期已减持300万股 拟再减持不超1.98%股份






