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