轉(zhuǎn)Apache Kylin VS Apache Doris

作者: 康凱森

日期: 2018-04-17

分類:?OLAP

1 系統(tǒng)架構

1.1 What is Kylin

1.2 What is Doris

2 數(shù)據(jù)模型

2.1 Kylin的聚合模型

2.2 Doris的聚合模型

2.3 Kylin Cuboid VS Doris RollUp

2.4 Doris的明細模型

3 存儲引擎

4 數(shù)據(jù)導入

5 查詢

6 精確去重

7 元數(shù)據(jù)

8 高性能

9 高可用

10 可維護性

10.1 部署

10.2 運維

10.3 客服

11 易用性

11.1 查詢接入

11.2 學習成本

11.3 Schema Change

12 功能

13 社區(qū)和生態(tài)

14 總結(jié)

15 參考資料

Apache Kylin 和 Apache Doris 都是優(yōu)秀的開源OLAP系統(tǒng)览濒,本文將全方位地對比Kylin和Doris呆盖。Kylin和Doris分別是MOALP和ROLAP的代表拖云,對比這兩個系統(tǒng)的目的不是為了說明哪個系統(tǒng)更好,只是為了明確每個系統(tǒng)的設計思想和架構原理应又,讓大家可以根據(jù)自己的實際需求去選擇合適的系統(tǒng)宙项,也可以進一步去思考我們?nèi)绾稳ピO計出更優(yōu)秀的OLAP系統(tǒng)

本文對Apache Kylin的理解基于近兩年來在生產(chǎn)環(huán)境大規(guī)模地使用株扛,運維和深度開發(fā)尤筐,我已向Kylin社區(qū)貢獻了98次Commit,包含多項新功能和深度優(yōu)化席里。

本文對Apache Doris的理解基于官方文檔和論文的閱讀叔磷,代碼的粗淺閱讀和較深入地測試。

注: 本文的對比基于Apache Kylin 2.0.0 和Apache Doris 0.9.0奖磁。

1 系統(tǒng)架構

1.1 What is Kylin

Kylin的核心思想是預計算改基,利用空間換時間來加速查詢模式固定的OLAP查詢

Kylin的理論基礎是Cube理論咖为,每一種維度組合稱之為Cuboid秕狰,所有Cuboid的集合是Cube。 其中由所有維度組成的Cuboid稱為Base Cuboid躁染,圖中(A,B,C,D)即為Base Cuboid鸣哀,所有的Cuboid都可以基于Base Cuboid計算出來。 在查詢時吞彤,Kylin會自動選擇滿足條件的最“小”Cuboid我衬,比如下面的SQL就會對應Cuboid(A,B):

select xx from table where A=xx group by B

下圖是Kylin數(shù)據(jù)流轉(zhuǎn)的示意圖,Kylin自身的組件只有兩個:JobServer和QueryServer饰恕。 Kylin的JobServer主要負責將數(shù)據(jù)源(Hive,Kafka)的數(shù)據(jù)通過計算引擎(MapReduce挠羔,Spark)生成Cube存儲到存儲引擎(HBase)中;QueryServer主要負責SQL的解析埋嵌,邏輯計劃的生成和優(yōu)化破加,向HBase的多個Region發(fā)起請求,并對多個Region的結(jié)果進行匯總雹嗦,生成最終的結(jié)果集范舀。?

下圖是Kylin可插拔的架構圖, 在架構設計上,Kylin的數(shù)據(jù)源了罪,構建Cube的計算引擎锭环,存儲引擎都是可插拔的。Kylin的核心就是這套可插拔架構泊藕,Cube數(shù)據(jù)模型和Cuboid的算法田藐。

1.2 What is Doris

Doris是一個MPP的OLAP系統(tǒng),主要整合了Google Mesa(數(shù)據(jù)模型)吱七,Apache Impala(MPP Query Engine)和Apache ORCFile?(存儲格式汽久,編碼和壓縮) 的技術。

Doris的系統(tǒng)架構如下踊餐,Doris主要分為FE和BE兩個組件景醇,F(xiàn)E主要負責查詢的編譯,分發(fā)和元數(shù)據(jù)管理(基于內(nèi)存吝岭,類似HDFS NN)三痰;BE主要負責查詢的執(zhí)行和存儲系統(tǒng)丧荐。

2 數(shù)據(jù)模型

2.1 Kylin的聚合模型

Kylin將表中的列分為維度列和指標列周叮。在數(shù)據(jù)導入和查詢時相同維度列中的指標會按照對應的聚合函數(shù)(Sum, Count, Min, Max, 精確去重,近似去重牍戚,百分位數(shù)幕帆,TOPN)進行聚合获搏。

在存儲到HBase時,Cuboid+維度 會作為HBase的Rowkey, 指標會作為HBase的Value失乾,一般所有指標會在HBase的一個列族常熙,每列對應一個指標,但對于較大的去重指標會單獨拆分到第2個列族碱茁。

2.2 Doris的聚合模型

Doris的聚合模型借鑒自Mesa裸卫,但本質(zhì)上和Kylin的聚合模型一樣,只不過Doris中將維度稱作Key纽竣,指標稱作Value墓贿。

Doris中比較獨特的聚合函數(shù)是Replace函數(shù),這個聚合函數(shù)能夠保證相同Keys的記錄只保留最新的Value蜓氨,可以借助這個Replace函數(shù)來實現(xiàn)點更新聋袋。一般OLAP系統(tǒng)的數(shù)據(jù)都是只支持Append的,但是像電商中交易的退款语盈,廣告點擊中的無效點擊處理舱馅,都需要去更新之前寫入的單條數(shù)據(jù),在Kylin這種沒有Relpace函數(shù)的系統(tǒng)中我們必須把包含對應更新記錄的整個Segment數(shù)據(jù)全部重刷刀荒,但是有了Relpace函數(shù)代嗤,我們只需要再追加1條新的記錄即可。 但是Doris中的Repalce函數(shù)有個缺點:無法支持預聚合缠借,就是說只要你的SQL中包含了Repalce函數(shù)干毅,即使有其他可以已經(jīng)預聚合的Sum,Max指標泼返,也必須現(xiàn)場計算硝逢。

為什么Doirs可以支持點更新呢?

Kylin中的Segment是不可變的,也就是說HFile一旦生成渠鸽,就不再發(fā)生任何變化叫乌。但是Doirs中的Segment文件和HBase一樣,是可以進行Compaction的徽缚,具體可以參考Google Mesa 論文解讀中的Mesa數(shù)據(jù)版本化管理

Doris的聚合模型相比Kylin有個缺點:就是一個Column只能有一個預聚合函數(shù)憨奸,無法設置多個預聚合函數(shù)。 不過Doris可以現(xiàn)場計算出其他的聚合函數(shù)凿试。 Apache Doris的開發(fā)者Review時提到排宰,針對這個問題,Doris還有一種解法:由于Doris支持多表導入的原子更新那婉,所以1個Column需要多個聚合函數(shù)時板甘,可以在Doris中建多張表,同一份數(shù)據(jù)導入時详炬,Doris可以同時原子更新多張Doris表盐类,缺點是多張Doris表的查詢路由需要應用層來完成。

Doris中和Kylin的Cuboid等價的概念是RollUp表痕寓,Cuboid和RollUp表都可以認為是一種Materialized Views或者Index傲醉。Doris的RollUp表和Kylin的Cuboid一樣,在查詢時不需要顯示指定呻率,系統(tǒng)內(nèi)部會根據(jù)查詢條件進行路由硬毕。 如下圖所示:

Doris中RollUp表的路由規(guī)則如下:

選擇包含所有查詢列的RollUp表

按照過濾和排序的Column篩選最符合的RollUp表

按照Join的Column篩選最符合的RollUp表

行數(shù)最小的

列數(shù)最小的

2.3 Kylin Cuboid VS Doris RollUp

2.4 Doris的明細模型

由于Doris的聚合模型存在下面的缺陷,Doris引入了明細模型礼仗。

必須區(qū)分維度列和指標列

維度列很多時吐咳,Sort的成本很高

Count成本很高,需要讀取所有維度列(可以參考Kylin的解決方法進行優(yōu)化)

Doris的明細模型不會有任何預聚合元践,不區(qū)分維度列和指標列韭脊,但是在建表時需要指定Sort Columns,數(shù)據(jù)導入時會根據(jù)Sort Columns進行排序单旁,查詢時根據(jù)Sort Column過濾會比較高效沪羔。

如下圖所示,Sort Columns是Year和City象浑。

這里需要注意一點蔫饰,Doris中一張表只能有一種數(shù)據(jù)模型,即要么是聚合模型愉豺,要么是明細模型篓吁,而且Roll Up表的數(shù)據(jù)模型必須和Base表一致,也就是說明細模型的Base 表不能有聚合模型的Roll Up表蚪拦。

3 存儲引擎

Kylin存儲引擎HBase:

如上圖所示杖剪,在Kylin中1個Cube可以按照時間拆分為多個Segment,Segment是Kylin中數(shù)據(jù)導入和刷新的最小單位冻押。Kylin中1個Segment對應HBase中一張Table。 HBase中的Table會按照Range分區(qū)拆分為多個Region,每個Region會按照大小拆分為多個HFile盛嘿。

關于HFile的原理網(wǎng)上講述的文章已經(jīng)很多了洛巢,我這里簡單介紹下。首先HFile整體上可以分為元信息孩擂,Blcoks狼渊,Index3部分,Blcoks和Index都可以分為Data和Meta兩部分类垦。Block是數(shù)據(jù)讀取的最小單位,Block有多個Key-Value組成城须,一個Key-Value代表HBase中的一行記錄蚤认,Key-Value由Kylin-Len,Value-Len糕伐,Key-Bytes,Value-Bytes 4部分組成砰琢。更詳細的信息大家可以參考下圖(下圖來源于互聯(lián)網(wǎng),具體出處不詳):

Doris存儲引擎:

如上圖所示良瞧,Doris的Table支持二級分區(qū)陪汽,可以先按照日期列進行一級分區(qū),再按照指定列Hash分桶褥蚯。具體來說挚冤,1個Table可以按照日期列分為多個Partition, 每個Partition可以包含多個Tablet赞庶,Tablet是數(shù)據(jù)移動训挡、復制等操作的最小物理存儲單元,各個Tablet之間的數(shù)據(jù)沒有交集歧强,并且在物理上獨立存儲澜薄。Partition 可以視為邏輯上最小的管理單元,數(shù)據(jù)的導入與刪除摊册,僅能針對一個 Partition進行肤京。1個Table中Tablet的數(shù)量= Partition num * Bucket num。Tablet會按照一定大忻┨亍(256M)拆分為多個Segment文件忘分,Segment是列存的,但是會按行(1024)拆分為多個Rowblock温治。

下面我們來看下Doris Segment文件的具體格式饭庞,Doris文件格式主要參考了Apache ORC。如上圖所示熬荆,Doris文件主要由Meta和Data兩部分組成舟山,Meta主要包括文件本身的Header,Segment Meta,Column Meta累盗,和每個Column 數(shù)據(jù)流的元數(shù)據(jù)寒矿,每部分的具體內(nèi)容大家看圖即可,比較詳細若债。 Data部分主要包含每一列的Index和Data符相,這里的Index指每一列的Min,Max值和數(shù)據(jù)流Stream的Position;Data就是每一列具體的數(shù)據(jù)內(nèi)容蠢琳,Data根據(jù)不同的數(shù)據(jù)類型會用不同的Stream來存儲啊终,Present Stream代表每個Value是否是Null,Data Stream代表二進制數(shù)據(jù)流傲须,Length Stream代表非定長數(shù)據(jù)類型的長度蓝牲。 下圖是String使用字典編碼和直接存儲的Stream例子。

下面我們來看下Doris的前綴索引:

本質(zhì)上泰讽,Doris 的數(shù)據(jù)存儲是類似 SSTable(Sorted String Table)的數(shù)據(jù)結(jié)構例衍。該結(jié)構是一種有序的數(shù)據(jù)結(jié)構,可以按照指定的列有序存儲已卸。在這種數(shù)據(jù)結(jié)構上佛玄,以排序列作為條件進行查找,會非常的高效累澡。而前綴索引梦抢,即在排序的基礎上,實現(xiàn)的一種根據(jù)給定前綴列永乌,快速查詢數(shù)據(jù)的索引方式惑申。前綴索引文件的格式如上圖所示,索引的Key是每個Rowblock第一行記錄的Sort Key的前36個字節(jié)翅雏,Value是Rowblock在Segment文件的偏移量圈驼。

有了前綴索引后,我們查詢特定Key的過程就是兩次二分查找:

先加載Index文件望几,二分查找Index文件獲取包含特定Key的Row blocks的Offest,然后從Sement Files中獲取指定的Rowblock绩脆;

在Rowblocks中二分查找特定的Key

4 數(shù)據(jù)導入

Kylin數(shù)據(jù)導入:?

如上圖,Kylin數(shù)據(jù)導入主要分為建Hive大寬表(這一步會處理Join)橄抹;維度列構建字典靴迫;逐層構建Cuboid;Cuboid轉(zhuǎn)為HFile楼誓;Load HFile To HBase; 元數(shù)據(jù)更新這幾步玉锌。

其中Redistribute大寬表這一步的作用是為了將整個表的數(shù)據(jù)搞均勻,避免后續(xù)的步驟中有數(shù)據(jù)傾斜疟羹,Kylin有配置可以跳過這一步主守。

其中Extract Distinct Columns這一步的作用是獲取需要構建字典的維度列的Distinct值禀倔。假如一個ID維度列有1,2参淫,1救湖,2,2涎才,1鞋既,1,2這8行耍铜,那么經(jīng)過這一步后ID列的值就只有1邑闺,2兩行,做這一步是為了下一步對維度列構建字典時更快速业扒。

其他幾個步驟都比較好理解检吆,我就不再贅述。更詳細的信息可以參考?Apache Kylin Cube 構建原理

Doris數(shù)據(jù)導入:?

Doris 數(shù)據(jù)導入的兩個核心階段是ETL和LOADING, ETL階段主要完成以下工作:

數(shù)據(jù)類型和格式的校驗

根據(jù)Teblet拆分數(shù)據(jù)

按照Key列進行排序, 對Value進行聚合

LOADING階段主要完成以下工作:

每個Tablet對應的BE拉取排序好的數(shù)據(jù)

進行數(shù)據(jù)的格式轉(zhuǎn)換程储,生成索引

LOADING完成后會進行元數(shù)據(jù)的更新。

5 查詢

Kylin查詢:

如上圖臂寝,整個Kylin的查詢過程比較簡單章鲤,是個Scatter-Gather的模型。圖中圓形框的內(nèi)容發(fā)生在Kylin QueryServer端咆贬,方形框的內(nèi)容發(fā)生在HBase端败徊。Kylin QueryServer端收到SQL后,會先進行SQL的解析掏缎,然后生成和優(yōu)化Plan皱蹦,再根據(jù)Plan生成和編譯代碼,之后會根據(jù)Plan生成HBase的Scan請求眷蜈,如果可能沪哺,HBase端除了Scan之外,還會進行過濾和聚合(基于HBase的Coprocessor實現(xiàn))酌儒,Kylin會將HBase端返回的結(jié)果進行合并辜妓,交給Calcite之前生成好的代碼進行計算。

Doris查詢:

Doris的查詢引擎使用的是Impala忌怎,是MPP架構籍滴。 Doris的FE 主要負責SQL的解析,語法分析榴啸,查詢計劃的生成和優(yōu)化孽惰。查詢計劃的生成主要分為兩步:

生成單節(jié)點查詢計劃 (上圖左下角)

將單節(jié)點的查詢計劃分布式化,生成PlanFragment(上圖右半部分)

第一步主要包括Plan Tree的生成鸥印,謂詞下推勋功, Table Partitions pruning坦报,Column projections,Cost-based優(yōu)化等酝润;第二步 將單節(jié)點的查詢計劃分布式化燎竖,分布式化的目標是最小化數(shù)據(jù)移動和最大化本地Scan,分布式化的方法是增加ExchangeNode要销,執(zhí)行計劃樹會以ExchangeNode為邊界拆分為PlanFragment构回,1個PlanFragment封裝了在一臺機器上對同一數(shù)據(jù)集的部分PlanTree。如上圖所示:各個Fragment的數(shù)據(jù)流轉(zhuǎn)和最終的結(jié)果發(fā)送依賴:DataSink疏咐。

當FE生成好查詢計劃樹后纤掸,BE對應的各種Plan Node(Scan, Join, Union, Aggregation, Sort等)執(zhí)行自己負責的操作即可。

6 精確去重

Kylin的精確去重:

Kylin的精確去重是基于全局字典和RoaringBitmap實現(xiàn)的基于預計算的精確去重浑塞。具體可以參考?Apache Kylin 精確去重和全局字典權威指南

Doris的精確去重:

Doris的精確去重是現(xiàn)場精確去重借跪,Doris計算精確去重時會拆分為兩步:

按照所有的group by 字段和精確去重的字段進行聚合

按照所有的group by 字段進行聚合

SELECT a, COUNT(DISTINCT b, c), MIN(d), COUNT(*) FROM T GROUP BY a* -1st phase grouping exprs: a, b, c* -1st phase agg exprs: MIN(d), COUNT(*)* -2nd phase grouping exprs: a* -2nd phase agg exprs: COUNT(*), MIN(), SUM()

下面是個簡單的等價轉(zhuǎn)換的例子:

select count(distinct lo_ordtotalprice)fromssb_sf20.v2_lineorder;select count(*)from(select count(*)fromssb_sf20.v2_lineorder group by lo_ordtotalprice) a;

Doris現(xiàn)場精確去重計算性能和去重列的基數(shù)去重指標個數(shù)酌壕、過濾后的數(shù)據(jù)大小負相關掏愁;

7 元數(shù)據(jù)

Kylin的元數(shù)據(jù)?:

Kylin的元數(shù)據(jù)是利用HBase存儲的,可以很好地橫向擴展卵牍。Kylin每個具體的元數(shù)據(jù)都是一個Json文件果港,HBase的Rowkey是文件名,Value是Json文件的內(nèi)容糊昙。Kylin的元數(shù)據(jù)表設置了IN_MEMORY => 'true' 屬性, 元數(shù)據(jù)表會常駐HBase RegionServer的內(nèi)存辛掠,所以元數(shù)據(jù)的查詢性能很好,一般在幾ms到幾十ms释牺。

Kylin元數(shù)據(jù)利用HBase存儲的一個問題是萝衩,在Kylin可插拔架構下,即使我們實現(xiàn)了另一種存儲引擎没咙,我們也必須部署HBase來存儲元數(shù)據(jù)猩谊,所以Kylin要真正做到存儲引擎的可插拔,就必須實現(xiàn)一個獨立的元數(shù)據(jù)存儲镜撩。

Doris的元數(shù)據(jù)

Doris的元數(shù)據(jù)是基于內(nèi)存的预柒,這樣做的好處是性能很好且不需要額外的系統(tǒng)依賴。 缺點是單機的內(nèi)存是有限的袁梗,擴展能力受限宜鸯,但是根據(jù)Doris開發(fā)者的反饋,由于Doris本身的元數(shù)據(jù)不多遮怜,所以元數(shù)據(jù)本身占用的內(nèi)存不是很多淋袖,目前用大內(nèi)存的物理機,應該可以支撐數(shù)百臺機器的OLAP集群锯梁。 此外即碗,OLAP系統(tǒng)和HDFS這種分布式存儲系統(tǒng)不一樣焰情,我們部署多個集群的運維成本和1個集群區(qū)別不大。

關于Doris元數(shù)據(jù)的具體原理大家可以參考Doris官方文檔Doris 元數(shù)據(jù)設計文檔

8 高性能

Why Kylin Query Fast:

Kylin查詢快的核心原因就是預計算剥懒,如圖(圖片出處?Apache kylin 2.0: from classic olap to real-time data warehouse)内舟,Kylin現(xiàn)場查詢時不需要Join,也幾乎不需要聚合初橘,主要就是Scan + Filter验游。

Why Doris Query Fast:

In-Memory Metadata。 Doris的元數(shù)據(jù)就在內(nèi)存中保檐,元數(shù)據(jù)訪問速度很快耕蝉。

聚合模型可以在數(shù)據(jù)導入時進行預聚合。

和Kylin一樣夜只,也支持預計算的RollUp Table垒在。

MPP的查詢引擎。

向量化執(zhí)行扔亥。相比Kylin中Calcite的代碼生成场躯,向量化執(zhí)行在處理高并發(fā)的低延遲查詢時性能更好,Kylin的代碼生成本身可能會花費幾十ms甚至幾百ms旅挤。

列式存儲 + 前綴索引推盛。

9 高可用

Kylin高可用:

Kylin JobServer的高可用: Kylin的JobServer是無狀態(tài)的,一臺JobServer掛掉后谦铃,其他JobServer會很快接管正在Running的Job。JobServer的高可用是基于Zookeeper實現(xiàn)的榔昔,具體可以參考Apache Kylin Job 生成和調(diào)度詳解驹闰。

Kylin QueryServer的高可用:Kylin的QueryServer也是無狀態(tài)的,其高可用一般通過Nginx這類的負載均衡組件來實現(xiàn)撒会。

Kylin Hadoop依賴的高可用: 要單純保證Kylin自身組件的高可用并不困難嘹朗,但是要保證Kylin整體數(shù)據(jù)導入和查詢的高可用是十分困難的,因為必須同時保證HBase诵肛,Hive屹培,Hive Metastore,Spark怔檩,Mapreduce褪秀,HDFS,Yarn薛训,Zookeeper媒吗,Kerberos這些服務的高可用。

Doris高可用:

Doris FE的高可用: Doris FE的高可用主要基于BerkeleyDB java version實現(xiàn)乙埃,BDB-JE實現(xiàn)了類Paxos一致性協(xié)議算法闸英。

Doris BE的高可用:?Doris會保證每個Tablet的多個副本分配到不同的BE上锯岖,所以一個BE down掉,不會影響查詢的可用性甫何。

10 可維護性

10.1 部署

Kylin部署:如果完全從零開始出吹,你就需要部署1個Hadoop集群和HBase集群。 即使公司已經(jīng)有了比較完整的Hadoop生態(tài)辙喂,在部署Kylin前捶牢,你也必須先部署Hadoop客戶端,HBase客戶端加派,Hive客戶端叫确,Spark客戶端。

Doris部署: 直接部署FE和BE組件即可芍锦。

10.2 運維

Kylin運維:?運維Kylin對Admin有較高的要求竹勉,首先必須了解HBase,Hive娄琉,MapReduce次乓,Spark,HDFS孽水,Yarn的原理票腰;其次對MapReduce Job和Spark Job的問題排查和調(diào)優(yōu)經(jīng)驗要豐富;然后必須掌握對Cube復雜調(diào)優(yōu)的方法女气;最后出現(xiàn)問題時排查的鏈路較長杏慰,復雜度較高。

Doris運維:?Doris只需要理解和掌握系統(tǒng)本身即可炼鞠。

10.3 客服

Kylin 客服:?需要向用戶講清Hadoop相關的一堆概念缘滥;需要教會用戶Kylin Web的使用;需要教會用戶如何進行Cube優(yōu)化(沒有統(tǒng)一谒主,簡潔的優(yōu)化原則)朝扼;需要教會用戶怎么查看MR和Spark日志;需要教會用戶怎么查詢霎肯;

Doris 客服:?需要教會用戶聚合模型擎颖,明細模型,前綴索引观游,RollUp表這些概念搂捧。

11 易用性

11.1 查詢接入

Kylin查詢接入:Kylin支持Htpp,JDBC,ODBC 3種查詢方式。

Doris查詢接入:?Doris支持Mysql協(xié)議备典,現(xiàn)有的大量Mysql工具都可以直接使用异旧,用戶的學習和遷移成本較低。

11.2 學習成本

Kylin學習成本:用戶要用好Kylin提佣,需要理解以下概念:

Cuboid

聚集組

強制維度

聯(lián)合維度

層次維度

衍生維度

Extend Column

HBase RowKey 順序

此外吮蛹,前面提到過荤崇,用戶還需要學會怎么看Mapreduce Job和Spark Job日志。

Doris學習成本:用戶需要理解聚合模型潮针,明細模型术荤,前綴索引,RollUp表這些概念每篷。

11.3 Schema Change

Schema在線變更是一個十分重要的feature瓣戚,因為在實際業(yè)務中,Schema的變更會十分頻繁焦读。

Kylin Schema Change: Kylin中用戶對Cube Schema的任何改變子库,都需要在Staging環(huán)境重刷所有數(shù)據(jù),然后切到Prod環(huán)境矗晃。整個過程周期很長仑嗅,資源浪費比較嚴重

Doris Schema Change:Doris支持Online Schema Change张症。

所謂的Schema在線變更就是指Scheme的變更不會影響數(shù)據(jù)的正常導入和查詢仓技,Doris中的Schema在線變更有3種:

direct schema change:就是重刷全量數(shù)據(jù),成本最高俗他,和kylin的做法類似脖捻。當修改列的類型,稀疏索引中加一列時需要按照這種方法進行兆衅。

sorted schema change: 改變了列的排序方式地沮,需對數(shù)據(jù)進行重新排序。例如刪除排序列中的一列, 字段重排序羡亩。

linked schema change: 無需轉(zhuǎn)換數(shù)據(jù)诉濒,直接完成。對于歷史數(shù)據(jù)不會重刷夕春,新攝入的數(shù)據(jù)都按照新的Schema處理,對于舊數(shù)據(jù)专挪,新加列的值直接用對應數(shù)據(jù)類型的默認值填充及志。例如加列操作。Druid也支持這種做法寨腔。

12 功能

注: 關于Kylin的明細查詢速侈,Kylin本身只有聚合模型,但是也可以通過將所有列作為維度列迫卢,只構建Base Cuboid來實現(xiàn)明細查詢倚搬, 缺點是效率比較低下。

注: 雖然Doirs理論上可以同時支持高并發(fā)乾蛤,低延遲的OLAP查詢和高吞吐的Adhoc查詢每界,但顯然這兩類查詢會相互影響捅僵。所以Baidu在實際應用中也是用兩個集群分別滿足OLAP查詢和Adhoc查詢需求。

13 社區(qū)和生態(tài)

Doris社區(qū)剛剛起步眨层,目前核心用戶只有Baidu庙楚;Kylin的社區(qū)和生態(tài)已經(jīng)比較成熟,Kylin是第一個完全由中國開發(fā)者貢獻的Apache頂級開源項目趴樱,目前已經(jīng)在多家大型公司的生產(chǎn)環(huán)境中使用馒闷。

14 總結(jié)

本文從多方面對比了Apache Kylin和Apache Doris,有理解錯誤的地方歡迎指正叁征。本文更多的是對兩個系統(tǒng)架構和原理的客觀描述纳账,主觀判斷較少。最近在調(diào)研了Doirs捺疼,ClickHouse疏虫,TiDB之后,也一直在思考OLAP系統(tǒng)的發(fā)展趨勢是怎樣的帅涂,下一代更優(yōu)秀的OLAP系統(tǒng)架構應該是怎樣的议薪,一個系統(tǒng)是否可以同時很好的支持OLTP和OLAP,這些問題想清楚后我會再寫篇文章描述下媳友,當然斯议,大家有好的想法,也歡迎直接Comment醇锚。

15 參考資料

1 Doris文檔和源碼

2 Kylin源碼

3 Apache kylin 2.0: from classic olap to real-time data warehouse?在Kylin高性能部分引用了第4頁PPT的截圖

4 百度MPP數(shù)據(jù)倉庫Palo開源架構解讀與應用?在Doris查詢部分引用了第31頁PPT的截圖


原文地址:https://blog.bcmeng.com/post/apache-kylin-vs-baidu-palo.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末哼御,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子焊唬,更是在濱河造成了極大的恐慌恋昼,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赶促,死亡現(xiàn)場離奇詭異液肌,居然都是意外死亡,警方通過查閱死者的電腦和手機鸥滨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門嗦哆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人婿滓,你說我怎么就攤上這事老速。” “怎么了凸主?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵橘券,是天一觀的道長。 經(jīng)常有香客問我,道長旁舰,這世上最難降的妖魔是什么锋华? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮鬓梅,結(jié)果婚禮上供置,老公的妹妹穿的比我還像新娘。我一直安慰自己绽快,他們只是感情好芥丧,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坊罢,像睡著了一般续担。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上活孩,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天物遇,我揣著相機與錄音,去河邊找鬼憾儒。 笑死询兴,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的起趾。 我是一名探鬼主播诗舰,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼训裆!你這毒婦竟也來了眶根?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤边琉,失蹤者是張志新(化名)和其女友劉穎属百,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體变姨,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡族扰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了定欧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片别伏。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖忧额,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情愧口,我是刑警寧澤睦番,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響托嚣,放射性物質(zhì)發(fā)生泄漏巩检。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一示启、第九天 我趴在偏房一處隱蔽的房頂上張望兢哭。 院中可真熱鬧,春花似錦夫嗓、人聲如沸迟螺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽矩父。三九已至,卻和暖如春排霉,著一層夾襖步出監(jiān)牢的瞬間窍株,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工攻柠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留球订,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓瑰钮,卻偏偏與公主長得像冒滩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子飞涂,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348