本文為您介紹Hologres的執行引擎以及內部的各組件。
執行引擎優勢
Hologres的執行引擎(主要以HQE為主)是自研的執行引擎,通過與巨量資料領域最新技術結合,實現了對各種查詢類型的高效能處理,主要具有如下優勢。
- 分布式執行
執行引擎是一個和儲存計算分離架構配合的分布式執行模型。執行計畫由非同步運算元組成的執行圖DAG(有向非循環圖)表示,可以表達各種複雜查詢,並且完美適配Hologres的資料存放區模型,方便對接查詢最佳化工具,利用各種查詢最佳化技術。
- 全非同步執行
端到端的全非同步處理架構,可以避免高並發系統的瓶頸,充分利用資源,並且最大可能地避免儲存計算分離系統帶來的讀資料延遲的影響。
- 向量化和列處理
運算元內部處理資料時最大可能地使用向量化執行,與儲存引擎深度整合,通過靈活的執行模型,充分利用各種索引,最大化地延遲向量物化和延遲計算,避免不必要的讀資料和計算。
- 自適應增量處理
對常見即時資料應用查詢模式進行自適應增量處理。
- 特定查詢深度最佳化
對一些特定查詢模式的獨特最佳化。
Query執行過程
當用戶端下發一個Query後,在執行引擎中實際上會有多個worker節點,以其中的一個worker節點為例,執行過程如下圖所示。
當用戶端發起一個SQL後,執行過程如下。
- 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級離線資料的互動式分析。
- 執行引擎決定正確的執行計畫,然後會通過儲存引擎(Storage Engine,SE)進行資料擷取,最後對每個Shard上的資料進行合并,返回至用戶端。