向量化执行引擎
在三种常见的数据库查询引擎执行模型中我们讲到了向量化执行引擎本质上是一种批处理模型。批处理思想在计算机的世界里经常闪闪发光。高并发场景中,可以把大量的请求合并,改为调用批量接口;大数据下读取分布式文件系统时,如果要读取大量的小文件,可以将这些小文件打成tar包,或者批量一次打开100~500个文件;数据库插入数据时,修改单条插入为批量插入等。批处理减少了cpu的中断次数,可以更加合理的利用资源。
在向量化执行引擎模型中,列式存储占据着天然的优势:
1、压缩能力的提升。同一列的数据类型相同,压缩比高。
2、IO总量小。压缩减少了一部分IO,另外投影操作时,只需要读取查询的字段。
3、支持对某一列进行向量计算
通常向量化执行引擎都是用在OLAP数仓类系统。而OLTP系统,由于使用行存,并且点查询居多,所以向量化执行的优势也很难体现出来。
两种向量化执行引擎的实现
方法一:仍使用火山模型,将一次一tuple的处理模式,修改为一次向上返回一组列存行值(例如:100-1000行)处理方式。
compare-row-column
图1中描述的就是火山模型实现的行存执行引擎与列存执行引擎,其中左边代表的是传统的行存火山模型,右边代表的是列存实现的火山模型。
火山模式是从执行计划树的根节点开始向叶子节点递归调用,然后由叶子节点扫描节点,过滤出符合条件的tuple 给上层节点处理&