三种常见的数据库查询引擎执行模型

一、迭代模型/火山模型(Iterator Model)

又称 Volcano Model 或者 Pipeline Model。

该计算模型将关系代数中每一种操作抽象为一个 Operator,将整个 SQL 构建成一个 Operator 树,查询树自顶向下的调用next()接口,数据则自底向上的被拉取处理。

  • 火山模型的这种处理方式也称为拉取执行模型(Pull Based)。
  • 大多数关系型数据库都是使用迭代模型的,如 SQLite、MongoDB、Impala、DB2、SQLServer、Greenplum、PostgreSQL、Oracle、MySQL 等。
  • 火山模型的优点在于:简单,每个 Operator 可以单独实现逻辑。
  • 火山模型的缺点:查询树调用next()接口次数太多,并且一次只取一条数据,CPU 执行效率低;而 Joins, Subqueries, Order By 等操作经常会阻塞。
    在这里插入图片描述

二、物化模型(Materialization Model)

Materialization Model

  • 物化模型的处理方式是:每个 operator 一次处理所有的输入,处理完之后将所有结果一次性输出。
  • 物化模型更适合OLTP负载,这些查询每次只访问小规模的数据,只需要少量的函数调用。
    在这里插入图片描述

三、向量化/批处理模型(Vectorized / Batch Model)

Batch Model

  • 向量化模型 和 火山模型 类似,每个 operator 需要实现一个 next() 函数,但是每次调用 next() 函数会返回一批的元组(tuples),而不是一个元组,所以向量化模型也可称为批处理模型。

  • 向量化模型是火山模型和物化模型的折衷。

  • 向量化模型比较适合 OLAP 查询,因为其大大减少了每个 operator 的调用次数,也就简单减少了虚函数的调用。

  • Presto、snowflake、SQLServer、Amazon Redshift等数据库支持这种处理模式。

  • Spark 2.x 的 SQL 引擎开始也支持向量化执行模型

  • 参考:「分布式技术专题」三种常见的数据库查询引擎执行模型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喜欢打篮球的普通人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值