摘要: 前言 在《數據庫系統中的Code Generation技術介紹》中,咱們簡單介紹了一下Code Generation技術及其在大規模OLAP系統,特別是大規模分佈式OLAP系統中的重要性。MaxCompute採用了Code Generation技術來提升計算效率。在MaxCompute數據庫
前言 網絡
在《數據庫系統中的Code Generation技術介紹》中,咱們簡單介紹了一下Code Generation技術及其在大規模OLAP系統,特別是大規模分佈式OLAP系統中的重要性。MaxCompute採用了Code Generation技術來提升計算效率。在MaxCompute2.0中,咱們又引入了基於LLVM的JIT(Just In Time) Code Generation技術。結合向量化的執行引擎,基於SIMD技術的執行效率優化等方式,較之MaxCompute 1.0,MaxCompute 2.0在性能方便有了較大的提高,具體能夠參照《MaxCompute2.0性能評測:更強大、更高效之上的更快速》。分佈式
MaxCompute 1.0中的Code Generation函數
如上圖,MaxCompute 1.0採用了靜態的Code Generation技術,工做主要在MaxCompute控制集羣中名爲「Executor」的角色上完成。其流程以下:性能
能夠看到,利用Code Generation技術,對於每個SQL來講執行時代碼都是通過定製的,所以執行效率較傳統的Volcano Model更好。可是,其中也有一些問題。優化
MaxCompute 2.0中的Code Generation翻譯
MaxCompute 2.0採用了基於LLVM的JIT Code Generation技術。所謂JIT,就是程序在運行期間根據須要動態生成相應的機器指令。這樣,整個Code Generation的工做由控制集羣移交到了真正執行計算邏輯的計算集羣各個Worker上。其流程以下:指針
與MaxCompute 1.0相比,MaxCompute 2.0中Code Generation速度有明顯提高。在1.0中,一個SQL的平均Code Generation耗時大概在2-3s左右,這個時間在2.0中被縮短到100 - 200ms。由於在2.0中Code Generation都在計算集羣的Worker上完成,所以相對來講減輕了控制集羣的壓力,有助於MaxCompute控制集羣的穩定性。此外,由於MaxCompute 2.0的執行引擎是複用的(不由於SQL不一樣而不同),所以無需像1.0中同樣,在控制集羣與計算集羣之間傳輸動態庫,下降了控制集羣與計算機羣之間的網絡負載。blog
後續工做內存
目前,MaxCompute 2.0 的執行引擎仍是以Volcano Model爲基礎。只是在Volcano Model中各個算子之間以Batch模式傳遞數據,而且以列式執行的方式提升執行速度。基於LLVM的JIT Code Generation如今主要用在表達式計算,Streamline等熱點部分。以後,咱們準備嘗試Full Stage的Code Generation, 相似http://www.hyper-db.com/。 有興趣的同窗能夠看看這個:http://www.vldb.org/pvldb/vol4/p539-neumann.pdf。 附件中的PDF結合了《數據庫系統中的Code Generation技術介紹》和本文的部份內容,有興趣的同窗能夠做爲參考。
閱讀更多幹貨好文,請關注掃描如下二維碼: