數據倉庫的多維數據模型
可能很多人理解的數據倉庫就是基于多維數據模型構建,用于OLAP的數據平臺,通過上一篇文章——數據倉庫的基本架構,我們已經看到數據倉庫的應用可能遠不止這些。但不得不承認多維數據模型是數據倉庫的一大特點,也是數據倉庫應用和實現的一個重要的方面,通過在數據的組織和存儲上的優化,使其更適用于分析型的數據查詢和獲取。
多維數據模型的定義和作用
多維數據模型是為了滿足用戶從多角度多層次進行數據查詢和分析的需要而建立起來的基于事實和維的數據庫模型,其基本的應用是為了實現OLAP(Online Analytical Processing)。
當然,通過多維數據模型的數據展示、查詢和獲取就是其作用的展現,但其真的作用的實現在于,通過數據倉庫可以根據不同的數據需求建立起各類多維模型,并組成數據集市開放給不同的用戶群體使用,也就是根據需求定制的各類數據商品擺放在數據集市中供不同的數據消費者進行采購。
多維數據模型實例
在看實例前,這里需要先了解兩個概念:事實表和維表。事實表是用來記錄具體事件的,包含了每個事件的具體要素,以及具體發生的事情;維表則是對事實表中事件的要素的描述信息。比如一個事件會包含時間、地點、人物、事件,事實表記錄了整個事件的信息,但對時間、地點和人物等要素只記錄了一些關鍵標記,比如事件的主角叫“Michael”,那么Michael到底“長什么樣”,就需要到相應的維表里面去查詢“Michael”的具體描述信息了。基于事實表和維表就可以構建出多種多維模型,包括星形模型、雪花模型和星座模型。這里不再展開了,解釋概念真的很麻煩,而且基于我的理解的描述不一定所有人都能明白,還是直接上實例吧:
這是一個最簡單的星形模型的實例。事實表里面主要包含兩方面的信息:維和度量,維的具體描述信息記錄在維表,事實表中的維屬性只是一個關聯到維表的鍵,并不記錄具體信息;度量一般都會記錄事件的相應數值,比如這里的產品的銷售數量、銷售額等。維表中的信息一般是可以分層的,比如時間維的年月日、地域維的省市縣等,這類分層的信息就是為了滿足事實表中的度量可以在不同的粒度上完成聚合,比如2010年商品的銷售額,來自上海市的銷售額等。
還有一點需要注意的是,維表的信息更新頻率不高或者保持相對的穩定,例如一個已經建立的十年的時間維在短期是不需要更新的,地域維也是;但是事實表中的數據會不斷地更新或增加,因為事件一直在不斷地發生,用戶在不斷地購買商品、接受服務。
多維數據模型的優缺點
這里所說的多維模型是指基于關系數據庫的多維數據模型,其與傳統的關系模型相比有著自身的優缺點。
優點:
多維數據模型***的優點就是其基于分析優化的數據組織和存儲模式。舉個簡單的例子,電子商務網站的操作數據庫中記錄的可能是某個時間點,某個用戶購買了某個商品,并寄送到某個具體的地址的這種記錄的集合,于是我們無法馬上獲取2010年的7月份到底有多少用戶購買了商品,或者2010年的7月份有多少的浙江省用戶購買了商品?但是在基于多維模型的基礎上,此類查詢就變得簡單了,只要在時間維上將數據聚合到2010年的7月份,同時在地域維上將數據聚合到浙江省的粒度就可以實現,這個就是OLAP的概念,之后會有相關的文章進行介紹。
缺點:
多維模型的缺點就是與關系模型相比其靈活性不夠,一旦模型構建就很難進行更改。比如一個訂單的事實,其中用戶可能購買了多種商品,包括了時間、用戶維和商品數量、總價等度量,對于關系模型而言如果我們進而需要區分訂單中包含了哪些商品,我們只需要另外再建一張表記錄訂單號和商品的對應關系即可,但在多維模型里面一旦事實表構建起來后,我們無法將事實表中的一條訂單記錄再進行拆分,于是無法建立以一個新的維度——產品維,只能另外再建個以產品為主題的事實表。
所以,在建立多維模型之前,我們一般會根據需求首先詳細的設計模型,應該包含哪些維和度量,應該讓數據保持在哪個粒度上才能滿足用戶的分析需求。