多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

多維數據庫(Multi Dimensional Database,MDD)使用Dimension(維度)和Cube(數據立方體、數據集市)模型描述數據。算法

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

多維數據模型數據庫

關係型數據庫(Relational Database,RDB)中的星型結構或雪花型結構就是模擬上述多維模型結構的,但沒法提供真正意義上的多維數據分析能力,這裏不作過多解釋。編程

下文講解Oracle Essbase以及IBM Cogons這種真正的多維數據庫的原理。數組

多維數據庫中模型結構與事實數據分別以概要文件(profile)和數據塊(data block)的形式存在。數據結構

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

profile和data block編程語言

概要文件用來描述如下信息:分佈式

  1. 維度和維度成員信息
  2. 與維度相關的層級(Hierarchy)和級別(Level)信息
  3. Cube的描述性信息,以及Cube與維度的關聯性
  4. 其餘描述性的信息,如實體模型屬性

Cube中度量數據存放在data block中,data block能夠被理解成爲多維數組結構,其大小與相關維度的明細成員數量有直接關係。性能

計算公式:data block size = 維度1明細成員總數 * 維度2明細成員總數 * …… * 維度N明細成員總數3d

數據塊容量等於相關維度明細成員數量的笛卡爾積。blog

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

數據塊大小

明細度量值通常採用double類型,按8bytes算,上圖所描述的Cube的數據塊大小爲480bytes。

除了數據塊中的明細度量值外,其餘非明細度量值並無直接存儲,由於其能夠經過對應的明細度量值計算出來。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

非明細度量值計算方式

一些不存在的度量值會形成數據空洞問題,假設2018年4季度河北省B品牌手機的銷售量是未知的,則會在數據塊中產生一個空洞。

注意:數據空洞表示不存在的值,與數值0的意義不一樣,數值0表示一個有意義的值。

若是數據空洞比較多,則數據塊的數據密度就會降低,將形成存儲空間的浪費。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

數據空洞

除了數據空洞問題,還存在數據爆炸問題。數據塊大小由所有維度明細成員數量的笛卡爾積決定,假如某個Cube關聯三個維度,每一個維度明細成員數量均爲100,則:data block size = 100 ^ 3 = 1000000,若是度量值按double類型存儲(8bytes),數據塊文件大約爲7.62M。若是每一個維度明細成員數量增長至150,則數據塊文件將膨脹到25.74M(data block size = 150 ^ 3 * 8bytes / 1024 / 1024)。

當數據塊極度膨脹而且存在不少數據空洞的時候,會極大地浪費存儲空間,而且可能致使數據存儲沒法實現。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

極度膨脹和存在大量空洞的多維數組

爲了解決數據空洞和數據膨脹問題,引入了密集維度組合和稀疏維組合的概念。

判斷維度組合是密集仍是稀疏的原則是看其所對應的明細度量值的存在狀況,例如:

  1. 北京地區只有ABC三種手機的銷售額,天津地區只有BCD三種手機的銷售額,河北地區賣出的手機只有AE兩種,代表並非每一個地區對於每一種手機都有銷售額,因此地區與產品屬於稀疏的維度組合。
  2. 2018年的四個季度都有手機銷售額,因此日期維度自身能夠構成密集的維度組合。

注意!在其餘講解多維數據庫的文章中都把維度分爲稀疏維與密集維,這是很是錯誤的,對於維度自己來說沒有稀疏與密集之分,稀疏與密集表示的是維度之間的組合!對於有N個維度的Cube而言,若是其只有一個維度退化成索引,或者有N - 1個維度退化成索引,則此時稀疏與密集的維組合只包含一個維度,但這只是一種特例,並不表明維度自己是稀疏或密集的。

在引入稀疏與密集的維度組合以後,本來因爲數據空洞和數據爆炸而失控的數據塊結構將變成索引和密度相對較高的小數據塊結構。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

索引和小數據塊

以前數據文件大小爲3 * 4 * 5 = 60,結構變換以後每一個小數據塊大小爲4(共8個),在不計算索引所佔存儲大小的狀況下,存儲容量變爲原來的一半。

度量值的變化可能引發稀疏維度組合和密集維度組合的改變,以下圖所示。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

重構

雖然解決了數據空洞和數據爆炸的問題,但稀疏與密集的維組合所帶來的負做用是一旦度量值的變化致使了數據塊密度中心的改變,相關的索引和子數據塊必須重構,而這種重構的性能代價與時間成本是極爲昂貴的。Cogons、Essbase等傳統多維數據庫以及其餘MOLAP都存在此問題。

基於矢量計算引擎(Vector Calculation Engine)的新型分佈式多維數據庫很好的解決了數據重構問題。

矢量計算引擎將海量數據的運算從多維數據庫核心分離出來,進而將多維分析時的邏輯運算與彙集計算解耦。多維數據庫核心只負責邏輯運算,徹底不須要再考慮數據量的問題。矢量計算引擎採用極爲簡單的數據結構存儲TB、PB級數據,而且只負責進行一種算法上極爲簡單的彙集運算,針對此種特性,適宜採用更加接近底層的編程語言進行開發(如C語言),不只獲得了性能上的提高,也由於數據存儲結構的簡單而得到了更加穩定的運行效果。

多維數據庫 Oracle Essbase 和 IBM Cogons 底層原理

基於矢量計算引擎的多維數據庫

如上圖所示,在多維數據庫內核角度來看,矢量計算引擎是更加底層的一種基礎服務,因此能夠根據各類應用場景切換不一樣的實現方式,而這一切對於多維數據庫內核來講都是透明的,多維數據庫自己對更上層的應用提供一致的數據查詢能力,從而更好的支持了100%面向業務的探索式數據分析能力。

相關文章
相關標籤/搜索