Drill官網文件翻譯四Drill的效能

老將黃滾發表於2016-02-02

(翻譯自apache drill 官網。)

Drill是從地基開始就奔向高效能和大資料集去設計的,下面列出來的是Drill能夠做到高效能的核心要點。

分散式的引擎

Drill提供了一個強大的分散式引擎來處理查詢。使用者可以從叢集的任何一個節點是提交查詢。你可以新增新的節點到叢集中,以為了支援更多使用者的更多資料,或是獲得更好的效能。

列式執行

通過使用一種純記憶體的分層的,列式的資料模型,Drill同時為列式儲存,列式執行都做了優化。當資料是儲存在列式儲存的檔案上時(比如像Parquet)Drill會避免去訪問那些查詢中根本不涉及到的列。Drill的執行層同樣可以直接對列式資料進行SQL查詢,而不需要做一個分行化的操作。列式儲存和直接列式執行,這兩個優化的元件顯示地降低了記憶體消耗,併為BI和分析型別的作業提供了更快的執行效率。

向量化

相比一次只處理一個表記錄中的一個值 ,Drill中的向量化允許CPU在向量上操作,也就是一批記錄上操作。一個記錄批次包含來自不同的記錄上的一組數值 。向量處理能夠做到非常高效的技術基礎,在於現在的晶片技術,這些晶片都攜帶了深度流水線化的CPU設計。讓所有管理都達到接近峰值的高效是不可能的,因為程式碼複雜度太高了。

執行時編譯

執行時編譯相比解釋執行提供了更快的執行。Drill為每一條查詢指令都生成了非常高效的指令。下圖展示了Drill的編譯和指令生成過程。

樂觀並且流水線的查詢執行

Drill 使用樂觀的執行模型來處理查詢,假定在小片的查詢中失敗是不太常見的。Drill不會浪費時間在建立邊界或是檢查點上,這樣就可以最小化恢復時間。在單條查詢失敗的時候,這條查詢就直接返回了。Drill執行使用一種所有任務一次性安排的流水線模型。查詢儘可能地在記憶體中執行以便能在流水線中完成作業,只有記憶體不足時才會持久化到磁碟。


相關文章