1. 程式人生 > 其它 >三種常見的資料庫查詢引擎執行模型

三種常見的資料庫查詢引擎執行模型

一、迭代模型/火山模型(Iterator Model)
又稱 Volcano Model 或者 Pipeline Model。


Iterator 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 引擎開始也支援向量化執行模型。
在 Hive 中使用 向量化執行的方式:
1、必須以 ORC 格式來儲存資料,
2、將 hive.vectorized.execution.enabled 引數設定為 true

以上為三種常見的資料庫查詢引擎執行模型,「分散式技術專題」是國產資料庫hubble團隊精心整編,專題會持續更新,歡迎大家保持關注。
原文連結:https://blog.csdn.net/m0_51698806/article/details/113739682