數(shù)據倉庫的數(shù)據存儲和實現(xiàn)
當面對大量的數(shù)據,而且是各種各樣類型的數(shù)據,還可能有的數(shù)據單元(粒度)很大,單純靠數(shù)據庫是不易解決,為了解決這些問題,提高系統(tǒng)后臺的效率,就需要引進數(shù)據倉庫。
有關數(shù)據倉庫的數(shù)據存儲的幾個基本問題:
1.數(shù)據存儲的方式?
數(shù)據倉庫的數(shù)據由兩種存儲方式:一種是存儲在關系數(shù)據庫中,另一種是按多維的方式存儲,也就是多維數(shù)組。
2.存儲何種數(shù)據?
數(shù)據倉庫中存在不同的綜合級別的數(shù)據。一般把數(shù)據分成四個級別,早期細節(jié)級數(shù)據,當前細節(jié)級數(shù)據,輕度綜合級,高度綜合級。不同的綜合級別一般稱為粒度。粒度越大,表示細節(jié)程度越低,綜合程度越高。級別的劃分是根據粒度進行的。
數(shù)據倉庫中還有一種是元數(shù)據,也就是關于數(shù)據的數(shù)據。傳統(tǒng)數(shù)據庫中的數(shù)據字典或者系統(tǒng)目錄都是元數(shù)據,在數(shù)據倉庫中 元數(shù)據表現(xiàn)為兩種形式:一種是為了從操作型環(huán)境向數(shù)據倉庫環(huán)境轉換而建立的元數(shù)據,它包含了數(shù)據源的各種屬性以及轉換時的各種屬性;另一種元數(shù)據是用來與多維模型和前端工具建立映射用的。
3.粒度與分割
粒度是對數(shù)據倉庫中的數(shù)據的綜合程度高低的一個衡量。粒度越小,細節(jié)程度越高,綜合程度越低,回答查詢的種類越多;反之粒度越大,細節(jié)程度越低,綜合程度越高,回答查詢的種類越少。
分割是將數(shù)據分散到各自的物理單元中去以便能分別獨立處理,以提高數(shù)據處理的效率。數(shù)據分割后的數(shù)據單元成為分片。數(shù)據分割的標準可以根據實際情況來確定,通??蛇x擇按日期、地域或者業(yè)務領域等進行分割,也可以按照多個標準組合分割。
4.追加時數(shù)據的組織方式
這里說一種比較簡單的情況,輪轉綜合文件。比如:數(shù)據存儲單位被分為日、周、季度、年等幾個級別。每天將數(shù)據記錄在日記錄集中;然后七天的數(shù)據被綜合存放在周記錄集中,每隔一季度周記錄集中的數(shù)據被存放到季度記錄集中,依此類推……這種方法把越早期的記錄存放的綜合程度越高,也就是粒度越大。
數(shù)據倉庫的實現(xiàn)步驟:
一般地,設計和創(chuàng)建數(shù)據倉庫的步驟是:
1.確定用戶需求
確定終端用戶的需要,為數(shù)據倉庫中存儲的數(shù)據建立模型。通過數(shù)據模型,可以得到企業(yè)完整而清晰的描述信息。數(shù)據模型是面向主題建立的,同時又為多個面向應用的數(shù)據源的集成提供了統(tǒng)一的標準。數(shù)據倉庫的數(shù)據模型一般包括:企業(yè)的各個主題域、主題域之間的聯(lián)系、描述主題的碼和屬性組。
深入地分析企業(yè)的數(shù)據源,記錄數(shù)據源系統(tǒng)的功能與處理過程。一般地,設計數(shù)據倉庫最重要的一步便是要理解商業(yè)動作的規(guī)律,只有了解數(shù)據是如何被處理的,才能分解商業(yè)處理過程,從中獲取數(shù)據元素。
利用現(xiàn)有系統(tǒng)的信息,確定從源數(shù)據到數(shù)據倉庫的數(shù)據模型所必須的轉化/綜合邏輯。這涉及到應該合并轉化多少數(shù)據;是綜合所有的數(shù)據文件還是綜合發(fā)生變化的操作系統(tǒng)文件;轉化/綜合過程應該多長時間執(zhí)行一次等問題。決定數(shù)據轉化與更新頻率是重要的商業(yè)事件。無論數(shù)據倉庫的更新是采用事件驅動還是時間驅動,都必須讓數(shù)據倉庫知道當某種事件發(fā)生時就需要更新數(shù)據。
在數(shù)據倉庫建立之前,應該寫一個詳細的方案和實現(xiàn)規(guī)劃。這種方案和實現(xiàn)規(guī)劃包括:建立商業(yè)案例、收集用戶需求、確定技術需求。建立商業(yè)案例包括由該方案解決的商業(yè)需求、方案的成本和投資的收益。收集用戶需求主要是調查用戶建立數(shù)據倉庫的意圖。用戶需求可以確定這些內容:數(shù)據需求(粒度級)、企業(yè)經營系統(tǒng)包含的數(shù)據、這些數(shù)據遵循的商業(yè)規(guī)則、需要提供給用戶的查詢、用戶需要的標準報告、將要使用的客戶應用程序工具。確定技術要求包括下列內容:硬件體系結構和框架(例如,鏈接到數(shù)據市場所在的地理位置)、備份和恢復機制、安全性限制、從經營系統(tǒng)到數(shù)據倉庫加載數(shù)據和轉換數(shù)據的方法。
#p#
2.設計和建立數(shù)據庫
設計和建立數(shù)據庫是成功地創(chuàng)建數(shù)據倉庫的一個關鍵步驟。這一步通常由有經驗的數(shù)據庫設計人員使用,因為這一步涉及的數(shù)據來自多種數(shù)據源并且要把它們合并成一個單獨的邏輯模型。不象OLTP系統(tǒng)那樣以高度的正規(guī)化形式存儲數(shù)據,數(shù)據倉庫中存儲的數(shù)據以一種非常非正規(guī)化的形式存儲數(shù)據以便提高查詢的性能。數(shù)據倉庫常常使用星型模式和雪花型模式來存儲數(shù)據,作為OLAP工具管理的合計基礎,以便盡可能快地響應復雜查詢。
星型模式是***的實現(xiàn)數(shù)據倉庫的設計結構。星型模式通過使用一個包含主題的事實表和多個包含事實的非正規(guī)化描述的維度表來執(zhí)行典型的決策支持查詢。一旦創(chuàng)建了事實表,那么可以使用OLAP工具預先計算常用的訪問信息。星型模式是一種關系型數(shù)據庫結構,在該模式的中間是事實表,周圍是次要的表,數(shù)據在事實表中維護,維度數(shù)據在維度表中維護。每一個維度表通過一個關鍵字直接與事實表關聯(lián)。維度是組織數(shù)據倉庫數(shù)據的分類信息,例如時間、地理位置、組織等等。維度用于父層和子層這類分層結構。例如,地理位置維度可以包含國家、城市等數(shù)據。因此,在該維度表中,緯度由所有的國家、所有的城市組成。為了支持這種分層結構,在維度表中需要包括每一個成員與更高層次上緯度的關系。維度關鍵字是用于查詢中心事實表數(shù)據的唯一標識符。維度關鍵字就像主鍵一樣,把一個維度表與事實表中的一行鏈接起來。這種結構使得很容易構造復雜的查詢語句并且支持決策支持系統(tǒng)中向下挖掘式的分析。事實表包含了描述商業(yè)特定事件的數(shù)據。例如銀行業(yè)務或者產品銷售。事實表還包含了任何數(shù)據合計,例如每一個地區(qū)每月的銷售情況。一般地,事實表中的數(shù)據是不允許修改的,新數(shù)據只是簡單地增加進去。維度表包含了用于參考存儲在事實表中數(shù)據的數(shù)據,例如產品描述、客戶姓名和地址、供應商信息等。把特征信息和特定的事件分開,可以通過減少在事實表中掃描的數(shù)據量提高查詢性能。維度表不包含與事實表同樣多的數(shù)據,維度數(shù)據可以改變,例如客戶的地址或者電話號碼改變了。
通過降低需要從磁盤讀取數(shù)據的數(shù)據量,星型模式設計有助于提高查詢性能。查詢語句分析比較小的維度表中的數(shù)據來獲取維度關鍵字以便在中心的事實表中索引,可以降低掃描的數(shù)據行。
在轉換OLTP數(shù)據庫模式到星型模式時,涉及的步驟如下:
a.確定事實表和維度表
確認在OLTP系統(tǒng)中現(xiàn)有的表和數(shù)據包含了將要用在事實表和維度表中的數(shù)據,是非常重要的。如果確認不正確,那么數(shù)據倉庫的性能就比較差,在以后可能需要重新設計。重新設計一個可能包含了大量數(shù)據的數(shù)據倉庫是一項耗費很大的任務。確定事實表和維度表的結構和組成的過程比較難,特別是當涉及多個OLTP系統(tǒng)時。
b.設計事實表
設計事實表的主要目標是最小化表的大小。事實表是數(shù)據庫中***的表,因為它們包含了基本的商業(yè)事務的詳細信息。然而,一定要考慮存儲和維護這些大表的成本。例如,大表的處理時間比較長、備份和恢復的時間比較長、執(zhí)行查詢的時間也比較長。降低事實表大小的最簡單方法如下:降低列的數(shù)量、盡可能地降低每一個列的大小、把歷史數(shù)據歸檔到單獨的事實表等。
c.設計維度表
設計維度表的主要目標是非正規(guī)化那么參考事實表的數(shù)據到一個單獨的表。最常用的維度數(shù)據應該直接參考事實表,而不是通過其他維度表間接參考維度表。這種方法可以最小化表連接的數(shù)量,提高系統(tǒng)的性能。
d.實現(xiàn)數(shù)據庫設計
當事實表和維度表設計之后,***一步是在Microsoft SQL Server中物理地實現(xiàn)數(shù)據庫。當創(chuàng)建數(shù)據庫時,考慮分區(qū)策略,可以使用由SQL Server提供的可以并行處理數(shù)據的文件組。當創(chuàng)建用于存儲事實和維度的表時,應該盡可能地考慮數(shù)據庫的分區(qū)策略,把事實表分別存儲在不同的文件組上。索引可以加速數(shù)據倉庫的檢索,應該在每一個維度表的關鍵字列上創(chuàng)建一個索引。
3.提取和加載數(shù)據
把經營系統(tǒng)中數(shù)據提取出來然后加載到數(shù)據倉庫中,隨著復雜性的變化而變化。如果在數(shù)據源中的數(shù)據和將要出現(xiàn)在數(shù)據倉庫中的數(shù)據是直接關聯(lián),那么這個進程非常簡單。這個進程也可能非常地復雜,例如數(shù)據源的數(shù)據駐留在多個異構系統(tǒng)中,并且在加載數(shù)據之前需要大量的轉變格式和修改。提取和加載數(shù)據的進程如下:
◆校驗經營系統(tǒng)中的數(shù)據
◆從經營系統(tǒng)中提取數(shù)據
◆凈化數(shù)據
◆把數(shù)據轉換和遷移到數(shù)據倉庫中
a.校驗數(shù)據
在數(shù)據從OLTP系統(tǒng)提取之前,確保數(shù)據是完全有效的是非常必要的。應該由商業(yè)分析人員在數(shù)據源確定是有效的。對數(shù)據的任何變化應該在經營系統(tǒng)中改變,而不是在數(shù)據倉庫中。校驗數(shù)據是非常耗時的,通過寫存儲過程來檢查數(shù)據的域完整性來自動化校驗進程。然而,手工校驗數(shù)據也是必要的。如果發(fā)現(xiàn)了無效的數(shù)據,應該盡力找到錯誤發(fā)生的原因和更正這些錯誤。
b.遷移數(shù)據
從經營系統(tǒng)中遷移數(shù)據一般是在數(shù)據拷貝到數(shù)據倉庫之前,把數(shù)據拷貝到一個中間數(shù)據庫中。如果數(shù)據需要凈化,那么把數(shù)據拷貝到中間數(shù)據庫中是必要的。應該在OLTP系統(tǒng)中活動比較低的時候拷貝數(shù)據,否則會降低系統(tǒng)的性能。另外,如果該數(shù)據倉庫是由來自多個相關經營系統(tǒng)中的數(shù)據構成,應該確保數(shù)據遷移發(fā)生在系統(tǒng)同步的時候。如果經營系統(tǒng)不同步,那么數(shù)據倉庫中的數(shù)據可能會產生預想不到的錯誤。在Microsoft SQL Server 7中,Microsoft SQL Server Data Transformation Services Import and Export wizards可以用來創(chuàng)建一系列任務,可以把數(shù)據從異構經營系統(tǒng)中拷貝到一個運行SQL Server的中間數(shù)據庫中。
c.數(shù)據凈化
數(shù)據凈化就是使數(shù)據達到一致性。在多個經營系統(tǒng)中,可能有相同的數(shù)據。例如,一個名稱為ABC Cooperation的公司可能被寫成ABC Co、ABC、ABC Cooperation等。如果這些名稱不一致,那么在查詢的時候就會將這個公司作為兩個不同的公司處理。如果在數(shù)據倉庫中的數(shù)據生成一致的信息,那么該公司的名稱必須完全一致。
數(shù)據凈化可以通過下面幾種方法得到:
在從OLTP系統(tǒng)拷貝到中間數(shù)據庫或者數(shù)據倉庫時,使用SQL Server的數(shù)據轉換服務的數(shù)據引入引出向導修改數(shù)據
寫一個連接數(shù)據源的Microsoft ActiveX腳本或者Visual C++程序,由DTS API程序執(zhí)行,來凈化數(shù)據
例如,在定單系統(tǒng)中,這些數(shù)據需要凈化:State(必須總是兩個字符的值)以及ProductName(必須是產品的完整名稱,不能使用縮寫)。那么,在拷貝數(shù)據的進程中,可以使用數(shù)據轉換服務的引入引出向導檢查State的值,使其為兩個字符的值,通過寫Visual C++程序可以保證產品的名稱為完整的名稱。一旦數(shù)據凈化之后,就可以把數(shù)據移動到數(shù)據倉庫中。
d.轉換數(shù)據
在數(shù)據的遷移進程中,一般地,經常需要把經營數(shù)據轉換成一種單獨的格式,以便適應數(shù)據倉庫的設計。例如,轉換數(shù)據可以包括下列內容:把所有的字母字符轉變成大寫字母;重新計算匯總數(shù)據;把單個數(shù)據分解成多個數(shù)據,例如把格式為nnnn-description的產品代碼分解成單獨的代碼和描述值;把多個數(shù)據合并成一個數(shù)據,例如把姓和名合成一個數(shù)據姓名;把數(shù)據從一種表示形式映射成另外一種表示形式。例如把數(shù)據(1, 2, 3, 4)轉換成(I, II, III, IV);由于數(shù)據已經被凈化了,所以數(shù)據轉換進程發(fā)生在遷移進程中,這時數(shù)據要么從經營數(shù)據庫中要么從中間數(shù)據庫中拷貝到數(shù)據倉庫中。
【編輯推薦】