三種常見的數據庫查詢引擎執行模型


一、迭代模型/火山模型(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM