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

圖1 標準數據庫倉庫模型

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

圖3 改進結構的數據集成框架

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