跳转至

处理模型

1.简介

数据库的处理模型指的是如何执行一个查询计划。

常见的模型有三种,对于不同的负载会采用不同的处理模型:

  • Iterator Model
  • Materialization Model
  • Vectorized/Batch Model

2.Iterator Model

也称之为Pipeline Model。

在查询计划的逻辑树中,数据的传递是基于单个tuple,而不是传递的完整处理结果,就好像一个个tuple经过由处理节点组成的流水线(Pipeline)一样。

每一个逻辑树的节点会实现一个Next函数,其返回值是子节点的tuple处理结果。如果是叶子节点,它会直接从表中获取数据。

对于一个tuple来说,这种模型能够让我们在逻辑树中尽可能多的使用它,即尽可能的让多个逻辑节点去处理这个tuple。对基于磁盘的数据库来说,好处同样是明显的,因为它降低了与磁盘交互的可能性。 15445-4

15445-5

有一些操作必须要等待所有的Tuple才能执行,如Join、Subqueries、Order By,这些操作称之为Pipeline Breaker

这种模型还可以很好的进行输出控制,如limit操作。若只需要得到十个输出,则在上层得到10个结果后不继续调用Next函数即可。

2.Materialization Model

该模型数据的传递是完整数据,而不是单个tuple。

该模型更适用于OLTP的负载,因为OLTP的涉及的规模较小,因此传递完整数据的开销较少。同理,对于OLAP的负载来说则不适用该模型。

3.Vectorization Model

基于Iterator Model的扩展,每次处理的是一组Tuple,一组Tuple的大小可以根据硬件做出优化调整。