向量化执行引擎出现的原因
- 传统数据库的查询执行采用一次一tuple的pipeline执行,CPU利用率不高。而向量化执行引擎是一次处理一列数据。
- 传统数据库数据随机存放,不利于利用磁盘的顺序读取优势。而列存储能最大化利用磁盘读写能力。
向量化执行引擎
概念介绍
向量化执行引擎通过批量处理、SIMD指令、JIT编译等技术,显著提升了查询执行的效率。这种执行方式非常适合现代列存数据库和分析型工作负载。典型的支持向量化执行的数据库有MonetDB、Vectorwise、Vertica等。
例子1:求和操作
假设我们有一个数字列 [1, 2, 3, 4, 5],我们要计算这个列的求和结果。
在传统的火山模型(Volcano Model)中,执行引擎会一行一行地处理数据。伪代码如下:
sum = 0
for each number in column:
sum += number
而在向量化执行引擎中,执行引擎会一批一批地处理数据(比如一批处理1000行)。伪代码如下:
sum = 0
for each batch in column:
sum += sum(batch)
向量化执行引擎通过批量处理,减少了函数调用和循环开销,提高了CPU利用率。
例子2:过滤操作
假设我们有一个数字列 [1, 2, 3, 4, 5],我们要过滤出大于3的数字。
在传统的执行引擎