如何設(shè)計(jì)數(shù)據(jù)倉庫

“設(shè)計(jì)”——暗含了可以預(yù)先對組成單元進(jìn)行規(guī)劃的意思,“兵馬未動,糧草先行”體現(xiàn)了前人在規(guī)劃事情的聰明才智。但是數(shù)據(jù)倉庫的需求只有在已經(jīng)裝載了部分?jǐn)?shù)據(jù)并開始使用的時候才能弄清楚,因此,過去很有效的設(shè)計(jì)方法在設(shè)計(jì)數(shù)據(jù)倉庫時并不能滿足需要。數(shù)據(jù)倉庫是在啟發(fā)方式下建造的,過程中后一個階段開發(fā)完全依賴于上一個階段獲得的結(jié)果。下面對設(shè)計(jì)數(shù)據(jù)倉庫的幾個主要過程進(jìn)行分享。


設(shè)計(jì)師的手稿

1.從操作型數(shù)據(jù)開始

什么是操作型數(shù)據(jù)?操作型數(shù)據(jù)就是企業(yè)在生產(chǎn)運(yùn)行中產(chǎn)生的數(shù)據(jù)。

在進(jìn)行數(shù)據(jù)倉庫設(shè)計(jì)時首先要考慮的問題是如何將數(shù)據(jù)放置在數(shù)據(jù)倉庫中。操作型系統(tǒng)在建立的時候并沒有考慮數(shù)據(jù)將來如何進(jìn)行集成,各個系統(tǒng)都建立了自己的數(shù)據(jù)結(jié)構(gòu),在數(shù)據(jù)集成的時候就會出現(xiàn)各式各樣的數(shù)據(jù)沒有統(tǒng)一的標(biāo)準(zhǔn)。這是個復(fù)雜而又必須解決問題。


數(shù)據(jù)各自為政

1.1.數(shù)據(jù)集成過程中首先要解決數(shù)據(jù)編碼不一致的問題。假設(shè)將旅客服務(wù)系統(tǒng)數(shù)據(jù)和旅客行為系統(tǒng)數(shù)據(jù)進(jìn)行關(guān)聯(lián),發(fā)現(xiàn)旅客服務(wù)系統(tǒng)中性別是英文簡稱“m,f”表示,在旅客行為系統(tǒng)中性別是中文“男,女”,這兩個系統(tǒng)在表示性別時采用了不同的編碼方式。將旅客性別數(shù)據(jù)集成到數(shù)據(jù)倉庫時,不管采用哪一種編碼方式,進(jìn)入數(shù)據(jù)倉庫的數(shù)據(jù)需要統(tǒng)一成為同一種編碼格式。


統(tǒng)一編碼

1.2.數(shù)據(jù)集成的過程需要統(tǒng)一度量單位。不同的系統(tǒng)可能在表示同一屬性的時候采用了不同的計(jì)量單位,進(jìn)入數(shù)據(jù)倉庫的數(shù)據(jù)需要轉(zhuǎn)換成同一種計(jì)量單位。數(shù)據(jù)倉庫建立是服務(wù)于企業(yè)所有的系統(tǒng),將不必要的數(shù)據(jù)計(jì)算開銷在數(shù)據(jù)抽取、裝載、清洗過程中完成,節(jié)約數(shù)據(jù)倉庫計(jì)算資源。在設(shè)計(jì)數(shù)據(jù)倉庫的時候盡量讓清洗的計(jì)算在數(shù)據(jù)抽取的時候就完成,不建議將過多的計(jì)算推移到數(shù)據(jù)倉庫中。


統(tǒng)一度量單位

1.3.集成過程中要對字段語義進(jìn)行理解。例如同一個字段在四個應(yīng)用中有四個不同的名字。為了轉(zhuǎn)換數(shù)據(jù)使其正確的進(jìn)入倉庫,就必須建立對各個不同源字段到數(shù)據(jù)倉庫字段的映射。


統(tǒng)一字段名稱

將操作數(shù)據(jù)集成到數(shù)據(jù)倉庫是個非常復(fù)雜的過程。在真實(shí)過程中除了將數(shù)據(jù)完整的同步到數(shù)據(jù)倉庫中的需求,在某些需求下集成到數(shù)據(jù)倉庫并非明細(xì)數(shù)據(jù)而是一個匯總數(shù)據(jù)。我們在后面會具體列出數(shù)據(jù)集成過程中需要考慮的問題列表。

2.設(shè)計(jì)數(shù)據(jù)倉庫的數(shù)據(jù)模型

數(shù)據(jù)倉庫起源于數(shù)據(jù)模型的設(shè)計(jì)。在企業(yè)中所有的數(shù)據(jù)模型都是建立在操作型數(shù)據(jù)模型之上,我們可以通過以下步奏設(shè)計(jì)數(shù)據(jù)倉庫模型。

2.1.去除純用于操作型環(huán)境中數(shù)據(jù)。比如去掉控制系統(tǒng)字體大小的樣式表內(nèi)容,因?yàn)榇祟悢?shù)據(jù)對后面的業(yè)務(wù)支持分析并沒有多大的意義。

2.2.增加時間元素。為加入到數(shù)據(jù)倉庫的數(shù)據(jù)增加時間元素,標(biāo)注該數(shù)據(jù)的時間版本。隨著時間增長,企業(yè)經(jīng)營的規(guī)模增加,原有數(shù)據(jù)類型不能符合現(xiàn)有業(yè)務(wù)的需求,需要進(jìn)行修改,此時在數(shù)據(jù)倉庫中基于原有字段增加一個新的數(shù)據(jù)字段,通過時間版本可以快速區(qū)分老版本和新版本。

2.3.在數(shù)據(jù)倉庫中將操作型系統(tǒng)中的數(shù)據(jù)轉(zhuǎn)變?yōu)椤叭斯りP(guān)系”,也就是建立起數(shù)據(jù)倉庫中表與表之間的關(guān)系。數(shù)據(jù)倉庫對外服務(wù)的時候,某一查詢請求數(shù)據(jù)可能來自多張表,通過建立起的表間關(guān)系可以將多張表的數(shù)據(jù)串聯(lián)成為一個集合發(fā)送給調(diào)用端。

2.4.對企業(yè)數(shù)據(jù)模型進(jìn)行穩(wěn)定性分析(根據(jù)各個數(shù)據(jù)屬性是否經(jīng)常變化的特性將這些屬性分組)。比如經(jīng)常變化的,不時變化的、很少變化的。通過穩(wěn)定性分析,我們可以根據(jù)不同訪問頻次將數(shù)據(jù)分開存放,提高數(shù)據(jù)倉庫的響應(yīng)效率。


穩(wěn)定性分析

2.5.數(shù)據(jù)模型的設(shè)計(jì)非常重要,通常數(shù)據(jù)模型通過高層、中層和底層三個層次進(jìn)行設(shè)計(jì)。下面詳細(xì)講解這三層是如何實(shí)現(xiàn)的。

2.5.1.高層建模即設(shè)計(jì)ER圖,是最高的抽象設(shè)計(jì),描述數(shù)據(jù)倉庫范圍的主題域,以及描述主題域之間的關(guān)系。高層設(shè)計(jì)通盤考慮整個公司業(yè)務(wù)環(huán)境,站在領(lǐng)導(dǎo)的角度將公司的業(yè)務(wù)環(huán)境劃分為不同的主題域。比如可以將公司的業(yè)務(wù)環(huán)境劃分為商務(wù)、運(yùn)行、管理等主題域。如果建立的是商務(wù)數(shù)據(jù)中心則可以劃分供應(yīng)商、顧客、商品和倉儲等主題域。建立完成主題域之后要明確主題域和主題域之間的連接關(guān)系。


高層設(shè)計(jì)ER圖

2.5.2.中層建模是對高層模型中標(biāo)識出的每個主題域進(jìn)行詳細(xì)設(shè)計(jì)建模。對每個主題域中包含的具體實(shí)體進(jìn)行設(shè)計(jì),并且明確實(shí)體與實(shí)體之間的對應(yīng)關(guān)系。這個步奏涉及到具體每一個主題域包含了多少實(shí)體,這些實(shí)體特征和屬性,以及實(shí)體與實(shí)體之間的關(guān)系。


中層設(shè)計(jì)

2.5.3.底層建模是物理模型建立,建立數(shù)據(jù)具體存儲模型。設(shè)計(jì)上主要優(yōu)化數(shù)據(jù)存儲和讀取的性能。比如數(shù)據(jù)庫存儲的分庫分區(qū)或者使用集群解決方案,目的是降低單臺機(jī)器的壓力,提升數(shù)據(jù)倉庫對請求的響應(yīng)效率。

3.為了性能適度犧牲范式設(shè)計(jì)

設(shè)計(jì)規(guī)范化,通常認(rèn)為的是設(shè)計(jì)要滿足范式,在關(guān)系型數(shù)據(jù)庫設(shè)計(jì)時最低的設(shè)計(jì)標(biāo)準(zhǔn)是要滿足第三范式。

為什么要規(guī)范化數(shù)據(jù)倉庫的設(shè)計(jì)?總結(jié)下來至少有以下四點(diǎn)優(yōu)點(diǎn):1.降低數(shù)據(jù)存儲所占有的磁盤空間。2.方便對數(shù)據(jù)的管理。3.將易變和不易變的數(shù)據(jù)進(jìn)行區(qū)分管理。4.容易進(jìn)行修改。

但是嚴(yán)格遵循規(guī)范化設(shè)計(jì)在應(yīng)用高頻訪問大數(shù)據(jù)量的情況下也會有弊端,至少會造成兩個問題:1.數(shù)據(jù)訪問I/O次數(shù)多,嚴(yán)重影響數(shù)據(jù)訪問的效率。2.索引建立復(fù)雜而且索引數(shù)據(jù)量龐大。

解決由于嚴(yán)格遵循規(guī)范化導(dǎo)致的性能瓶頸,可以在適當(dāng)?shù)牡胤椒聪蛞?guī)范化。具體可按照以下三個步驟做:

第一步,將經(jīng)常同時訪問的兩個不同表的數(shù)據(jù)可以進(jìn)行合并。


創(chuàng)建數(shù)據(jù)組,將經(jīng)常同時訪問的數(shù)據(jù)放到一起

第二步,對于某些經(jīng)常訪問的(不變的)基礎(chǔ)數(shù)據(jù)表可以冗余存放到不同表中,取消基礎(chǔ)數(shù)據(jù)表。


采用數(shù)據(jù)冗余

第三步,對于同一張表中某一個字段訪問特別多,可以將該字段抽離出該表。


分離高頻訪問字段

4.使用Zachman方法設(shè)計(jì)數(shù)據(jù)倉庫

Zachman框架是一種邏輯結(jié)構(gòu),它是為信息技術(shù)企業(yè)提供一種可以理解的信息表述。可以對企業(yè)信息按照要求分類并從不同角度進(jìn)行表示。

Zachman框架吸收了傳統(tǒng)方法中的一些精髓。他根據(jù)抽象規(guī)則定義企業(yè)信息的多個方面。該框架采用六行六列矩陣布局,六行包括范圍、企業(yè)模式、系統(tǒng)模式、技術(shù)模式、組建和功能系統(tǒng),六列分別為數(shù)據(jù)(什么?)、功能(怎樣?)、網(wǎng)絡(luò)(哪里?)、角色(誰?)、時間(何時?)和動機(jī)(為何?)。Zachman框架的6行6列整理出的表格如下:


Zachman樣表

Zachman在如何使用呢?它的每一個單元格具體填寫什么呢?根據(jù)下圖填寫完成里面的內(nèi)容,可以保證在進(jìn)行數(shù)據(jù)倉庫建設(shè)的時候企業(yè)的所有方面都得到了考慮。


Zachman內(nèi)容填寫

Zachman指導(dǎo)數(shù)據(jù)倉庫的建設(shè)。Zachman框架可以挖掘出數(shù)據(jù)倉庫建立的需求內(nèi)容,然后針對需求內(nèi)容建立數(shù)據(jù)模型,最后將業(yè)務(wù)系統(tǒng)的數(shù)據(jù)集成到數(shù)據(jù)倉庫的一個完整過程。

小結(jié)

通過上面的步驟我們一步一步的將業(yè)務(wù)系統(tǒng)集成到數(shù)據(jù)倉庫中,取得了一些成果。但是我們僅僅分享了數(shù)據(jù)倉庫建設(shè)的幾個主要步驟,數(shù)據(jù)倉庫建設(shè)過程中還有很多細(xì)節(jié)由于時間我們并沒有分享。另外本文還介紹了Zachman分析方法,在數(shù)據(jù)倉庫設(shè)計(jì)的時候避免遺漏對企業(yè)問題的考慮,推薦使用該方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容