全量構建與增量構建性能
全量構建集羣
對數據模型中沒有指定分割時間列信息的Cube,Kylin會採用全量構建,即每次從Hive中讀取所有的數據來開始構建。一般它適用於如下兩種情形。
事實表的數據不是按時間增加的。
事實表的數據比較小或更新頻率很低,全量構建不會形成太大的開銷。請求
增量構建數據
Kylin每次都會從Hive中讀取一個時間範圍內的數據,而後進行計算,並以一個Segment的形式進行保存。下次再構建的時候,會自動以上次結束的時間爲起點時間,再選擇新的終止時間進行構建。通過屢次構建,Cube中將會有多個Segment依次按時間順序進行排列,如Seg-1,Seg-2,…,Seg-N。查詢的時候,Kylin會查詢一個或多個Segment而後再作聚合計算,以便返回正確的結果給請求者。
使用增量構建的好處是,每次只須要對新增數據進行計算,從而避免了對歷史數據進行重複計算。對於數據量很大的Cube,使用增量構建是很是有必要查詢
增量構建引起的問題時間
歷史數據刷新分割
Cube構建完成之後,若是某些歷史數據發生了改動,那麼須要針對相應的Segment進行從新計算,這種構建稱爲刷新。刷新一般只針對增量構建的Cube而言,由於全量構建的Cube只要從新所有構建就能夠獲得更新;而增量更新的Cube由於有多個Segment,所以須要先選擇要刷新的Segment,而後再進行刷新。模型
在刷新的同時,Cube仍然能夠被查詢,只不過返回的是陳舊數據。當Segment刷新完畢時,新的Segment會當即生效,查詢開始返回最新的數據。老Segment則成爲垃圾,等待回收。ab
Cube合併管理
隨着時間的遷移,Cube中可能會存在較多數量的Segment,使得查詢性能降低,而且會給HBase集羣管理帶來壓力。對此,須要適時地將一些Segment進行合併,將若干個小Segment合併成較大的Segment。
合併的好處具體以下:
1)合併相同的Key,從而減小Cube的存儲空間。
2)因爲Segment減小了,所以能夠減小查詢時的二次聚合,提升了查詢性能。
3)HTable的數量得以減小,更便於集羣的管理。