轉(zhuǎn)載至:
http://www.ciotimes.com/infrastructure/database/a/database200909161049.html
導讀:本文提出一種改進的數(shù)據(jù)倉庫體系結(jié)構,在數(shù)據(jù)倉庫中添加一個輔助結(jié)構作為接收和存儲更新數(shù)據(jù)的暫存庫,直到數(shù)據(jù)倉庫獲得空閑周期,加入新的數(shù)據(jù)和更新必要的視圖;通過試驗模擬兩種數(shù)據(jù)倉庫結(jié)構,驗證了新的模型在設計和性能上的優(yōu)越性。
本文提出一種改進的數(shù)據(jù)倉庫體系結(jié)構,在數(shù)據(jù)倉庫中添加一個輔助結(jié)構作為接收和存儲更新數(shù)據(jù)的暫存庫,直到數(shù)據(jù)倉庫獲得空閑周期,加入新的數(shù)據(jù)和更新必要的視圖;通過試驗模擬兩種數(shù)據(jù)倉庫結(jié)構,驗證了新的模型在設計和性能上的優(yōu)越性。
數(shù)據(jù)倉庫中的數(shù)據(jù)是從多業(yè)務處理系統(tǒng)中抽取轉(zhuǎn)換而來的,這些數(shù)據(jù)源的數(shù)據(jù)是不斷變化的。因此,數(shù)據(jù)倉庫需要更新機制來不斷更新和維護,以保證數(shù)據(jù)的完整和正確。同時,數(shù)據(jù)倉庫面向決策支持,數(shù)據(jù)倉庫的體系結(jié)構應努力保證查詢和分析的實時性。
現(xiàn)在系統(tǒng)越來越龐大,數(shù)據(jù)源越來越多,結(jié)構也越來越復雜,這使得數(shù)據(jù)倉庫的加載和更新維護工作更加困難,制定一個數(shù)據(jù)集成的計劃花費的時間和精力也是越來越多。面對這種情況,開發(fā)人員的精力被調(diào)度繁雜的系統(tǒng)所占用,無法集中到制定合理高效的數(shù)據(jù)集成計劃上來。為了使這一過程更加自動化,減少人工干預,我們引入了基于元數(shù)據(jù)庫的工作流方法,使得整個數(shù)據(jù)倉庫更新處理過程成為一個整體,更加簡單易行,減輕了開發(fā)人員的負擔,從而提高效率。
1 數(shù)據(jù)倉庫的更新問題
為了對決策提供有效的支持,數(shù)據(jù)倉庫中的數(shù)據(jù)需要不斷地從業(yè)務數(shù)據(jù)庫中得到更新。數(shù)據(jù)更新是指在原有數(shù)據(jù)倉庫基礎上,定期捕捉源數(shù)據(jù)庫的變化數(shù)據(jù),追加到數(shù)據(jù)倉庫中。數(shù)據(jù)倉庫獲得所需更新信息的方法有以下3種:
(1)由建立在源數(shù)據(jù)庫上的應用程序提供更新信息給數(shù)據(jù)倉庫。這種方法優(yōu)點是易于執(zhí)行,只要對歷史遺留系統(tǒng)的代碼稍加修改,使它提供源數(shù)據(jù)庫中的更新給數(shù)據(jù)倉庫。缺點是遺留系統(tǒng)的代碼難以提供一個好的平臺為數(shù)據(jù)倉庫更新。
(2)利用日志文件。這種方法的優(yōu)點是對數(shù)據(jù)倉庫的更新不會影響源數(shù)據(jù)庫,利用日志文件效率很高,避免了掃描整個數(shù)據(jù)庫。缺點是解析源數(shù)據(jù)庫日志文件有困難,即:①系統(tǒng)日志文件通常采用軟件供應商專有的形式,而不同供應商之間難于共享結(jié)構信息;②獲得日志文件,需要系統(tǒng)管理員權限;③數(shù)據(jù)庫系統(tǒng)不一定都有實施該方法的數(shù)據(jù)庫日志類型。
(3)前后映象文件的方法。在抽取數(shù)據(jù)前后對數(shù)據(jù)庫各作一次快照,然后比較兩幅快照的不同從而確定新數(shù)據(jù)。這種方法的優(yōu)點和第2種方法一樣,快照數(shù)據(jù)被提供給數(shù)據(jù)倉庫,或者提供給獨立于源數(shù)據(jù)庫和數(shù)據(jù)倉庫的輔助處理器,來完成快照的比較工作。缺點是快照文件會變得越來越大,導致快照的比較工作非常耗時,占用大量資源,影響性能。數(shù)據(jù)倉庫更新過程牽涉的因素眾多而且復雜,因此,本文的研究只限于源數(shù)據(jù)已經(jīng)傳遞到數(shù)據(jù)倉庫后的數(shù)據(jù)更新處理。
2 改進的數(shù)據(jù)倉庫體系結(jié)構
常用的數(shù)據(jù)倉庫體系結(jié)構如圖1所示,它集成源數(shù)據(jù)庫的數(shù)據(jù),并將其存儲在數(shù)據(jù)倉庫中,用戶直接從數(shù)據(jù)倉庫訪問數(shù)據(jù)。這個結(jié)構簡單易行,但它不能及時地自動偵測源數(shù)據(jù)庫的更新,只有當高端應用對數(shù)據(jù)倉庫進行查詢時,才由數(shù)據(jù)倉庫的實體化視圖對相關的源數(shù)據(jù)庫發(fā)動查詢,源數(shù)據(jù)庫對更新處理處于被動狀態(tài)。本文建議在數(shù)據(jù)倉庫體系結(jié)構中添加一個如圖2所示的更新輔助結(jié)構,來優(yōu)化數(shù)據(jù)倉庫的性能,減少用戶查詢時間。該結(jié)構假定為非易失隨機存儲器NVRAM,用它作為數(shù)據(jù)倉庫和數(shù)據(jù)解釋器之間的緩沖存儲區(qū)。輔助結(jié)構和源數(shù)據(jù)庫(SDB)之間的數(shù)據(jù)流是單向的,負責接收由SDB提交到數(shù)據(jù)解釋器的更新數(shù)據(jù)。輔助結(jié)構和數(shù)據(jù)倉庫之間的數(shù)據(jù)流是雙向的,它向數(shù)據(jù)倉庫提供視圖維護的基本數(shù)據(jù),數(shù)據(jù)倉庫的查詢和維護請求則在輔助結(jié)構中執(zhí)行完成。有了這個輔助結(jié)構,避免了數(shù)據(jù)倉庫在接收數(shù)據(jù)解釋器中數(shù)據(jù)的同時,對數(shù)據(jù)庫表和用戶視圖執(zhí)行更新維護。使得數(shù)據(jù)倉庫的更新選擇在系統(tǒng)空閑時間,而不是在新數(shù)據(jù)由源數(shù)據(jù)庫轉(zhuǎn)換的同時進行。數(shù)據(jù)倉庫使用具有周期性,因此必然存在接收更新數(shù)據(jù)的空閑時間。另外數(shù)據(jù)倉庫可以查詢輔助結(jié)構獲取更新數(shù)據(jù),反饋給用戶的查詢。為了防止輔助結(jié)構中數(shù)據(jù)溢出,設一個機制強制執(zhí)行更新事務,將有關數(shù)據(jù)傳送到數(shù)據(jù)倉庫。

圖1 標準數(shù)據(jù)庫倉庫模型

圖2 數(shù)據(jù)倉庫的改進模型
3 改進模型的設計實現(xiàn)
新模型結(jié)構重點在于用戶查詢,系統(tǒng)對用戶查詢響應擁有對系統(tǒng)其他進程更高的優(yōu)先權。
(1)功能結(jié)構。來自數(shù)據(jù)解釋器的數(shù)據(jù),首先存放在更新輔助結(jié)構的數(shù)據(jù)表中。這些輔助表(例如索引)是存儲在數(shù)據(jù)倉庫中的表的副本,但是不具有與數(shù)據(jù)倉庫結(jié)構相聯(lián)系的管理能力。它們是用于更新數(shù)據(jù)倉庫的臨時存儲,而不用于用戶直接訪問。更新信息傳送到輔助結(jié)構時,首先檢查輔助結(jié)構的空間相對分配給輔助結(jié)構的NVRAM空間所占比例。當輔助結(jié)構已使用空間達到NVRAM空間的95%,標志溢出,更新輔助結(jié)構自動生成數(shù)據(jù)包和必要的查詢傳遞給數(shù)據(jù)倉庫。溢出功能觸發(fā)器是一種安全措施,防止因為更新輔助結(jié)構的存儲空間滿,不能接收來自數(shù)據(jù)解釋器的數(shù)據(jù)。操作流程為數(shù)據(jù)倉庫在空閑時間請求更新輔助結(jié)構里的數(shù)據(jù)。數(shù)據(jù)倉庫的系統(tǒng)請求或者數(shù)據(jù)溢出標志可能會觸發(fā)更新進程。一旦更新進程被觸發(fā),更新輔助結(jié)構生成數(shù)據(jù)包,并發(fā)送給數(shù)據(jù)倉庫,用于插入到數(shù)據(jù)倉庫表中。數(shù)據(jù)倉庫中相應的數(shù)據(jù)表和視圖被更新,在更新完成后,事務完成信息返回給輔助結(jié)構。然后輔助結(jié)構刪除臨時存儲表中的相關數(shù)據(jù),從而釋放其占用的空間。
(2)處理用戶查詢。數(shù)據(jù)倉庫接到用戶查詢要求后,系統(tǒng)暫停隊列表中除了來自輔助結(jié)構的用戶查詢響應之外的所有隊列。倉庫應用程序確認用戶查詢,并將一個查詢副本立即發(fā)送給更新輔助結(jié)構,輔助結(jié)構臨時內(nèi)存中可能存有與查詢相關的信息。查詢先在數(shù)據(jù)倉庫的主數(shù)據(jù)表處理,查詢的結(jié)果暫存在臨時表里,該臨時表用于存放以后不斷積累的查詢結(jié)果數(shù)據(jù)。如果輔助結(jié)構里有任何與查詢有用的數(shù)據(jù),會被立即提交給數(shù)據(jù)倉庫作為對查詢副本的響應。輔助結(jié)構響應用戶查詢的數(shù)據(jù)傳輸在系統(tǒng)信息通道中有最高優(yōu)先權,以確保來自數(shù)據(jù)倉庫的信息迅速地被處理,并使當前執(zhí)行的用戶查詢較系統(tǒng)查詢隊列里其他查詢最先獲得所需數(shù)據(jù)。如果輔助結(jié)構中沒有符合用戶查詢要求的數(shù)據(jù),輔助結(jié)構提交一個空包作為響應,防止數(shù)據(jù)倉庫空等待,使數(shù)據(jù)倉庫能控制用戶查詢進程,確認查詢進程的結(jié)束。來自輔助結(jié)構的數(shù)據(jù)加入到臨時表里,然后發(fā)給報表/視圖生成器處理成用戶可讀的形式。
4 基于XML的中間件模型
改進結(jié)構中提供了多種操作符,如投影、選擇、連接、并、拆分等。把復雜的數(shù)據(jù)集成工作分解為很多相對簡單的小步驟,使用戶可以靈活地定制自己的數(shù)據(jù)集成計劃,這樣也為使用工作流方法來調(diào)度整個數(shù)據(jù)集成計劃提供了方便,因為工作流方法對于這種流程化的處理十分方便。使用工作流方法,來操縱數(shù)據(jù)的流向,使其從數(shù)據(jù)源經(jīng)過預先指定的處理過程流向目標,即數(shù)據(jù)倉庫中。工作流方法離不開元數(shù)據(jù)庫的支持。元數(shù)據(jù)貫穿于數(shù)據(jù)倉庫的整個過程。按照數(shù)據(jù)庫中的定義,元數(shù)據(jù)是關于數(shù)據(jù)的數(shù)據(jù)。在數(shù)據(jù)倉庫的環(huán)境下,元數(shù)據(jù)的作用更加重要,由于數(shù)據(jù)倉庫是面向主題的,所以其元數(shù)據(jù)的內(nèi)容也更加豐富。初始階段我們可以根據(jù)元數(shù)據(jù)庫提供的數(shù)據(jù)源信息,來制定清洗計劃,執(zhí)行這個計劃,能完成一次數(shù)據(jù)的抽取轉(zhuǎn)換和加載任務,把各個數(shù)據(jù)源中的零散的數(shù)據(jù)整合到數(shù)據(jù)倉庫中;在維護階段,把用戶在建立數(shù)據(jù)倉庫的初期所制定的計劃,主要包括數(shù)據(jù)庫的表信息以及用到的臨時表等,以XML文件的形式保存在元數(shù)據(jù)庫中。這樣節(jié)約了管理人員的時間,他們的精力可以更多地集中在制定一個合理高效的數(shù)據(jù)集成計劃上,從而提高效率。
5 一種更新流實例
以下給出了一個具體的例子來說明改進結(jié)構如何處理凋度流程,如圖3、圖4所示。

圖3 改進結(jié)構的數(shù)據(jù)集成框架

圖4 計劃工作流流程
圖4中每一個節(jié)點都是工作流的一個活動,箭頭所指向的是數(shù)據(jù)流的實際流向,從數(shù)據(jù)源到目標。虛線表示的是控制流。數(shù)據(jù)流向和控制流向基本相同,重合的沒有畫出,只是在并操作時不同,所以用不同的箭頭標注出來。本例中,要把來自3個不同數(shù)據(jù)庫的原始表經(jīng)過一系列的操作如投影連接等,整合成一張表加載到數(shù)據(jù)倉庫中。首先通過ODBC/OLE DB標準或者數(shù)據(jù)源提供的API,把數(shù)據(jù)從源中抽取出來。然后先投影表1,再與表2進行連接,得到的表與表3進行并,形成一張表,再進行一些排序篩選,最后加載到目標數(shù)據(jù)倉庫中。要注意的是,在進行并(Union)操作的2個表必須是列結(jié)構相同,否則要進行回溯,對2表進行相應的改動處理,符合Union 的要求后才能繼續(xù)處理下去。
在改進的模型結(jié)構中,投影(Project)、連接(Join)、并(Union)等操作符都對應一個類(Class)。與此操作符相關的各種處理都封裝在類的內(nèi)部。工作流引擎通過工作流API接口來調(diào)用類內(nèi)的相關函數(shù),完成數(shù)據(jù)集成。下面是圖4這個數(shù)據(jù)集成計劃的XML文件格式,我們只關注定義活動的部分:
…
…
Ying Liu
</Activitylnvolve>
SELECT[reader]FROM tablenameWHERE.
…
</ActiVityInvolve>
<!- -活動的流向- ->
轉(zhuǎn)向6</Choice>
轉(zhuǎn)向7</Choice>
轉(zhuǎn)向8</Choice>
結(jié)束</Choice>
</App rovalChoices>
</Activity>
…
<!- -活動之間的流向定義- ->
</FlowDirection>
其中是定義Union這個活動,包括活動的所有者,數(shù)據(jù)可能流向與條件等。是定義一個流向,即圖中的一個箭頭,標志了箭頭的起始活動等。這個文件就可以把我們的計劃保存下來,工作流引擎通過XP2DL解析器來解析這個文件,來獲得最初用戶制定的集成計劃。
觸發(fā)更新操作的時機。觸發(fā)更新操作可以有多種方式:①可以由用戶驅(qū)動,如用戶發(fā)出命令來進行數(shù)據(jù)倉庫的更新;②可以時間驅(qū)動,如規(guī)定在一天當中的某個時刻來更新數(shù)據(jù)倉庫;③還可以用事件驅(qū)動,如數(shù)據(jù)源的日志發(fā)生改變后,啟動更新操作。觸發(fā)方式也保存在元數(shù)據(jù)庫中,可以根據(jù)需求靈活地選擇最佳方式。
6 結(jié)束語
數(shù)據(jù)倉庫設計和運行過程中,數(shù)據(jù)抽取、轉(zhuǎn)換和轉(zhuǎn)載ETL是一個重要的問題,其中,數(shù)據(jù)更新又是一個關鍵點。本文討論了在數(shù)據(jù)更新過程中,為捕獲源數(shù)據(jù)庫更新,提出了一種改進的數(shù)據(jù)倉庫體系結(jié)構,它使數(shù)據(jù)的更新較傳統(tǒng)結(jié)構更快速、便捷。并在提出的改進模型基礎上,設計了在元數(shù)據(jù)庫指導下,以工作流的方法來調(diào)度整個更新過程。