代码编织梦想

随着数据库软硬件技术的发展,经典的 SQL 计算引擎逐渐成为数据库系统的性能瓶颈,尤其是对于涉及到大量计算的 OLAP 场景。

如何充分发挥底层硬件的能力,提升数据库系统的性能,成为近年来数据库领域的热门研究方向,而向量化执行就是解决上述问题的一种有效手段,本文主要对向量化技术的原理及优点进行简单的介绍。

为什么数据库需要向量化?
MPP数据库的API(Application Programming Interface)或者命令行接收到了SQL查询请求之后,系统先经过查询解析,然后进行查询优化,通过任务调度执行从存储引擎里面把数据读取出来,计算出结果集,返回给客户。

一个查询语句经过词法分析、语法分析、语义检查后生成的结果叫做Query Tree,经过优化器之后的结果叫做Plan Tree。
在这里插入图片描述
传统数据库执行查询计划通常采用火山模型的方式,流程如上图所示。

火山模型具有简单、直观、易用等优点,早期数据库受限于硬件水平,IO、内存和CPU资源都非常昂贵,火山模型能够极大缩减内存使用量,因而被各大厂商普遍采用。

如今,随着硬件技术的不断发展,火山模型的弊端也逐渐凸显。这种方式存在重复性执行多、反序列化代价高、数据局部性差等缺陷,而且一次执行仅处理一行数据,CPU花费大量时间在遍历查询操作树上,同时也没有针对CPU的SIMD能力等特性做优化,从而造成查询执行效率低下的问题。
在这里插入图片描述
据我们在PostgreSQL上实际测试,对于select sum(a) from table这样的查询,火山模型在执行查询计划时,大部分时间用于读取数据、对数据的反序列化、遍历执行树等操作上,用于实际SUM运算的时间不足4%。

为了进一步提升SQL计算引擎的性能,数据库执行器领域出现向量化和编译执行的新技术。这两种技术的出现都是为了提升性能,更准确地讲是为了提升 CPU的运行性能。

编译执行是把复杂运算编译成一个函数,重复调用得到结果。编译执行的优点是可以减少分支判断,并使函数调用栈变浅。

向量化执行指的是将一次计算一条元组的形式,转换为一次计算多条元组的向量化计算。通过实现批量读取和处理,大大精简了函数调用开销,减少了重复运算,增加了数据的局部性,提高了执行效率。

HashData向量化的实践
在这里插入图片描述

对于像HashData这样采用云架构的数据仓库而言,向量化可以通过提升单节点的执行能力,使整个集群的运算性能得到很大提升。列存数据的高压缩比不仅节约了存储空间,同时在向量化运算过程中也有着天然的性能优势。

HashData在实现向量化的过程中,引入了Apache 软件基金会开源项目Apache Arrow。Arrow 定义了标准的方式来表示可有效处理的内存数据,同时支持多种流行的编程语言中,包括 Java、C、C++ 和 Python等。

Apache Arrow的子项目Gandiva提供了编译执行向量化运算的可能,在应用于数据库表达式计算时,相对于解释执行的向量化运算也有明显的性能优势,但是由于百毫秒量级的编译时间,不利于小数据量查询,因此需要在优化阶段根据数据情形决定是否使用。

为确保分布式数据库的底层数据的稳定传输,Arrow提供了基于gRPC的进程间通信Flight,其允许数据以Batch的形式同时进出服务器集群,让开发人员可以更轻松地创建可扩展的数据服务。

根据我们在PostgreSQL单机测试的结果,在使用Arrow做向量化执行后,ORC数据格式+向量化,相对于heap表加+行引擎,在最好的情形下可以获得30倍以上的数据性能提升。

数据库的向量化不仅仅是数据存储和运算的向量化,还是一个巨大的性能优化工程。未来,HashData会持续优化、完善向量化执行,提升系统性能,更好地满足客户业务需求。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_54979897/article/details/127108780

ai入门与基础_lucky_wangtao的博客-爱代码爱编程

AI入门与基础 目录一   python 与 数据库 一、Python基础与数据持久化 1.1 python入门基础 1.2 python入门—练习题 1.3 python+csv/Excel—数据持久化  python爬虫 1.4 python爬虫(Re/requests/BS4) 1.5 python爬虫-scrapy框架 1.6

自然语言处理入门指南(python实现)-爱代码爱编程

High Lights 用python实现NLP的入门指南学习实现NLP的各种技术,包括解析和文本处理了解如何将NLP用于文本特征工程 前言 大部分数据都是以结构化形式存在的,而文本数据是非结构化数据,比如推文,帖子,

linux数据库可视化工具_适用于Linux的数据可视化工具-爱代码爱编程

linux数据库可视化工具 可视化工具简短列表 在本文中,我对许多流行的Linux数据可视化工具进行了调查,并对其中的其他功能进行了深入分析。 例如,该工具是否提供用于数值计算的语言? 该工具是交互式的还是仅在批处理模式下运行? 可以使用该工具进行图像或数字信号处理吗? 该工具是否提供语言绑定以支持集成到用户应用程序中(例如Pyt

前沿探索:腾讯云数据库自治服务最佳实现-爱代码爱编程

导语 | 虽然数据库上云解决了传统数据库很多问题,但如何让云数据库发挥最优的效能,依然充满极大挑战。为解决这一难题,高速发展的云数据库正在走向“自治”。本文是对腾讯云数据库高级产品经理刘迪在云+社区沙龙online的分享整理,为大家带来腾讯云在数据库自治服务领域的探索和实践,希望与大家一同交流。 点击视频查看完整直播回放

漫谈SIMD、SSE指令集与ClickHouse向量化执行-爱代码爱编程

前言 ClickHouse之所以会像闪电一样快("blazing fast"),是多方面优化的结果,包括且不限于:高效且磁盘友好的列式存储,高效的数据压缩,精心设计的各类索引,并行分布式查询,运行时代码生成等。 另外,ClickHouse为了最大限度地压榨硬件——尤其是CPU——的性能,实现了向量化查询执行(vectorized query exe

送书|北大出版:R语言数据分析与可视化从入门到精通-爱代码爱编程

生物信息学习的正确姿势 NGS系列文章包括NGS基础、高颜值在线绘图和分析、转录组分析 (Nature重磅综述|关于RNA-seq你想知道的全在这)、ChIP-seq分析 (ChIP-seq基本分析流程)、单细胞测序分析 (重磅综述:三万字长文读懂单细胞RNA测序分析的最佳实践教程)、DNA甲基化分析、重测序分析、GEO数据挖掘(典型医学设计实验G

r dataframe 转成向量_R语言入门课程-爱代码爱编程

针对R语言小白的入门课程,已经进行了半个多月:R语言小白的免费入门课程。现在对讲述的内容简单做个梳理。 R的安装 官方网站:https://www.r-project.org R的历史版本: Rstudio 使用 Rsudio的工作界面介绍R版本的选择镜像的选择脚本乱码的处理R脚本的使用与编辑工作路径的设置setwd

Milvus2.0 | 向量数据库Python极简入门-爱代码爱编程

一、介绍 项目官网:Milvus · Open Source Vector Database built for scalable similarity searchhttps://milvus.io/cn/ 项目文档: 关于 Milvus - Milvus documentationhttps://milvus.io/cn/docs/v2.0.x/

国产开源优秀新一代MPP数据库StarRocks入门之旅-数仓新利器(上)-爱代码爱编程

概述 背景 Apache Doris官方地址 https://doris.apache.org/ Apache Doris GitHub源码地址 https://github.com/apache/incubator-doris Apache Doris是一个现代化的MPP分析型数据库产品。仅需亚秒级响应时间即可获得查询结果,有效地支持实

mpp数据库实现入门_hashdata酷克数据的博客-爱代码爱编程

大规模并行分析(MPP)数据库自诞生以来,为数据驱动型企业提供了巨大的机会。近日,HashData联合创始人王占伟围绕MPP数据库的基础原理及技术特点与网友进行了分享交流。本文摘选部分精彩观点,与大家共享。 如上图所示,MPP数据库内核主要包括模块查询、编译查询、优化任务调度查询、执行存储。 MPP数据库的API(application program

tiflash 面向编译器的自动向量化加速_tidb_pingcap的博客-爱代码爱编程

SIMD(Single Instruction Multiple Data)是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术,是重要的程序加速手段。本文将简要介绍一些在 TiFlash 中使用编译器进行自动向量化所需要的入门知识。 目录 SIMD 介绍SIMD 函数派发方案

从零开始设计键值数据库(key-爱代码爱编程

本文主要参考 System Design Interview: An Insider’s Guide(CHAPTER 6) 键值存储(key-value store),也被称为键值数据库(key-value databas