kylin內幕 如何有效實現cubes

2021-08-23 12:21:58 字數 1138 閱讀 6626

本文參考斯坦福著名**:implementing data cubes efficiently。

在kylin(麒麟)中,有一項關鍵技術叫做預計算:簡單的說,我們預先計算出使用者可能查詢的結果,每一種可能我們稱之為乙個cuboid,所有的cuboid組合起來叫乙個cube。我們把cube儲存起來,當使用者需要查詢資料的時候,就不用查詢原始資料表,直接查詢cube就能得到想要的資料,這是讓kylin能在秒級甚至亞秒級查詢億級以上的資料保證。

乙個原始表n個dimension(維度),理論上就有2^n個cuboid

所以,存在乙個問題,乙個原始表的維度可能很多,我們不可能將所有的可能都儲存起來,這將極大的耗費資源,為此我們需要將需要的cuboid建立出來,優化kylin系統

在這裡介紹乙個概念:rollup

在tcp-d 資料庫中有三個屬性(dimension):part,supplier,customer和measure:total sales。我們有八種可能聚合這些屬性.

1、part,supplier,customer(6m,600萬行)

2、part,supplier(0.8m)

3、part,customer(6m)

4、supplier,customer(6m)

5、part(0.2m)

6、supplier(0.1m)

7、customer(0.1m)

8、none(1)

**中定義了乙個符號 q1 =我們選擇構建哪個cuboid的依據是我們構建了這個cuboid後所帶來的查詢效益(benefit),這裡我們判斷的依據是查詢表減少的行數,或者花銷(cost)減少的量。

**中使用貪心演算法對cuboid進行選擇,例子如下:

每乙個數代表查詢這個cuboid的花銷(cost)

base view a是一定要構建的,假設我們要選擇構建三個cuboid的,那接下來選擇那個呢?

我們分別計算構建 b c d e f g h的效益,如下:

這就是kylin所使用的選擇構建物化檢視的演算法

如何實現有效的團隊管理?

一旦團隊開始工作,團隊就能夠將一種處於萌芽狀態的理想和價值觀轉變為一致行為的最好方式,因為團隊依賴於人們的共同工作。大多數 未來的組織 模式,如 網路化組織 集群組織 非層級化組織 橫向組織 等等,都是以超越個人的團隊作為公司的主要業績單位為前提的。團隊也是在整個組織內培養共同目標感最為實用的方法。...

如何實現有效的專案進度控制?

每乙個專案經理都希望自己負責的專案能夠成功!這似乎是每乙個專案經理為之追求和奮鬥的目標。那怎麼才算是乙個成功的專案呢?成功專案就是能夠到在規定的工期 成本的條件下,滿足或超過專案干係人要求的專案。也就是說時間 成本 質量 範圍是專案成功的基本要素,對專案的成敗起著至關重要的作用。其中時間因素又會對其...

如何有效實現軟體的需求管理 2

什麼是軟體需求呢?為什麼它需要管理呢?軟體需求完全嚴格來解釋就是 1 使用者解決問題或達到目標所需條件或權能 capability 2 系統或系統部件要滿足合同 標準 規範或其它正式規定文件所需具有的條件或權能。3 一種反映上面 1 或 2 所述條件或權能的文件說明 也許看起來有點深奧,其實簡單來說...