數(shù)據(jù)倉庫究竟是什么?它和事務(wù)交易處理系統(tǒng)(OLTP)又有什么區(qū)別?初次接觸它的朋友往往覺得它很神 秘、很復(fù)雜,其實(shí)不然。今天就和大家來認(rèn)識(shí)一下數(shù)據(jù)倉庫的本質(zhì),以及在實(shí)施商務(wù)智能過程中它的一些設(shè)計(jì)技巧。
Ralph Kimball,數(shù)據(jù)倉庫(Data Warehouse,DW)領(lǐng)域最權(quán)威的專家之一,曾下過這樣的結(jié)論:BI系統(tǒng)=數(shù)據(jù)倉庫。或許這種說法有一定的片面性,經(jīng)不起咬文嚼字的推敲,但從中我 們卻不難看出數(shù)據(jù)倉庫在BI系統(tǒng)中舉足輕重的地位。
仔細(xì)想想,的確如此。幾乎所有的BI項(xiàng)目,都是在數(shù)據(jù)倉庫這個(gè)“大舞臺(tái)”之上“演出”的,它就像是BI 系統(tǒng)的心臟,源源不斷地為前端提供新鮮的血液——最新的業(yè)務(wù)數(shù)據(jù),有了這些數(shù)據(jù),我們才會(huì)看到前端詳盡的報(bào)表、直觀的分析和神奇的預(yù)測(cè)。
數(shù)據(jù)倉庫究竟是什么呢?它和事務(wù)交易處理系統(tǒng)(OLTP)又有什么區(qū)別?初次接觸它的朋友往往覺得它很 神秘、很復(fù)雜,其實(shí)不然。今天就和大家來認(rèn)識(shí)一下數(shù)據(jù)倉庫的本質(zhì),以及在實(shí)施商務(wù)智能過程中它的一些設(shè)計(jì)技巧。
概念解析
目前,關(guān)于數(shù)據(jù)倉庫的定義有很多種,都是從不同的角度和層面概括的。著名數(shù)據(jù)倉庫專家 W.H.Inmon在其著作《Building the Data Warehouse》一書中有過如下描述:數(shù)據(jù)倉庫是一個(gè)面向主題的(Subject Oriented)、集成的(Integrate)、穩(wěn)定的(Non-Volatile)、隨時(shí)間不斷變化(Time Variant)的數(shù)據(jù)庫系統(tǒng),主要用于企業(yè)的決策支持。對(duì)于上述概念,結(jié)合與OLTP系統(tǒng)的比較,我們可以從以下幾個(gè)方面來理解數(shù)據(jù)倉庫:
“遺傳”性 從 “數(shù)據(jù)庫”到“數(shù)據(jù)倉庫”,雖然多了一個(gè)“倉”字,但卻沒有改變它數(shù)據(jù)庫的“本性”。從物理上來講,它依然是一個(gè)關(guān)系型的數(shù)據(jù)庫,表、字段、主鍵、索引、 鍵約束等概念,在數(shù)據(jù)倉庫中依然存在,無論數(shù)據(jù)的組織方式還是在表中二維的存放,數(shù)據(jù)的存儲(chǔ)規(guī)則也基本遵循關(guān)系型數(shù)據(jù)庫的各種范式。從這個(gè)層面來看,數(shù)據(jù) 倉庫與普通的數(shù)據(jù)庫系統(tǒng)并無本質(zhì)區(qū)別。
主題性 OLTP系統(tǒng)是被設(shè)計(jì)用來處理和存儲(chǔ)事務(wù)交易數(shù)據(jù) 的,通常一個(gè)企業(yè)內(nèi)存在多個(gè)OLTP系統(tǒng),各自之間相互獨(dú)立。而數(shù)據(jù)倉庫是被設(shè)計(jì)用來進(jìn)行決策支持,主要是進(jìn)行數(shù)據(jù)分析,因此它的數(shù)據(jù)組織方式是按主題劃 分的。主題是一個(gè)抽象的概念,是指用戶使用數(shù)據(jù)倉庫進(jìn)行分析時(shí)所關(guān)注的具體的業(yè)務(wù)領(lǐng)域。如一個(gè)企業(yè)的數(shù)據(jù)倉庫中可能包含了財(cái)務(wù)系統(tǒng)、銷售系統(tǒng)、庫存系統(tǒng)、 人力資源系統(tǒng)等方面的數(shù)據(jù),它們都被劃分為一個(gè)主題(通常對(duì)應(yīng)著一個(gè)數(shù)據(jù)集市)。
集成性 所謂“ 集成”,也是與OLTP系統(tǒng)相比較而言。OLTP系統(tǒng)通常是與某些特定的應(yīng)用相關(guān)的,數(shù)據(jù)庫之間相互獨(dú)立,結(jié)構(gòu)不一。而數(shù)據(jù)倉庫中的數(shù)據(jù)是對(duì)原有獨(dú)立的、 分散的、異構(gòu)的各種OLTP系統(tǒng)(包括文本文件、半結(jié)構(gòu)化文件)中的數(shù)據(jù)進(jìn)行了大匯總,并對(duì)這些數(shù)據(jù)進(jìn)行了清洗和轉(zhuǎn)換,消除了其中的不一致性,統(tǒng)一規(guī)范了 數(shù)據(jù)格式,保證了這些數(shù)據(jù)是關(guān)于整個(gè)企業(yè)的全局性數(shù)據(jù)。
穩(wěn)定性 OLTP系統(tǒng)由于面向事務(wù)操作,經(jīng)常會(huì)有增、刪、改等操作,所以其中的數(shù)據(jù)會(huì)經(jīng)常更新。而數(shù)據(jù)倉庫的數(shù)據(jù)主要供企業(yè)決策分析使用,所涉及的數(shù)據(jù)操作主要是 數(shù)據(jù)查詢。數(shù)據(jù)一旦進(jìn)入數(shù)據(jù)倉庫,將會(huì)被長期保存,一般不會(huì)進(jìn)行修改和刪除操作,通常只需要定期進(jìn)行加載和刷新。
時(shí)變性 既 “穩(wěn)定”又“時(shí)變”,聽起來有些矛盾,這更為數(shù)據(jù)倉庫增添了幾分神秘色彩。這里說的時(shí)變,指的是其中的數(shù)據(jù)不是一成不變的,而是按一定的時(shí)間間隔進(jìn)行更新 的。隨著OLTP系統(tǒng)數(shù)據(jù)的積累,新的數(shù)據(jù)按時(shí)經(jīng)過轉(zhuǎn)換加工后被源源不斷地抽取到數(shù)據(jù)倉庫中。只有數(shù)據(jù)不斷更新,新數(shù)據(jù)不斷的注入,我們基于數(shù)據(jù)倉庫進(jìn)行 的前端分析展現(xiàn)的結(jié)果才會(huì)更符合企業(yè)當(dāng)前的實(shí)際狀況,來有效地輔助企業(yè)決策。
“外觀”解析
前面提到,數(shù)據(jù)倉庫在物理上仍然是一個(gè)關(guān)系型的數(shù)據(jù)庫系統(tǒng),那從外觀上來看,數(shù)據(jù)倉庫有什么特點(diǎn)呢?如 圖1所示,是一個(gè)比較典型的數(shù)據(jù)倉庫(準(zhǔn)確地說是一 個(gè)數(shù)據(jù)集市),大家可以看到,與普通的數(shù)據(jù)庫不同,其中的表都以“Dim”或“Fact”開始,這是因?yàn)閿?shù)據(jù)倉庫中的數(shù)據(jù)不外乎維度數(shù)據(jù)和事實(shí)數(shù)據(jù)(元數(shù) 據(jù)除外),為了我們直觀上容易判斷和以后多維建模過程中便于識(shí)別,我們通常在維度表的表名前加“Dim”,在事實(shí)表的表名前加“Fact”,當(dāng)然,這只是 一種良好的命名習(xí)慣,并不是必須這樣來命名。
地位解析
數(shù)據(jù)倉庫在整個(gè)BI的流程中的地位可以概括為“承前啟后”。所謂“承前”,正如前面所提到的,它匯總了 來自異構(gòu)數(shù)據(jù)源的、經(jīng)過清洗整合后的數(shù)據(jù), 使數(shù)據(jù)與業(yè)務(wù)系統(tǒng)脫離,保障了業(yè)務(wù)系統(tǒng)的安全和效率;所謂啟后,是因?yàn)樗鼮橐院蠼ㄔO(shè)多維數(shù)據(jù)庫做好了準(zhǔn)備,是建立多維數(shù)據(jù)庫的基礎(chǔ)和平臺(tái)。
相關(guān)技巧
1、架構(gòu)模式的選擇
數(shù)據(jù)倉庫的架構(gòu)主要有星型和雪花型兩種方式,下 面從多個(gè)角度來比較一下這兩種模式的利弊。
從查詢性能角度來看,在OLTP-DW環(huán)節(jié),由于雪花型要做多個(gè)表聯(lián)接,性能會(huì)低于星型架構(gòu);但從 DW-OLAP環(huán)節(jié),由于雪花型架構(gòu)更有利于度量值的聚合,因此性能要高于星型架構(gòu)。
從模型復(fù)雜度來看,星型架構(gòu)更簡單。
從層次概念來看,雪花型架構(gòu)更加貼近OLTP系統(tǒng)的結(jié)構(gòu),比較符合業(yè)務(wù)邏輯,層次比較清晰。
從存儲(chǔ)空間角度來看,雪花型架構(gòu)具有關(guān)系數(shù)據(jù)模型的所有優(yōu)點(diǎn),不會(huì)產(chǎn)生冗余數(shù)據(jù),而相比之下星型架構(gòu)會(huì) 產(chǎn)生數(shù)據(jù)冗余。
根據(jù)我們的項(xiàng)目經(jīng)驗(yàn),一般建議使用星型架構(gòu)。因?yàn)槲覀冊(cè)趯?shí)際項(xiàng)目中,往往最關(guān)注的是查詢性能問題,至于 磁盤空間一般都不是問題。 當(dāng)然,在維度表數(shù)據(jù)量極大,需要節(jié)省存儲(chǔ)空間的情況下,或者是業(yè)務(wù)邏輯比較復(fù)雜、必須要體現(xiàn)清晰的層次概念情況下,可以使用雪花型維度。
2、“鍵”與“約束”的取舍
主外鍵的選擇是數(shù)據(jù)倉庫建設(shè)過程中一個(gè)很重要的方面。事實(shí)表中由于引用了多個(gè)維度表的主鍵,這些主鍵結(jié) 合起來已經(jīng)具有唯一性,可以確定唯一的事實(shí)記錄,所以通常情況下,我們不會(huì)再為其設(shè)立代理鍵作為主鍵,而是為其建立復(fù)合主鍵。
相比之下,維度表中的情況稍微復(fù)雜。維度表中的主鍵通常有兩種選擇:自然鍵(Natural Key),它是業(yè)務(wù)系統(tǒng)中已經(jīng)存在的,通常是具有一定業(yè)務(wù)含義的一個(gè)字符型的標(biāo)志符,可以唯一地標(biāo)志維度表中的每一條記錄。比如機(jī)構(gòu)的代碼、縮寫、時(shí)間標(biāo) 簽等。另一種是代理鍵(Surrogate Key),通常是數(shù)據(jù)庫系統(tǒng)賦予的一個(gè)數(shù)值,是自增型的,按順序分配,沒有內(nèi)置含義但也可以唯一地標(biāo)識(shí)一條維度信息。
根據(jù)筆者的項(xiàng)目經(jīng)驗(yàn),推薦采用第二種,即代理鍵。原因如下:
首先,自然鍵雖然在邏輯上可以唯一地標(biāo)識(shí)出一條維度信息,但它通常是字符型的,且一般比較長,若用它作 為維度表中的主鍵,那就意味著在事實(shí)表中也要加入同 樣的外鍵信息,而事實(shí)表記錄行數(shù)往往是巨大的,在多個(gè)維度表上重復(fù)這樣的做法會(huì)使事實(shí)表由于列寬過于膨脹而導(dǎo)致性能的急劇下降。
其次,代理鍵可以作為數(shù)據(jù)倉庫與源系統(tǒng)之間的“緩沖”。自然鍵通常具有一定的業(yè)務(wù)含義,但日久天長,這 些信息是有可能發(fā)生變化的,比如身份證號(hào)碼,由最初 的15位變成了現(xiàn)在的18位。如果這種主鍵一旦發(fā)生了變化,由于它同時(shí)作為事實(shí)表中的外鍵,必然會(huì)對(duì)事實(shí)表產(chǎn)生影響,因?yàn)橐延械氖聦?shí)記錄已經(jīng)找不到與之匹 配的維度記錄,這就帶來了很大的麻煩。但若采用代理鍵作為維度表中的主鍵,就完全可以把這些變化屏蔽在維度表內(nèi),不會(huì)對(duì)事實(shí)表產(chǎn)生任何影響(當(dāng)然這個(gè)還要 結(jié)合緩慢變化維度的處理)。
最后,從關(guān)聯(lián)效率考慮,數(shù)值型的關(guān)聯(lián)要比字符型的關(guān)聯(lián)快很多。
鍵約束的取舍也是數(shù)據(jù)倉庫設(shè)計(jì)過程中一個(gè)很值得注意的問題。在OLTP系統(tǒng)環(huán)境中,數(shù)據(jù)的完整性通常靠 兩種方式來保證,一是應(yīng)用程序的邏輯保證,另一個(gè)是 數(shù)據(jù)庫結(jié)構(gòu)自身的約束機(jī)制。這兩種方式相互補(bǔ)充,而數(shù)據(jù)倉庫環(huán)境中的情況則完全不同,數(shù)據(jù)倉庫中數(shù)據(jù)的完整性更依賴于應(yīng)用程序,也就是ETL系統(tǒng)的保證。
首先,ETL系統(tǒng)運(yùn)行時(shí)間雖然很長,但其結(jié)構(gòu)是簡單的,重復(fù)地抓取、清洗、轉(zhuǎn)換、加載動(dòng)作。與其相 比,OLTP系統(tǒng)可能同時(shí)在一張表上執(zhí)行大量并行業(yè)務(wù)操作。
其次,事實(shí)表的唯一入口是維度表,按照維度建模的思路實(shí)現(xiàn)ETL程序,只會(huì)產(chǎn)生不準(zhǔn)確的維度信息,不可 能在事實(shí)表中產(chǎn)生重復(fù)記錄。第三,與OLTP系統(tǒng)相比,數(shù)據(jù)倉庫系統(tǒng)沒有交互式人機(jī)錄入界面,不存在“人為”錯(cuò)誤。
因此,在我們比較關(guān)注數(shù)據(jù)加載時(shí)間的情況下,最好從數(shù)據(jù)倉庫中刪除一些不必要的約束,其中包括主鍵約 束、外鍵約束及唯一索引約束,這些約束規(guī)則可以在外部得以實(shí)施。
3、ODS的運(yùn)用
ODS(Operational Data Storage,操作型數(shù)據(jù)存儲(chǔ)區(qū))是數(shù)據(jù)倉庫體系結(jié)構(gòu)中的一個(gè)可選部分,它具備數(shù)據(jù)倉庫的部分特征和OLTP系統(tǒng)的部分特征。它是“面向主題的、集成 的、當(dāng)前或接近當(dāng)前的、隨時(shí)間不斷變化的”數(shù)據(jù)庫系統(tǒng)。在什么情況下才需要用到ODS這個(gè)環(huán)節(jié)呢?或者說,ODS起到了什么作用?
ODS在業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉庫之間形成一個(gè)隔離層。一般的數(shù)據(jù)倉庫應(yīng)用系統(tǒng)都具有非常復(fù)雜的數(shù)據(jù)來源,這 些數(shù)據(jù)存放在不同的地理位置、不同的數(shù) 據(jù)庫、不同的應(yīng)用之中。從這些業(yè)務(wù)系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行抽取并不是一件容易的事,此時(shí)就需要用到ODS。它在業(yè)務(wù)系統(tǒng)和數(shù)據(jù)倉庫之間形成一個(gè)隔離層,用來存放從 業(yè)務(wù)系統(tǒng)直接抽取出來的數(shù)據(jù),這些數(shù)據(jù)從數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)之間的邏輯關(guān)系上都與業(yè)務(wù)系統(tǒng)基本保持一致,因此在抽取過程中極大降低了數(shù)據(jù)轉(zhuǎn)化的復(fù)雜性,而主要 關(guān)注數(shù)據(jù)抽取的接口、數(shù)據(jù)量大小、抽取方式等方面的問題。
ODS還可用來轉(zhuǎn)移一部分業(yè)務(wù)系統(tǒng)細(xì)節(jié)查詢的功能。在數(shù)據(jù)倉庫建立之前,大量的報(bào)表、分析是由業(yè)務(wù)系統(tǒng) 直接支持的,在一些比較復(fù)雜的報(bào)表生成過程中,對(duì)業(yè) 務(wù)系統(tǒng)的運(yùn)行產(chǎn)生很大的壓力。而ODS中的數(shù)據(jù)從粒度、組織方式等各個(gè)方面都保持了與業(yè)務(wù)系統(tǒng)相一致,那么原來由業(yè)務(wù)系統(tǒng)產(chǎn)生的報(bào)表、細(xì)節(jié)數(shù)據(jù)的查詢自然 能夠從ODS中進(jìn)行,從而降低了業(yè)務(wù)系統(tǒng)的查詢壓力。
ODS還可以完成數(shù)據(jù)倉庫中不能完成的一些功能。一般來說,帶有ODS的數(shù)據(jù)倉庫體系結(jié)構(gòu)中,DW層所 存儲(chǔ)的數(shù)據(jù)都是進(jìn)行匯總過的數(shù)據(jù),并不存儲(chǔ)每筆交易 產(chǎn)生的細(xì)節(jié)數(shù)據(jù),但是在某些特殊的應(yīng)用中,可能需要對(duì)交易細(xì)節(jié)數(shù)據(jù)進(jìn)行查詢,這時(shí)就需要把細(xì)節(jié)數(shù)據(jù)查詢的功能轉(zhuǎn)移到ODS來完成,而且ODS的數(shù)據(jù)模型按 照面向主題的方式進(jìn)行存儲(chǔ),可以方便地支持多維分析等查詢功能。在一個(gè)沒有ODS層的數(shù)據(jù)倉庫應(yīng)用系統(tǒng)體系結(jié)構(gòu)中,數(shù)據(jù)倉庫中存儲(chǔ)的數(shù)據(jù)粒度是根據(jù)需要而 確定的,但一般來說,最為細(xì)節(jié)的業(yè)務(wù)數(shù)據(jù)也是需要保留的,實(shí)際上也就相當(dāng)于ODS,但與ODS所不同的是,這時(shí)的細(xì)節(jié)數(shù)據(jù)不是“當(dāng)前、不斷變化的”數(shù)據(jù), 而是“歷史的,不再變化的”數(shù)據(jù)。
總結(jié):
通覽本文,大家應(yīng)該認(rèn)識(shí)到,數(shù)據(jù)倉庫并不神秘,在物理上它與OLTP并無本質(zhì)區(qū)別。與OLTP不同的 是,不是用來做交易處理,而是用于決策支持。也正因?yàn)? 此,它具有主題性、集成性、穩(wěn)定性和時(shí)變性等特點(diǎn)。為提高數(shù)據(jù)倉庫的性能和效率,在設(shè)計(jì)數(shù)據(jù)倉庫時(shí),也有技巧可循。