這么火的數(shù)倉確定不學習一下?
一、 Doris 簡介
什么是Doris
Apache Doris是一個現(xiàn)代化的MPP(大規(guī)模并行處理)分析型數(shù)據(jù)庫產(chǎn)品。僅需亞秒級響應時間即可獲得查詢結果,有效地支持實時數(shù)據(jù)分析。Apache Doris的分布式架構非常簡潔,易于運維,并且可以支持10PB以上的超大數(shù)據(jù)集。Apache Doris可以滿足多種數(shù)據(jù)分析需求,例如固定歷史報表,實時數(shù)據(jù)分析,交互式數(shù)據(jù)分析和探索式數(shù)據(jù)分析等。
Doris 由百度大數(shù)據(jù)部研發(fā) ( 百度 Palo),在百度內部,有超過200個產(chǎn)品線在使用,部署機器超過1000臺,單一業(yè)務最大可達到上百 TB。百度將 Doris 貢獻給 Apache 社區(qū)之后,許多外部用戶也成為了 Doris 的使用者,例如新浪微博,美團,小米等著名企業(yè)。
關鍵字:MPP,分布式,數(shù)據(jù)分析,PB級
優(yōu)點
兼容MySQL協(xié)議。
聚合表技術+預聚合技術。
動態(tài)水平拓展和自動負載均衡。
缺點
網(wǎng)絡上相關經(jīng)驗少。
二、 Doris定位
在數(shù)據(jù)分析處理框架中,Doris 主要做的是 Online 層面的數(shù)據(jù)服務,主要處理的是數(shù)據(jù)分析方面的服務。
Doris適用場景有以下:
1、報表
報表類數(shù)據(jù)分析,數(shù)據(jù)分析以及查詢的模式相對比較固定,而且后臺 SQL 的模式往往都是確定的。針對此類應用場景,選擇使用 MySQL 存結果數(shù)據(jù),用戶可從界面選擇執(zhí)行批處理以及發(fā)送郵件。在 Doris 平臺中,報表類查詢時延一般在秒級以下。
2、多維分析
這里提到的多維分析,同樣要求數(shù)據(jù)是結構化的,適用于查詢相對靈活的場景,例如數(shù)據(jù)分析條件以及聚合維度等方面不是很確定,一般將此類數(shù)據(jù)分析定義為多維分析。相對于報表類分析,多維分析的查詢時延會稍慢,大約在會在 10s 的級別。
三、 Doris 架構
Doris 架構圖如下:
Doris 的整體架構和 TiDB 類似,借助 MySQL 協(xié)議,用戶使用任意 MySQL 的 ODBC/JDBC以及MySQL 的客戶端,都可以直接訪問 Doris。Doris 中的模塊包括 FE 和 BE 兩類:FE 主要負責元數(shù)據(jù)的管理、存儲,以及查詢的解析等;一個用戶請求經(jīng)過 FE 解析、規(guī)劃后,具體的執(zhí)行計劃會發(fā)送給 BE,BE 則會完成查詢的具體執(zhí)行。BE 節(jié)點主要負責數(shù)據(jù)的存儲、以及查詢計劃的執(zhí)行。目前平臺的 FE 部分主要使用 Java,BE 部分主要使用 C++。
四、 Doris 數(shù)據(jù)結構
如果從表的角度來看數(shù)據(jù)結構,用戶的一張 Table 會拆成多個 Tablet,Tablet 會存成多副本,存儲在不同的 BE 中,從而保證數(shù)據(jù)的高可用和高可靠。
五、 MPP(Massively Parallel Processing)
MPP 將SQL拆分成多份,分布到每臺機器執(zhí)行,最后再將結果匯總。假如有10臺機器,在大數(shù)據(jù)量下,這種查詢執(zhí)行方式可以使得查詢性能達到10倍的提升。
六、 表設計
列式存儲
Doris的表和關系型數(shù)據(jù)相同,由行和列構成。每行數(shù)據(jù)對應用戶一條記錄,每列數(shù)據(jù)有相同數(shù)據(jù)類型。所有數(shù)據(jù)的列數(shù)相同,可以動態(tài)增刪列。Doris中,張表的列可以分為維度列(也成為key列)和指標列(value列),維度列用于分組和排序,指標列可通過聚合函數(shù)SUM,COUNT,MIM,MAX,REPLACE,HLL_UNION,BITMAP_UNION等累加起來。因此,DorisDB的表也可以認為是多維的key到多維指標的映射。
稀疏索引
Doris對數(shù)據(jù)進行有序存儲,在數(shù)據(jù)有序的基礎上為其建立稀疏索引,索引粒度為block(1024行)。這其中有一個特殊的地方,就是 varchar 類型的字段。varchar 類型字段只能作為稀疏索引的最后一個字段。索引會在 varchar 處截斷,因此 varchar 如果出現(xiàn)在前面,可能索引的長度可能不足 36 個字節(jié)。具體可以參閱 數(shù)據(jù)模型、ROLLUP 及前綴索引。
除稀疏索引之外,Doris還提供bloomfilter索引,bloomfilter索引對區(qū)分度比較大的列過濾效果明顯。如果考慮到varchar不能放在稀疏索引中,可以建立bloomfilter索引。
七、 數(shù)據(jù)模型
明細模型
Doris建表的默認模型是明細模型。
一般用明細模型來處理的場景有如下特點:
1. 需要保留原始的數(shù)據(jù)(例如原始日志,原始操作記錄等)來進行分析;
2. 查詢方式靈活,不局限于預先定義的分析式,傳統(tǒng)的預聚合方式難以命中;
3. 數(shù)據(jù)更新不頻繁。導入數(shù)據(jù)的來源一般為日志數(shù)據(jù)或者是時序數(shù)據(jù),以追加寫為主要特點,數(shù)據(jù)產(chǎn)生后就不會發(fā)生太多變化。
聚合模型
適合采用聚合模型來分析的場景具有如下特點:
1. 業(yè)務方進行的查詢?yōu)閰R總類查詢,比如sum、count、 max等類型的查詢;
2. 不需要召回原始的明細數(shù)據(jù);
3. 老數(shù)據(jù)不會被頻繁更新,只會追加新數(shù)據(jù)。
Doris會將指標列按照相同維度列進行聚合。當多條數(shù)據(jù)具有相同的維度時,Doris會把指標進行聚合。從而能夠減少查詢時所需要的處理的數(shù)據(jù)量,進而提升查詢的效率。
更新模型
適合采用更新模型來分析的場景具有如下特點:
1. 已經(jīng)寫入的數(shù)據(jù)有存量的更新需求;
2. 需要進行實時數(shù)據(jù)分析。
更新模型中,排序鍵滿足唯一性約束,成為主鍵。
Doris存儲內部會給每一個批次導入數(shù)據(jù)分配一個版本號,同一主鍵的數(shù)據(jù)可能有多個版本,查詢時,最大(最新)版本的數(shù)據(jù)勝出。
八、 物化視圖
物化視圖是提取某些維度的組合建立對用戶透明的卻有真實數(shù)據(jù)的視圖表格。Doris 的物化視圖可以保證用戶在更新時,直接更新原始表,Doris 會保證原表、物化視圖原子生效。在查詢的時候用戶也只需指定原始表,Doris 會根據(jù)查詢的具體條件,選擇適合的物化視圖完成查詢。
通常用戶可以通過物化視圖功能完成以下兩種功能。
1、更換索引列進行重排列。
2、針對指定列做聚合查詢。