- Doris實時數倉實戰
- 王春波
- 1111字
- 2023-11-02 20:30:20
1.1.2 Doris架構重組
Doris變化和升級比較大的版本是Doris 3,這也是開發時間跨度比較長的一個版本,重大的改進主要有以下幾點。
?Doris 3在架構上引入了ZooKeeper來存儲元數據,解耦組件,實現了系統無單點故障,提高了系統穩定性。在Doris 3的組件中,DT(Data Transfer)模塊負責數據導入,DS(Data Searcher)模塊負責數據查詢,DM(Data Master)模塊負責集群元數據管理。數據存儲在分布式Key-Value引擎中。數據導入和數據查詢時,Doris 3直接讀取存儲在ZooKeeper中的元數據,不再依賴元數據管理組件提供的服務。
?Doris 3在數據分布方面引入了分區。數據會按照時間進行分區(比如天分區、月分區)。在同一個分區里,數據會根據用戶ID進行分布。這樣,同一個用戶的數據會落在不同的分區,而在進行數據查詢時,多臺機器能同時處理一個用戶的數據,實現了單用戶數據分布式計算。
?為了實現數據的多維分析,Doris 3采用了MySQL Storage Handler方案。通過這種方案,Doris 3偽裝成一個MySQL的存儲后端,類似于MyISAM、InnoDB。這樣既能利用MySQL對SQL的支持,也能利用Doris 3對大量數據的快速處理;同時又引入了MySQL的BKA(Batched Key Access,批量索引訪問)算法和MRR(Multi-Range Read,多范圍讀取優化)特性,盡量將計算下推給Doris 3來完成,從而減輕MySQL的計算壓力,避免了單點故障。
?Doris 3重構了存儲引擎。在多維報表分析場景中,原來底層通用Key-Value系統的弊端也逐漸顯露。由于Key-Value系統只能夠讀取完整的Key和完整的Value,而報表分析系統中的大部分查詢并不需要讀取所有列,這樣會帶來不必要的I/O開銷。同時,Key-Value系統無法感知數據內容,只能使用通用壓縮算法,導致數據壓縮效率低,讀寫性能差。為了在底層存儲引擎上有所突破,百度啟動了OLAP Engine項目,參考Google Mesa系統重構了存儲引擎。
新的存儲引擎主要有以下特點。
?引擎端原生就支持Schema,并且所有的列分為Key列、Value列,能夠和上層的業務模型相對應,查詢部分列時,無須加載全部列,減少不必要的I/O開銷。
?獨特的數據模型。Value列支持聚合操作,包括SUM、MIN、MAX等。在Key列相同的情況下,Value列能夠按照聚合操作類型完成對應的聚合操作。而引擎存儲數據類似于LSM樹,這樣在后臺執行聚合操作時,就能夠將相同Key的Value字段按照對應的聚合操作類型進行聚合,無須在外部增加數據合并作業。
?數據批量導入,批量生效。每個批次的導入都會生成一個增量文件,并且會有一個版本號。在查詢任務中,只需要在最開始的時候確定讀取哪個文件,這樣就會只讀取生效版本的數據,不會讀取沒有生效版本的數據,更不會浪費CPU資源進行版本號的過濾。
?行列式存儲。多行數據存儲在一個塊(Block)內,塊內相同列的數據一同壓縮與存放,這樣可以根據數據特征,利用不同的壓縮算法(比如對時間字段使用RLE算法等)來提高數據壓縮效率。
另外,Doris 3在日常運維,包括表結構變更、集群擴容、集群縮容等方面,都做了針對性的設計,實現了自動化操作。
- Spark快速大數據分析(第2版)
- Visual Studio 2015 Cookbook(Second Edition)
- Learning Spring Boot
- MySQL從入門到精通(第3版)
- 數據革命:大數據價值實現方法、技術與案例
- Hands-On Mathematics for Deep Learning
- Lego Mindstorms EV3 Essentials
- 大數據技術入門
- Mastering LOB Development for Silverlight 5:A Case Study in Action
- MySQL DBA修煉之道
- Expert Python Programming(Third Edition)
- Node.js High Performance
- Rust High Performance
- 云原生架構:從技術演進到最佳實踐
- Oracle 內核技術揭密