數據倉庫分層之辯

--轉自:http://blog.itpub.net/post/14877/198599
數據倉庫的分層可以算是數據倉庫架構的子話題。在前段時間參與的一次討論中,筆者發現其中爭論的焦點集中在每一層的作用、特點、是否有必要存在等問題。其中,大家雖然一致提到某些相關概念,但各方的理解卻並非完全一致。例如對於ODS是什麼、維度建模是什麼等問題的解讀,都是如此。
不妨想想看:數據從分散而異構的數據源中長途跋涉,到最終的報表、儀表盤、OLAP應用等等,讓用戶看到一致的結果,這是一個過程。記得以前有個礦泉水廣告,說要經過N層的過濾纔得到了那種水。而數據倉庫也一樣,從原來亂七八糟的數據到交付到用戶手中的“純淨”數據,也需要這樣一個過濾過程,需要各種不同的過濾裝置。
這個過濾過程,我們可以稱之爲ETL;而那些過濾裝置,就可以看作數據倉庫的分層。從目前來看,還沒有非常統一的分層方法,其中,Inmon和Kimball是最具代表性的兩種分層方法。
Inmon與Kimball
在Inmon提出的CIF(Corporate Information Factory,企業信息工廠)中,他將ODS(Operational Data Store,操作型存儲)、EDW(Enterprise Data Warehouse,企業數據倉庫)、DM(DataMart,數據集市)區別開來,共分三層。
相對於此,Kimball的總線架構強調多個數據集市合成了數據倉庫,只是他們基於統一的維度而已。因此,總線架構的分層中,從數據源接口就直接到了DM了。
根據這兩種思路,又可以衍生一些不同的方法。例如IBM就提出一種CDW的概念,叫做企業數據倉庫層,這一層介於EDW和DM之間,起過渡作用(因爲EDW和DM兩層的建模理念是不同的)。
除了這些分層,大家都還認同一個Staging Area(集結地)的地方。這是用於ETL過程中數據的臨時存儲,可究竟這個區域是位於接口到ODS之間,還是ODS到DW之間,或是CDW到DM之間,並沒有達成一致的意見。在筆者看來,既然它是用於ETL中間數據緩存的,那麼,在以上每一層都會需要,它是一個每層共用的存儲區域。
ODS層與DW層
對於ODS層,一般大家都能夠認同它是一種操作型比較強的、未保留歷史或者保留近期歷史的數據。
所謂操作型,是相對分析型而言的。後者多是彙總的、便於分析統計的結構。操作型的另一個特點就是經常會被更新,而分析型數據很少如此。然而,對於ODS的認識,也有不同。
常見的爭議包括: ODS是否應該被最終用戶訪問?ODS存在的目的是僅僅供DW層獲取經過清洗的數據,還是能夠讓用戶從中得到統計報表?關於前一個問題,在筆者以前做經營分析的時候,就曾遇到這樣的爭議;關於後一個問題,如果讓它僅僅具備前一項功能,倒是結構清晰、易於管理,是一種好的設計風格,但恐怕不能滿足用戶靈活的需求。而如果可以讓用戶查詢統計,可能造成它統計的數據和DW統計的數據不一致。
對於DW層,一般大家都會認同,這是保留歷史數據的地方。但它是按照第三範式還是維度建模呢?當然,最大的不同就是:是需要一箇中心DW,還是一個由若干數據集市組成的“虛擬”的DW。至於DM層,對此基本有一致的認同,這是面向最終用戶分析統計的,採用維度建模再好不過。
可因爲對DW層建模方法的不同觀點,因此也就出來了所謂CDW的提法。想想,如果DW是按照第三範式建模,而DM是按照維度建模的話,那麼它們之間該如何過渡?看上去,CDW確實也有存在的必要,在這個區域,需要形成滿足總線架構所需的一致性維度(Confirmed Dimension)和一致性事實(Confirmed Fact)。
但問題是,第三範式和維度建模難道就真得水火不相容?筆者更相信一個道理—架構中沒有絕對的設計原則。所謂第三範式,只是指出一種理想的ER(實體-關係模型)設計模式,但實際做設計時,設計師大多會去做一些平衡,他們也許會說,“爲了性能、應用方便,會考慮適當的冗餘。”可這適當冗餘不也就破壞了第三範式嗎?而且這個“適當”誰也說不準是多少。因此,可以理解EDW並不是絕對的第三範式,而所謂維度建模又能夠和第三範式有多少衝突呢?在其本身概念裏面,星型模式是一種不太符合第三範式的ER結構,但只是不“太”,如果改成雪花模式,是不是也就是第三範式了呢?
名詞與真義
具體要採用哪種分層方法還得視項目大小而言。對於大項目,或是大的集成商來實施,恐怕多會採用複雜的分層方法。其實分層越細,每層的功能也就越單一,它們之間的耦合程度也就越單一。當然這也是需要衡量的,因爲分層多了,ETL過程自然也就複雜,那對於數據質量的控制也就變得麻煩——在多個層裏面可能都存在同樣意義的數據,需要保證它們是一致的。
IBM、NCR這樣的廠商,他們大多走的Inmon路線。經過多年的經驗總結,都已有自己的企業概念模型,這也非常適合走分層明確、具有中心數據倉庫的路線。在Inmon的體系中,EDW是按照第三範式建模的。之所以要強調這種思想,是因爲第三範式能夠讓數據模型變得簡潔、高度一致性。對數據倉庫的一個目的——統一口徑(Single Version of Truth),是非常有幫助的。
另一方面,Kimball的維度建模理論,即按照事實表、維表來構建數據倉庫、數據集市,也已經在很多實踐中被證明是非常有效的方法。可這種建模方法和第三範式多少有點衝突。例如在維表中,不同粒度的數據放在一種表裏面,即存在大量的數據冗餘。但這種方法對數據倉庫四大特點之一的“面向主題”,又是有利的。
如此看來,大家提到的方法似乎都是從不同角度去看,沒有絕對的對錯,只是在爲維護自己的觀點而爭論。具體採用何種分層,還得看項目投資大小、數據量多少以及業務邏輯複雜程度而定吧。
說句題外話,或許當概念太多的時候,我們最應該做的就是要拋開那些容易混淆視聽的名詞,去探察其真正的意義所在。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章