本文為您介紹Hologres的執行引擎以及內部的各組件。
執行引擎優勢
- 分布式執行
執行引擎是一個和存儲計算分離架構配合的分布式執行模型。執行計劃由異步算子組成的執行圖DAG(有向無環圖)表示,可以表達各種復雜查詢,并且完美適配Hologres的數據存儲模型,方便對接查詢優化器,利用各種查詢優化技術。
- 全異步執行
端到端的全異步處理框架,可以避免高并發系統的瓶頸,充分利用資源,并且最大可能地避免存儲計算分離系統帶來的讀數據延遲的影響。
- 向量化和列處理
算子內部處理數據時最大可能地使用向量化執行,與存儲引擎深度集成,通過靈活的執行模型,充分利用各種索引,最大化地延遲向量物化和延遲計算,避免不必要的讀數據和計算。
- 自適應增量處理
對常見實時數據應用查詢模式進行自適應增量處理。
- 特定查詢深度優化
對一些特定查詢模式的獨特優化。
Query執行過程
- Frontend(FE)節點對SQL進行解析和認證,并分發至執行引擎(Query Engine)的不同執行模塊。
- 執行引擎(Query Engine)會根據SQL的特征走不同的執行路徑。
- 如果是點查/點寫的場景,會跳過優化器(Query Optimizer,QO),直接分發至后端獲取數據,減少數據傳送鏈路,從而實現更優的性能。整個執行鏈路也叫Fixed Plan,點查(與HBase的KV查詢)、點寫場景會直接走Fixed Plan。
- 如果是OLAP查詢和寫入場景:首先會由優化器(Query Optimizer,QO)對SQL進行解析,生成執行計劃,在執行計劃中會預估出算子執行Cost、統計信息、空間裁剪等。QO會通過生成的執行計劃,決定使用HQE、PQE、SQE或者Hive QE對算子進行真正的計算。HQE、PQE、SQE的對比介紹如下。
HQE(Hologres Query Engine)
Hologres自研執行引擎,采用可擴展的MPP架構全并行計算,向量化算子發揮CPU極致算力,從而實現極致的查詢性能。(QE主要由HQE組成)。
PQE(Postgres Query Engine)
用于兼容Postgres提供擴展能力,支持PG生態的各種擴展組件,如PostGIS,UDF(PL/JAVA,PL/SQL,PL/Python)等。部分HQE還沒有支持的函數和算子,會通過PQE執行,每個版本都在持續優化中,最終目標是去掉PQE。
SQE(Seahawks Query Engine)
無縫對接MaxCompute(ODPS)的執行引擎,實現對MaxCompute的本地訪問,無需遷移和導入數據,就可以高性能和全兼容的訪問各種MaxCompute文件格式,以及Hash/Range clustered table等復雜表,實現對PB級離線數據的交互式分析,技術原理請參見Hologres加速查詢MaxCompute技術揭秘。
- 執行引擎決定正確的執行計劃,然后會通過存儲引擎(Storage Engine,SE)進行數據獲取,最后對每個Shard上的數據進行合并,返回至客戶端。