資料立方體 解密

2021-07-30 05:58:12 字數 903 閱讀 4113

資料立方體和傳統資料庫的差別在於資料立方體即cube把很多原來要用資料庫的group by操作來達到的效果通過其獨有的儲存形式予以加速, 使用者可以方便地下鑽, 切面 看到各種聚合的資料的結果。

試想一下,如果乙個cube擁有3個維度,為了計算在各個維度上的聚合,就要進行2^3次計算,如果有10個維度就要進行2^10次聚合計算,隨著維度的增加,計算量也陡增。此外經過一次聚合後,得到的不是乙個值而已,是乙個少了若干維度的子cube,要將所有的cube儲存起來會占用大量的磁碟空間。

所以完全預存所有可能的度量值顯然是不可能的。

巧妙之處就在於利用資料的稀疏性。舉個例子:

一幢樓有10層,每層有3個大間,每個大間有甲乙丙丁4個小隔間,現在把這幢樓當成資料立方體,度量值就是住的人數。

101甲有3人(一樓01室甲間),

103丙有2人,

202乙有4人,

203丁有2人,

302乙有1人,

然後從4樓往上,只有702甲住了2人。

有很多的空的房間就象徵著稀疏。

這時我們會發現如果使用者查詢的4樓以上的人數資料,且未指明其他兩個維度的話,其實只要返回乙個702甲的人數就可以了。或者使用者查詢所有丙室的人數,也只要返回103丙有2人。彷彿103丙這一間小房間卻在特定的聚合條件下覆蓋了一大片區域。如果我們用符號「*」來表示all,那麼103丙覆蓋了:

(*,*,丙)

這樣乙個子cube。

用術語來說(*,*,丙)和(1,*,丙)和(*,3,丙)其實歸根結底就是103丙,它們叫「同基類」。那麼資料立方體在預存聚合值的時候就只要存同基類中的乙個值就可以了,然後通過一定儲存形式指明那些區域是屬於這個同基類的就可以了,大幅減少了儲存空間和process時的io消耗。

具體通過什麼樣的形式來指明同基類可以參考這篇**:

再貼一片關於ssas調優的文章: 

資料立方體

總體介紹 首先模擬乙個資料分析場景,某企業積累了如下 所示的銷售資料 中每一行表示某個時間段內某種商品在某個地區的銷售情況。很明顯,這些資料涉及到了時間 地區 產品三個業務角度。在對這樣的資料進行分析時,不同的角色都會基於自己所感興趣的業務角度提出問題 銷售經理關心各個地區的銷售情況,希望找出銷售增...

資料立方體技術

1.資料立方體的概念和計算。資料立方體 資料立方體只是多維模型的一種形象的說法,它只有三維,但多維資料模型不僅限於三維,它可以是n維的。之所以這麼叫是為了讓使用者更容易想象,方便解釋和說明,同時也為了和傳統的關聯式資料庫中的二維表進行區分。完全物化是指計算資料立方體格中的所有方體 部分物化是指選擇性...

建立立方體

imanualobject cube cube scenemgr.createmanualobject cube cube.begin examples anchor operationtype.ot list 頂點 cube.position 100,100,100 0 cube.position...