doris調研

一、官方定位

“Doris is a MPP-based interactive SQL data warehousing for reporting and analysis.” Doris 是一個用於報告和分析的基於 MPP 的交互式 SQL 數據倉庫。

Doris 主要集成了 Google Mesa 和 Apache Impala 的技術。

 

二、主要用途

提供 OLAP 數據分析。(同時支持聚合和明細查詢分析)

 

三、實現原理

架構

Doris 的整體架構分爲兩層。多個 FE 組成第一層,提供 FE 的橫向擴展和高可用。多個 BE 組成第二層,負責數據存儲於管理。

FE 節點分爲 follower 和 observer 兩類。follower 節點通過選舉,其中一個 follower 成爲 leader 節點,負責元數據的寫入操作。當 leader 節點宕機後,其他 follower 節點會重新選舉出一個 leader,保證服務的高可用。observer 節點僅從 leader 節點進行元數據同步,不參與選舉。可以橫向擴展以提供元數據的讀服務的擴展性。

後端守護進程負責數據存儲和執行 SQL 查詢。可以部署多個後端守護進程以提供可伸縮性和容錯性

前端(FE)

元數據

Doris 的元數據是全內存的。每個 FE 內存中,都維護一個完整的元數據鏡像。

Doris 的元數據主要存儲4類數據:

  1. 用戶數據信息。包括數據庫、表的 Schema、分片信息等。

  2. 各類作業信息。如導入作業,Clone 作業、SchemaChange 作業等。

  3. 用戶及權限信息。

  4. 集羣及節點信息。

元數據的數據流具體過程如下:

  1. 只有 leader FE 可以對元數據進行寫操作。寫操作在修改 leader 的內存後,會序列化爲一條log,按照 key-value 的形式寫入 bdbje。其中 key 爲連續的整型,作爲 log id,value 即爲序列化後的操作日誌。

  2. 日誌寫入 bdbje 後,bdbje 會根據策略(寫多數/全寫),將日誌複製到其他 non-leader 的 FE 節點。non-leader FE 節點通過對日誌回放,修改自身的元數據內存鏡像,完成與 leader 節點的元數據同步。

  3. leader 節點的日誌條數達到閾值後(默認 10w 條),會啓動 checkpoint 線程。checkpoint 會讀取已有的 image 文件,和其之後的日誌,重新在內存中回放出一份新的元數據鏡像副本。然後將該副本寫入到磁盤,形成一個新的 image。之所以是重新生成一份鏡像副本,而不是將已有鏡像寫成 image,主要是考慮寫 image 加讀鎖期間,會阻塞寫操作。所以每次 checkpoint 會佔用雙倍內存空間。

  4. image 文件生成後,leader 節點會通知其他 non-leader 節點新的 image 已生成。non-leader 主動通過 http 拉取最新的 image 文件,來更換本地的舊文件。

  5. bddje 中的日誌,在 image 做完後,會定期刪除舊的日誌。

元數據流圖

後端(BE)

後端守護進程負責數據存儲和執行 SQL 查詢。

 

四、對比分析

kylin與doris對比分析
  kylin doris
底層存儲 hbase google Mesa +ORCFile/Parquet
數據導入 離線hive和實時kafka導入 離線hive和實時kafka導入
聚合計算配置方式 頁面配置(聚合組和維度組合方式) 手工創建(多張rollup博安排)
聚合計算配置靈活性 控制聚合的維度 控制聚合的維度和指標
數據構建 構建時間較長,一般爲20min~50min 構建時間一般在10min內
數據查詢接口 自帶web查詢,提供jdbc和odbc接口 使用mysql查詢引擎
計算效率 毫秒~秒級返回結果 毫秒~秒級返回結果(性能高於kylin)
支持的計算方式 sum/min/max/count/count distinct sum/min/max/count(不支持精確去重)
學習成本

維度、指標

強制維度、層級維度、關聯維度

rowkey和全局字典等諸多概念

維度、指標 

數據模型

rollup表

五、參考資料

doris官方簡介

doris開發者指南

發佈了5 篇原創文章 · 獲贊 1 · 訪問量 996
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章