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