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