摘 要: 如何實現(xiàn)數(shù)據(jù)倉庫的“動態(tài)”特性是部署“動態(tài)數(shù)據(jù)倉庫”系統(tǒng)的關鍵所在,,而關鍵的關鍵又在于如何實現(xiàn)動態(tài)數(shù)據(jù)倉庫中的實時數(shù)據(jù)獲取。以一個實際系統(tǒng)為例,,提出了一種適用的動態(tài)數(shù)據(jù)倉庫體系架構及實時數(shù)據(jù)捕獲與加載解決方案,。在實際系統(tǒng)中驗證了該方案的可行性。
關鍵詞: 動態(tài)數(shù)據(jù)倉庫,;體系架構,;變更數(shù)據(jù)捕獲;實時加載
動態(tài)數(shù)據(jù)倉庫在傳統(tǒng)數(shù)據(jù)倉庫的基礎上增加了對實時決策的支持,,為了滿足實時決策的要求,,就需要最新的實時數(shù)據(jù),這就要求動態(tài)數(shù)據(jù)倉庫系統(tǒng)能夠及時準確地捕獲到有實時性要求的變更數(shù)據(jù),,并實時地將變更數(shù)據(jù)加載到動態(tài)數(shù)據(jù)倉庫中,,盡量做到接近零延遲,滿足支持實時決策的要求,。
本文以某企業(yè)生產(chǎn)線質量控制決策分析系統(tǒng)的數(shù)據(jù)倉庫為基礎,,分析其實時決策的需求,提出適合于該特定應用的動態(tài)數(shù)據(jù)倉庫體系架構及實時數(shù)據(jù)捕獲與加載解決方案,。
1 動態(tài)數(shù)據(jù)倉庫的實時決策需求分析
動態(tài)數(shù)據(jù)倉庫不僅支持傳統(tǒng)的OLAP和數(shù)據(jù)挖掘等分析應用,,還支持實時監(jiān)測、戰(zhàn)術決策等實時性要求很高的分析,。這使得動態(tài)數(shù)據(jù)倉庫中的數(shù)據(jù)有不同的實時性要求,,根據(jù)不同的實時性需求,可以把動態(tài)數(shù)據(jù)倉庫中的數(shù)據(jù)分為普通數(shù)據(jù),、有準實時更新要求的數(shù)據(jù),、有實時更新要求的數(shù)據(jù)。動態(tài)數(shù)據(jù)倉庫中數(shù)據(jù)的加載方式也可以依此分為傳統(tǒng)ETL批量加載,、準實時的小批量加載,、實時加載。
本文以實際企業(yè)生產(chǎn)線質量控制決策分析系統(tǒng)的數(shù)據(jù)倉庫為例,。該數(shù)據(jù)倉庫有基板品質分析和電視機質量分析兩個主題,,主題所涉及的信息及充分代表主題的屬性組如表1所示。
針對此數(shù)據(jù)倉庫的兩個主題可以進行一些OLAP分析,,如:一段時間內某種板型的基板合格率(時間維度+板型維度),。切塊分析,鉆取分析按時間維度(月,季,,年)鉆取,。
一段時間內某種機型出現(xiàn)某種故障數(shù)目(時間+故障現(xiàn)象+機型)。切塊分析,,鉆取分析按時間維度(月,,季度,年)鉆取,。
一段時間內某種機型的電性能直通率(時間維度+機型維度),。切塊分析,鉆取分析按時間維度(月,,季度,,年)鉆取。
這些OLAP分析的數(shù)據(jù)只需周期性地更新到數(shù)據(jù)倉庫中,,無須實時更新變更數(shù)據(jù)到數(shù)據(jù)倉庫,。
目前根據(jù)用戶要求,提出了一系列實時控制需求,,例如:監(jiān)測生產(chǎn)線上電視機故障機的數(shù)目,,每天的故障電視機超過N臺時要發(fā)出警報。此時數(shù)據(jù)倉庫中faultnum屬性的值需要實時更新,,源數(shù)據(jù)庫中提供faultnum屬性值的源字段faultcount中的變更數(shù)據(jù)就屬于需要實時更新到數(shù)據(jù)倉庫中的實時變更數(shù)據(jù),。據(jù)此,本文將針對該實際應用提出實時數(shù)據(jù)捕獲與加載解決方案,。
2 數(shù)據(jù)倉庫的數(shù)據(jù)集成方式分析
數(shù)據(jù)倉庫的數(shù)據(jù)集成方式有以下幾種[1],。
(1)周期性的ETL方式
對于傳統(tǒng)的數(shù)據(jù)倉庫數(shù)據(jù),都是采用ETL每隔一個周期將變化數(shù)據(jù)以文件導入的方式抽取,、轉換并加載到數(shù)據(jù)倉庫中,;對于有一定實時需求的數(shù)據(jù),可以縮短ETL數(shù)據(jù)周期來達到準實時的效果,。
(2)直接點滴導入
將變更的數(shù)據(jù)實時地以數(shù)據(jù)流的形式直接導入數(shù)據(jù)倉庫或者數(shù)據(jù)倉庫動態(tài)層的事實表中,。這種數(shù)據(jù)集成方式可以達到實時加載變更數(shù)據(jù)的效果,缺點是當加載變更數(shù)據(jù)時數(shù)據(jù)倉庫不能響應查詢,。
(3)點滴翻轉導入
將變更的數(shù)據(jù)實時地以數(shù)據(jù)流的形式導入數(shù)據(jù)倉庫動態(tài)層事實表的一個副本中,,這個副本與事實表有相同的結構,之后周期地將副本里的數(shù)據(jù)拷貝到事實表中,,再清空表副本接收新的變更數(shù)據(jù),。這種方式可以實時地加載變更數(shù)據(jù)同時始終保持對查詢的響應,缺點是當變更數(shù)據(jù)的數(shù)據(jù)量很大時拷貝副本表的時間空間代價均比較高,。
(4)導入實時數(shù)據(jù)緩存
可以在傳統(tǒng)的數(shù)據(jù)倉庫之外設置一個單獨的實時數(shù)據(jù)緩存,,用來接收實時變更數(shù)據(jù),,實時數(shù)據(jù)緩存可以用操作數(shù)據(jù)存儲(ODS)來實現(xiàn),實時查詢可以直接基于ODS進行,。這樣既可以滿足實時加載數(shù)據(jù)的要求,,在加載數(shù)據(jù)時還可以始終保持對即時查詢的響應,還免去了拷貝副本的步驟,。
無論選用何種數(shù)據(jù)集成方式導入數(shù)據(jù),,都要滿足以下基本準則[2]。
(1)不影響源業(yè)務系統(tǒng)的事務處理,;
(2)數(shù)據(jù)倉庫始終滿足實時查詢的要求,,不能有非響應期;
(3)實時性要求高的變更數(shù)據(jù)應做到接近零延時的加載到數(shù)據(jù)倉庫中,。
按以上準則,由于第(2)點的要求,,直接點滴導入不適合作為實時加載變更數(shù)據(jù)的數(shù)據(jù)集成方式,,點滴翻轉導入相比導入實時數(shù)據(jù)緩存的方式,拷貝副本所用代價較大,,也不適合實時加載數(shù)據(jù),。
綜上所述,針對數(shù)據(jù)倉庫中的不同實時性要求的數(shù)據(jù)可以采用不同的數(shù)據(jù)集成策略,。對于傳統(tǒng)的提供戰(zhàn)略分析的數(shù)據(jù),,依舊采用ETL導入的方式加載新的數(shù)據(jù),對于有一定實時性要求的分析數(shù)據(jù),,可以采用縮短數(shù)據(jù)周期的小批量ETL的方式將變更數(shù)據(jù)加載到數(shù)據(jù)倉庫中(導入到數(shù)據(jù)倉庫動態(tài)層的事實表副本,,再拷貝到事實表中),對于有很高實時性要求的數(shù)據(jù),,采用導入實時數(shù)據(jù)緩存的數(shù)據(jù)集成方式,。
3 動態(tài)數(shù)據(jù)倉庫體系架構
根據(jù)上面的分析,應該選擇導入實時數(shù)據(jù)緩存的方式來加載實時變更數(shù)據(jù),,用小批量ETL加載來更新準實時要求的數(shù)據(jù),。由此,本文選擇將數(shù)據(jù)倉庫分層,,同時在數(shù)據(jù)倉庫外部單獨設立實時數(shù)據(jù)緩存的動態(tài)數(shù)據(jù)倉庫架構,,如圖1所示。
對多個源數(shù)據(jù)系統(tǒng)產(chǎn)生的新的變更數(shù)據(jù)分類,,需要實時加載到數(shù)據(jù)倉庫中的變更數(shù)據(jù)采用某種變更數(shù)據(jù)捕獲策略CDC(Changed Data Capture)加載到以ODS實現(xiàn)的實時數(shù)據(jù)緩存中,;只需要近似實時加載到數(shù)據(jù)倉庫中的變更數(shù)據(jù)以小批量ETL的方式加載到數(shù)據(jù)倉庫動態(tài)層的事實表副本中;其他數(shù)據(jù)周期性地以ETL的過程進行更新,?;诖藙討B(tài)數(shù)據(jù)倉庫的架構,,實時戰(zhàn)術查詢可以直接在ODS上進行;戰(zhàn)略決策的查詢分析直接在數(shù)據(jù)倉庫靜態(tài)層進行,;同時涉及歷史數(shù)據(jù)和實時數(shù)據(jù)的查詢可以借助于ODS的即時數(shù)據(jù)融合機制將ODS中的實時數(shù)據(jù)即時匯總更新到數(shù)據(jù)倉庫中的歷史數(shù)據(jù)中,,滿足該類查詢的請求。
4 動態(tài)數(shù)據(jù)倉庫的數(shù)據(jù)加載
4.1 變更數(shù)據(jù)捕獲
需要實時更新到動態(tài)數(shù)據(jù)倉庫中的數(shù)據(jù)首先必須被變更數(shù)據(jù)捕獲進程抓取,,實現(xiàn)變更數(shù)據(jù)實時捕獲的方式如下[3],。
(1)掃描新舊數(shù)據(jù)源計算差分。這種方式需要消耗大量內存空間,。
(2)利用觸發(fā)器,。這種方式會消耗原系統(tǒng)端的大量資源,影響原業(yè)務系統(tǒng)的事務處理性能,,違反前面提到的基本準則,。
(3)讀取、分析數(shù)據(jù)庫的事務日志,??梢栽诓僮飨到y(tǒng)層面讀取事務日志,這樣就不會影響原系統(tǒng)的事務處理,,且只需讀取和分析反映了最近變更數(shù)據(jù)的事務日志,,效率比較高。
根據(jù)以上分析,,選擇采用讀取,、分析事務日志的方式實時捕獲變更數(shù)據(jù)。這種方式的CDC流程如圖2所示,。
數(shù)據(jù)庫中有數(shù)據(jù)更新時會先在事務日志中記載更新日志記錄,,日志監(jiān)測進程監(jiān)測日志的變化,有新的更新日志記錄時就實時地讀取日志,,將日志送至日志分析子模塊進行分析,,得到變更數(shù)據(jù),在分析日志的過程中將變更數(shù)據(jù)分類為普通變更數(shù)據(jù),、準實時變更數(shù)據(jù)和實時變更數(shù)據(jù),,分別送至不同的數(shù)據(jù)傳輸通道。實時數(shù)據(jù)通過消息中間件的消息隊列實時發(fā)送到ODS實時分區(qū),,準實時數(shù)據(jù)暫存在一個臨時文件中,,以小批量加載的方式導入到數(shù)據(jù)倉庫動態(tài)層。普通變更數(shù)據(jù)暫不予傳輸[4],。
4.2 實時傳輸變更數(shù)據(jù)
需要實時加載到數(shù)據(jù)倉庫中的變更數(shù)據(jù)在被CDC模塊捕獲到之后,,還須將其實時傳輸?shù)綌?shù)據(jù)倉庫一端,加載到ODS實時分區(qū)中,。這里借助消息傳輸中間件的消息隊列傳輸變更數(shù)據(jù)[5],,如圖3所示,。
CDC模塊首先篩選出需要實時更新的變更數(shù)據(jù),將其交給源業(yè)務系統(tǒng)端的消息隊列管理器處理,,消息隊列管理器將實時數(shù)據(jù)從源業(yè)務系統(tǒng)端的消息發(fā)送隊列發(fā)送到訂閱此變更數(shù)據(jù)的數(shù)據(jù)倉庫端的消息接收隊列,,數(shù)據(jù)倉庫端的消息隊列管理器再將接收到的實時數(shù)據(jù)加載到ODS實時分區(qū)中,完成實時數(shù)據(jù)的加載,。
以電視機質量主題中faultnum字段的實時數(shù)據(jù)更新為例,。在生產(chǎn)線的某一個信息采集點A,當出現(xiàn)一臺故障電視機時,,操作人員將數(shù)據(jù)庫中故障機數(shù)目faultcount的值加1,,數(shù)據(jù)在被寫入到數(shù)據(jù)庫中之前,會首先在事務日志中添加反映該操作的更新日志記錄,。此時,,CDC模塊的日志監(jiān)測進程會及時讀取反映實時變更數(shù)據(jù)的日志記錄,送至日志分析流程,。分析完成后得到變更數(shù)據(jù),,并判斷出faultcount屬于數(shù)據(jù)倉庫訂閱的需要實時更新的數(shù)據(jù)。于是將實時變更數(shù)據(jù)交給消息中間件處理,,消息中間件從原系統(tǒng)端的消息發(fā)送隊列將實時數(shù)據(jù)發(fā)送到數(shù)據(jù)倉庫端的消息接收隊列,數(shù)據(jù)倉庫端的消息中間件將實時數(shù)據(jù)取出,,用此新的值更新存儲在ODS實時分區(qū)中的faultnum字段的值,。
動態(tài)數(shù)據(jù)倉庫是建立在傳統(tǒng)數(shù)據(jù)倉庫基礎之上的,動態(tài)數(shù)據(jù)倉庫不僅支持傳統(tǒng)的OLAP分析和數(shù)據(jù)挖掘等決策支持應用,,還可以滿足實時的戰(zhàn)術決策,,因此動態(tài)數(shù)據(jù)倉庫中的部分數(shù)據(jù)需要實時更新。將實時變更數(shù)據(jù)捕獲并加載到動態(tài)數(shù)據(jù)倉庫中可以有多種方式,,設計實時數(shù)據(jù)加載方案時既要考慮可以實時地將變更數(shù)據(jù)加載到數(shù)據(jù)倉庫同時不影響原業(yè)務系統(tǒng)的事務處理,,也要考慮加載數(shù)據(jù)時不影響數(shù)據(jù)倉庫響應實時查詢的要求和原則。
本文基于某企業(yè)生產(chǎn)線質量控制決策分析系統(tǒng)提出了一種高效的加載實時數(shù)據(jù)的方法,。在該數(shù)據(jù)倉庫系統(tǒng)常規(guī)運作的情況下已驗證了此方法可以滿足實時捕獲并加載數(shù)據(jù),,同時不影響源業(yè)務系統(tǒng)的事務處理。下一步工作將在生產(chǎn)線處于高峰生產(chǎn)狀態(tài),,多個采集點大量頻繁產(chǎn)生實時數(shù)據(jù)的情況下,,進一步證實此方法在高負載情況下的可用性與高效性,并進一步優(yōu)化捕獲變更數(shù)據(jù)的算法,。
參考文獻
[1] 肖裕洪.實時數(shù)據(jù)倉庫關鍵技術的研究與實現(xiàn)[D].廣州:華南理工大學,,2011.
[2] 徐富亮,周祖德.變化數(shù)據(jù)捕獲技術研究[J].武漢理工大學學報,,2009,,31(5):740-743.
[3] 林子雨,,楊冬青,宋國杰,,等.實時主動數(shù)據(jù)倉庫中的變化數(shù)據(jù)捕捉研究綜述[J].計算機研究與發(fā)展,,2007,44(9):447-451.
[4] Shi Jingang,, Bao Yubin,, Leng Fangling, et al. Study on Logbased change data capture and harding mechanism in realtime data warehouse[C]. Proceedings of 2008 International Conference on Computer Science and Eftuare Engineering,, Wuhan,,2008:478-481.
[5] 楊樂.數(shù)據(jù)倉庫中實時抽取機制的研究與實現(xiàn)[D].北京:北京郵電大學,2007.