官术网_书友最值得收藏!

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在日常運維,包括表結構變更、集群擴容、集群縮容等方面,都做了針對性的設計,實現了自動化操作。

主站蜘蛛池模板: 城步| 泌阳县| 无棣县| 甘孜| 乳山市| 田林县| 秀山| 定兴县| 牡丹江市| 郸城县| 曲水县| 成安县| 红桥区| 本溪| 鄂托克旗| 广宗县| 丹寨县| 万山特区| 浏阳市| 湖南省| 买车| 修文县| 津市市| 泉州市| 梁平县| 信丰县| 甘孜县| 临颍县| 山东| 泗阳县| 思茅市| 庆云县| 白水县| 颍上县| 广平县| 新余市| 柯坪县| 安达市| 卫辉市| 会理县| 汉中市|