Kylin - 剪枝優化及其方法

爲什麼要進行剪枝優化?

在沒有采取任何的優化措施的時候,Kylin會對每一個維度組合進行預計算,若有4個維度,則會有將近2^4 = 16個Cuboid需要進行計算。但是我們知道很多維度是:

  • 1.不需要參與計算或者說不常用的
  • 2.與其他的維度有一定的包含關係的
  • 3.一定會跟其他維度一起進行查詢的

    如果有10個維度那會有2^10=1024個Cuboid需要進行計算,雖然每個Cuboid的大小存在很大的差異,但是單單想到Cuboid的數量就足以讓人想象這樣大小的Cube對於構建引擎、存儲引擎的壓力會有多麼巨大,所以在構建維度較多的Cube時,剪枝優化是非常重要的。

剪枝優化效率檢測

  1. 檢查Cube的數量 -> 檢查被物化的Cube數量 (Meterialized)
  2. 檢查Cube的大小 -> expansion Rate (0-1000%是一個較爲正常的數字)

剪枝優化的方法

1. 使用衍生維度

即使用維度表的主鍵(也就是事實表的外鍵)來代替維度表的非主鍵維度,這種方式犧牲一部分運行時間性能來節省Cube的空間佔用目的。

2. 使用聚合組

聚合組假設一個Cube的所有維度均可以根據業務需求劃分爲若干組(或者一個組),由於同一組合內更有可能被同一查詢到,因此會表現出更強大的內在關聯

每一個組內,會包含三種可選的維度:

1.強制維度(Mandatory)

若爲強制維度,則該分組中每一個Cubiod都會包含這個維度,若該維度一定會出現在查詢中,則應當將其設置爲強制維度

2.層級維度(Hierachy)

每一個層級中應包含2-n個維度,這n個維度會以()、(N1)、(N1,N2)、…、(N1, N2,…,Nn)這N+1種情況進行組合

3.聯合維度(Joint)

每一個聯合維度包括兩個或者更多的維度,聯合維度內的維度,要麼不出現,要麼必須一起出現。不同的聯合之間不應當有共同的維度

3. 粒度優化

粒度優化對應的是提高Cube的併發度,其設置是在自定義屬性中的
一共有三個屬性可以提高併發度。
1.kylin.hbase.region.cut(共使用幾個分區)
2.kylin.hbase.region.count.min(最少使用幾個分區)
3.kylin.hbase.region.count.max(最多使用幾個分區)

根據相對應的情況調高最少使用分區,降低最大使用分區,能夠有效增加系統的並行度。

4. (其他)RowKey優化

和Hbase 的RowKey優化類似
1.在查詢的過程中,被用作過濾條件的維度可能放在其他維度的前面
2.經常出現的維度應該放在前面
3.基數比較大的維度應該放在前面

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章