Doris:基于 MPP 架構(gòu)的高性能實(shí)時(shí)分析型數(shù)據(jù)庫(kù)
1.Doris 介紹
Apache Doris 是一個(gè)基于 MPP(Massively Parallel Processing
,大規(guī)模并行處理)架構(gòu)的高性能、實(shí)時(shí)的分析型數(shù)據(jù)庫(kù),以極速易用的特點(diǎn)被人們所熟知,僅需亞秒級(jí)響應(yīng)時(shí)間即可返回海量數(shù)據(jù)下的查詢(xún)結(jié)果,不僅可以支持高并發(fā)的點(diǎn)查詢(xún)場(chǎng)景,也能支持高吞吐的復(fù)雜分析場(chǎng)景。基于此,Apache Doris 能夠較好的滿(mǎn)足 報(bào)表分析、即席查詢(xún)、統(tǒng)一數(shù)倉(cāng)構(gòu)建、數(shù)據(jù)湖聯(lián)邦查詢(xún)加速 等使用場(chǎng)景,用戶(hù)可以在此之上構(gòu)建 用戶(hù)行為分析、AB 實(shí)驗(yàn)平臺(tái)、日志檢索分析、用戶(hù)畫(huà)像分析、訂單分析 等應(yīng)用。
Apache Doris 最早是誕生于百度廣告報(bào)表業(yè)務(wù)的 Palo 項(xiàng)目,
2017
2017
2017 年正式對(duì)外開(kāi)源,
2018
2018
2018 年
7
7
7 月由百度捐贈(zèng)給 Apache 基金會(huì)進(jìn)行孵化,之后在 Apache 導(dǎo)師的指導(dǎo)下由孵化器項(xiàng)目管理委員會(huì)成員進(jìn)行孵化和運(yùn)營(yíng)。目前 Apache Doris 社區(qū)已經(jīng)聚集了來(lái)自不同行業(yè)數(shù)百家企業(yè)的
400
400
400 余位貢獻(xiàn)者,并且每月活躍貢獻(xiàn)者人數(shù)也超過(guò)
100
100
100 位。
2022
2022
2022 年
6
6
6 月,Apache Doris 成功從 Apache 孵化器畢業(yè),正式成為 Apache 頂級(jí)項(xiàng)目(Top-Level Project
,TLP
)
Apache Doris 如今在中國(guó)乃至全球范圍內(nèi)都擁有著廣泛的用戶(hù)群體,截止目前, Apache Doris 已經(jīng)在全球超過(guò) 2000 2000 2000 家企業(yè)的生產(chǎn)環(huán)境中得到應(yīng)用,在中國(guó)市值或估值排行前 50 50 50 的互聯(lián)網(wǎng)公司中,有超過(guò) 80 % 80\% 80% 長(zhǎng)期使用 Apache Doris,包括百度、美團(tuán)、小米、京東、字節(jié)跳動(dòng)、騰訊、網(wǎng)易、快手、微博、貝殼等。同時(shí)在一些傳統(tǒng)行業(yè)如金融、能源、制造、電信等領(lǐng)域也有著豐富的應(yīng)用。
2.使用場(chǎng)景
如下圖所示,數(shù)據(jù)源經(jīng)過(guò)各種數(shù)據(jù)集成和加工處理后,通常會(huì)入庫(kù)到 實(shí)時(shí)數(shù)倉(cāng) Doris 和 離線(xiàn)湖倉(cāng)(Hive
、Iceberg
、Hudi
中),Apache Doris 被廣泛應(yīng)用在以下場(chǎng)景中。
-
報(bào)表分析
- 實(shí)時(shí)看板 (Dashboards)
- 面向企業(yè)內(nèi)部分析師和管理者的報(bào)表
- 面向用戶(hù)或者客戶(hù)的高并發(fā)報(bào)表分析(
Customer Facing Analytics
)。比如面向網(wǎng)站主的站點(diǎn)分析、面向廣告主的廣告報(bào)表,并發(fā)通常要求成千上萬(wàn)的 QPS ,查詢(xún)延時(shí)要求毫秒級(jí)響應(yīng)。著名的電商公司京東在廣告報(bào)表中使用 Apache Doris ,每天寫(xiě)入 100 100 100 億行數(shù)據(jù),查詢(xún)并發(fā) QPS 上萬(wàn), 99 99 99 分位的查詢(xún)延時(shí) 150 150 150 m s ms ms。
-
即席查詢(xún)(
Ad-hoc Query
):面向分析師的自助分析,查詢(xún)模式不固定,要求較高的吞吐。小米公司基于 Doris 構(gòu)建了增長(zhǎng)分析平臺(tái)(Growing Analytics
,GA
),利用用戶(hù)行為數(shù)據(jù)對(duì)業(yè)務(wù)進(jìn)行增長(zhǎng)分析,平均查詢(xún)延時(shí) 10 10 10 s s s, 95 95 95 分位的查詢(xún)延時(shí) 30 30 30 s s s 以?xún)?nèi),每天的 SQL 查詢(xún)量為數(shù)萬(wàn)條。 -
統(tǒng)一數(shù)倉(cāng)構(gòu)建:一個(gè)平臺(tái)滿(mǎn)足統(tǒng)一的數(shù)據(jù)倉(cāng)庫(kù)建設(shè)需求,簡(jiǎn)化繁瑣的大數(shù)據(jù)軟件棧。海底撈基于 Doris 構(gòu)建的統(tǒng)一數(shù)倉(cāng),替換了原來(lái)由
Spark
、Hive
、Kudu
、Hbase
、Phoenix
組成的舊架構(gòu),架構(gòu)大大簡(jiǎn)化。 -
數(shù)據(jù)湖聯(lián)邦查詢(xún):通過(guò)外表的方式聯(lián)邦分析位于 Hive、Iceberg、Hudi 中的數(shù)據(jù),在避免數(shù)據(jù)拷貝的前提下,查詢(xún)性能大幅提升。
3.技術(shù)概述
Doris 整體架構(gòu)如下圖所示,Doris 架構(gòu)非常簡(jiǎn)單,只有兩類(lèi)進(jìn)程
- Frontend(FE),主要負(fù)責(zé)用戶(hù)請(qǐng)求的接入、查詢(xún)解析規(guī)劃、元數(shù)據(jù)的管理、節(jié)點(diǎn)管理相關(guān)工作。
- Backend(BE),主要負(fù)責(zé)數(shù)據(jù)存儲(chǔ)、查詢(xún)計(jì)劃的執(zhí)行。
這兩類(lèi)進(jìn)程都是可以橫向擴(kuò)展的,單集群可以支持到數(shù)百臺(tái)機(jī)器,數(shù)十 PB 的存儲(chǔ)容量。并且這兩類(lèi)進(jìn)程通過(guò)一致性協(xié)議來(lái)保證服務(wù)的高可用和數(shù)據(jù)的高可靠。這種高度集成的架構(gòu)設(shè)計(jì)極大的降低了一款分布式系統(tǒng)的運(yùn)維成本。
在 使用接口 方面,Doris 采用 MySQL 協(xié)議,高度兼容 MySQL 語(yǔ)法,支持標(biāo)準(zhǔn) SQL,用戶(hù)可以通過(guò)各類(lèi)客戶(hù)端工具來(lái)訪(fǎng)問(wèn) Doris,并支持與 BI 工具的無(wú)縫對(duì)接。Doris 當(dāng)前支持多種主流的 BI 產(chǎn)品,包括不限于 SmartBI、DataEase、FineBI、Tableau、Power BI、SuperSet 等,只要支持 MySQL 協(xié)議的 BI 工具,Doris 就可以作為數(shù)據(jù)源提供查詢(xún)支持。
在 存儲(chǔ)引擎 方面,Doris 采用列式存儲(chǔ),按列進(jìn)行數(shù)據(jù)的編碼壓縮和讀取,能夠?qū)崿F(xiàn)極高的壓縮比,同時(shí)減少大量非相關(guān)數(shù)據(jù)的掃描,從而更加有效利用 IO 和 CPU 資源。
Doris 也支持比較豐富的索引結(jié)構(gòu),來(lái)減少數(shù)據(jù)的掃描:
- Sorted Compound Key Index:可以最多指定三個(gè)列組成復(fù)合排序鍵,通過(guò)該索引,能夠有效進(jìn)行數(shù)據(jù)裁剪,從而能夠更好支持高并發(fā)的報(bào)表場(chǎng)景。
-
Z-order Index:使用
Z-order
索引,可以高效對(duì)數(shù)據(jù)模型中的任意字段組合進(jìn)行范圍查詢(xún)。 - Min/Max:有效過(guò)濾數(shù)值類(lèi)型的等值和范圍查詢(xún)。
- Bloom Filter:對(duì)高基數(shù)列的等值過(guò)濾裁剪非常有效。
- Invert Index:能夠?qū)θ我庾侄螌?shí)現(xiàn)快速檢索。
在存儲(chǔ)模型方面,Doris 支持多種存儲(chǔ)模型,針對(duì)不同的場(chǎng)景做了針對(duì)性的優(yōu)化:
- Aggregate Key 模型:相同 Key 的 Value 列合并,通過(guò)提前聚合大幅提升性能。
- Unique Key 模型:Key 唯一,相同 Key 的數(shù)據(jù)覆蓋,實(shí)現(xiàn)行級(jí)別數(shù)據(jù)更新。
- Duplicate Key 模型:明細(xì)數(shù)據(jù)模型,滿(mǎn)足事實(shí)表的明細(xì)存儲(chǔ)。
Doris 也支持強(qiáng)一致的物化視圖,物化視圖的更新和選擇都在系統(tǒng)內(nèi)自動(dòng)進(jìn)行,不需要用戶(hù)手動(dòng)選擇,從而大幅減少了物化視圖維護(hù)的代價(jià)。
在 查詢(xún)引擎 方面,Doris 采用 MPP 的模型,節(jié)點(diǎn)間和節(jié)點(diǎn)內(nèi)都并行執(zhí)行,也支持多個(gè)大表的分布式 Shuffle Join,從而能夠更好應(yīng)對(duì)復(fù)雜查詢(xún)。
Doris 查詢(xún)引擎是向量化的查詢(xún)引擎,所有的內(nèi)存結(jié)構(gòu)能夠按照列式布局,能夠達(dá)到大幅減少虛函數(shù)調(diào)用、提升 Cache 命中率,高效利用 SIMD
(Single Instruction Multiple Data
,單指令多數(shù)據(jù)流)指令的效果。在寬表聚合場(chǎng)景下性能是非向量化引擎的
5
5
5 ~
10
10
10 倍。
Doris 采用了 Adaptive Query Execution(自適應(yīng)查詢(xún)執(zhí)行) 技術(shù), 可以根據(jù) Runtime Statistics 來(lái)動(dòng)態(tài)調(diào)整執(zhí)行計(jì)劃,比如通過(guò) Runtime Filter 技術(shù)能夠在運(yùn)行時(shí)生成 Filter 推到 Probe 側(cè),并且能夠?qū)?Filter 自動(dòng)穿透到 Probe 側(cè)最底層的 Scan 節(jié)點(diǎn),從而大幅減少 Probe 的數(shù)據(jù)量,加速 Join 性能。Doris 的 Runtime Filter 支持 In
/ Min
/ Max
/ Bloom
Filter。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-675185.html
在 優(yōu)化器 方面 Doris 使用 CBO(Rule-Based Optimizer
)和 RBO(Cost-Based Optimizer
)結(jié)合的優(yōu)化策略,RBO 支持常量折疊、子查詢(xún)改寫(xiě)、謂詞下推等,CBO 支持 Join Reorder。目前 CBO 還在持續(xù)優(yōu)化中,主要集中在更加精準(zhǔn)的統(tǒng)計(jì)信息收集和推導(dǎo),更加精準(zhǔn)的代價(jià)模型預(yù)估等方面。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-675185.html
到了這里,關(guān)于【大數(shù)據(jù)】Doris:基于 MPP 架構(gòu)的高性能實(shí)時(shí)分析型數(shù)據(jù)庫(kù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!