


摘 要 本文以核電企業的數據倉庫需求為切入點,為了滿足決策支持類應用對數據及時性的要求,提出了一種具有數據緩存機制的實時數據倉庫ETL架構,該架構能夠均衡系統開銷,在突發大數據量的情況下保持決策支持類應用的高服務質量(QoS)。該ETL架構已基于Informatica產品開發實現,其合理性與有效性得到了驗證。
【關鍵詞】實時數據倉庫 ETL 數據緩存
1 引言
隨著我國核電信息化水平的提高,核電企業已經進入到流程特征量化、績效驅動、以信息技術為依托的發展階段。數據倉庫是管理信息并分析利用的最有效的方式,可為核電企業進行各級流程的績效評估,改善決策過程,并便于同行對標。
通常,ETL過程是以“脫機”方式執行的。數據以批傳輸的方式從源中抽取,進行轉換,清洗,再加載到數據倉庫。這一組活動會在一個專用的時間窗口中執行,通常是在夜間,以防給源系統帶來過大的工作負荷。然而,核電企業的部分應用對數據倉庫中數據的及時性有很強的要求,例如缺陷預警、輻射防護、運行數據分析等領域的OLAP、數據挖掘、可視化報表等應用,它們可能只能接受分鐘級甚至秒級的數據延遲。單純靠提高ETL更新頻率來滿足這類需求是不可行的,因為頻繁批傳輸會給源系統或數據倉庫帶來過大的系統開銷,而且隨著數據量的增大,批傳輸將會無法在更新間隔內做完。
在此情況下,有必要引入實時ETL。可將源數據分類為兩組。第一組使用快速,高選擇性,非阻塞的ETL,使該部分數據近乎實時的更新,以便快速、實時的支持決策過程。其余的源數據可以在夜間進行統一的批傳輸更新。
另外,核電行業對信息系統的服務質量(包括可用性、數據及時度、吞吐量、查詢響應時間等)有著更高的要求,在設計實時ETL系統的過程中,必須考慮大數據量和大系統開銷的情形,保持源系統和決策支持類系統的高服務質量。
2 實時數據倉庫的ETL架構
本文提出的實時數據倉庫ETL架構由以下元素組成:
(1)數據源,產生數據的系統,這些數據會填充到數據倉庫;
(2)位于中間的數據處理區域(Data Processing Area, DPA),對產生的數據進行清洗和轉換;
(3)數據倉庫(DW)。該架構如圖1所示。
每個源可以認為是由一個數據存儲體(常規數據庫、文件等)和一個業務數據管理系統(DBMS、某應用程序)組成。發生在源端的變化首先會被識別是否與ETL過程相關,隨后會向數據倉庫傳輸。每個源都設有一個源數據流監控器(SFlowR)模塊,負責識別相關的變化,并定期或以適當的間隔將變化向數據倉庫傳輸。
數據處理數據流監控器(DPFlowR)模塊負責決定由哪個源發送數據,一旦源發送數據,數據處理區域中的工作流會接收它,這些工作流清洗數據并按數據倉庫的格式轉換數據。數據處理區域還可以有多種職能:
(1)兼顧SFlowR職能,減輕源的負荷;
(2)也可承擔數據倉庫數據流監控器(WFlowR)的職能(在數據倉庫無法處理源產生的數據流量的情形);
(3)可以執行諸如檢查點、準備匯總和QoS管理等任務。傳入數據也可以暫存到適當的暫存模塊,以使DPA能滿足所有工作流的吞吐量。
一旦所有轉換流程結束,數據可向數據倉庫中裝載。WFlowR根據終端用戶提交查詢的工作負荷,以及對數據及時度、吞吐量、查詢響應時間等QoS的要求,將DPA的數據編排并傳送到數據倉庫。
數據倉庫(DW)由不同類型的元素構成:
(1)事實表(Fact),包含用戶主要關注的現實中事件或事實的記錄,
(2)維度表(DIM),包含解釋事實不同方面信息的參考記錄,
(3)各種類型的索引(INDX),用來加快查詢處理的速度,
(4)物化視圖,包含最終提交給用戶的匯總信息。物化視圖允許抽取各類計算過一次的匯總信息,加以存儲,以便進行檢索、查詢和定期更新,并反映一個或多個事實表的當前狀態。
在理想狀況下,源,數據處理區和數據倉庫都能夠在給定的時間窗內處理所有的數據。由于許多可能的原因,如用戶查詢頻率高,更新頻率高,轉換和清洗階段某些部分的開銷大,甚至是運行過程中架構內某部分出現故障,使其在實際情況中不成立。于是,在實時ETL的情況下,為確保服務質量,上述組件需要帶有輔助結構,來緩解數據頻繁刷新的工作負荷。為此,實時ETL架構中增加了數據暫存節點。這些節點保留部分的傳輸數據,以備后處理。故數據流監控器中需要有一個簡單的選擇機制來決定哪些數據要實時的被ETL工作流處理,哪些會進入數據暫存,使其在數據倉庫的空閑期處理。
出于這些考慮,設計了一個工作在脫機模式下的補償模式。規劃了數據暫存中的數據被處理并載入數據倉庫的過程。如圖2所示。
3 實時ETL的技術選擇
實時數據倉庫架構中的各部件,如抽取器、SFlowR、DPFlowR、DPA、WFlowR、數據暫存,可以有不同的技術實現和部件間集成方式,可選擇的方法有:
(1)企業應用集成(EAI)方法,抽取器和SFlowR會提供一個適配器,數據倉庫WFlowR端也有相應的適配器,由中間件中的代理來完成數據的交互。業務數據以消息的形式由適配器創建和執行,代理根據發布/訂閱規則路由消息。EAI是一個“推”系統,不適用于批傳輸。對實時性要求非常高的系統,可以考慮使用EAI。不過在數據量大時EAI效率比較差,而且實現起來相對復雜。
(2)微批處理(MB-ETL)方法,微批處理的方式和傳統的ETL處理方式很相似,但是處理的時間間隔要短,例如間隔一個小時處理一次,只針對實時性要求較高的一部分源數據。微批處理方法一般配合實時分區使用。該方法適用于中等數據量的數據倉庫系統,和小時級別的延時容忍。
(3)CTF(Capture, Transform and Flow)方法,CTF采用直接的數據庫對數據庫的連接方式,可提供秒級的數據。CTF只能進行輕量級的數據整合。通常的處理方式是建立數據準備區(或實時分區),采用CTF工具在源數據庫和數據準備區的數據庫之間相連接。捕獲到變化后,使變化數據進入數據準備區,再經過其他處理后遷移入數據倉庫。
基于幾種技術及其組合,可實現ETL方案有,如表1所示。
結合核電企業決策支持類應用的數據復雜度,以及對數據實時性的要求,考慮現有軟件環境和對源系統性能影響,選擇“CTF + 實時分區”作為數據倉庫的實時ETL方案。即SFlowR使用CTF方法來獲得變更信息,并設置數據暫存;DPFlowR下屬的數據暫存承擔實時分區的作用;DPFlowR負責輪詢SFlowR,發現變更則加載入實時分區,再視工作負荷將數據推入DPA;同時,DPFlowR還要保存檢查點,以保證ETL過程的健壯性。
4 變化數據捕獲方法
要進行CTF,首先要實現變化數據捕獲(Change Data Capture,CDC),即在上次數據抽取完成后,將源系統中新插入或者發生更新的數據捕獲并抽取到數據倉庫中來。傳統的CDC方法有時間戳法、專用增量文件法、數據庫快照比對法等。傳統方法的變更獲取周期比較長,難以滿足對數據刷新頻率的要求。本文使用數據庫日志分析法。
基于數據庫日志的CDC策略利用數據庫不斷向數據庫日志提交內容修改信息以支持事物回滾的機制,不斷對數據庫日志分析從而獲取變化數據的信息供抽取程序使用。
數據庫歸檔日志是針對數據庫事務操作所做的記錄,它可以記錄己經提交的數據操作事務的任何信息。數據庫系統可運行在非歸檔日志模式或歸檔日志模式。非歸檔模式下,重做日志(Redo Log)以循環的方式使用,當重做日志被覆蓋后丟失以前的日志信息。歸檔日志模式下,重做日志寫滿后,系統自動備份,并在控制文件中將日志文件的日志序列號歸檔,此模式下歸檔日志可完整的記錄數據系統的事務操作信息。
數據庫一般都會提供專用的日志解析工具。Oracle提供一個名為Log Miner的API接口來實現對數據日志的解析。LogMiner進行日志分析的時候會重構等價的SQL語句和UNDO語句(這兩個語句分別被記錄在V$LOGMNR_CONTENTS視圖的SQL_REDO和SQL_UNDO中)。LogMiner重構出的是由多個元操作構成的等價SQL語句,可在V$LOGMNR_CONTENTS視圖中訪問到。在Oracle的Redo Log中記載的也并不是原始的名稱(如表及其列名),而是它們在數據庫中的編號,這就需要調用DBMS_LOGMNR_ D.BUILD()來提取數據字典信息,將編號還原為名稱。
數據庫雖然提供了相應的日志解析接口,但要實現數據的實時捕獲還需要與該接口實現交互以獲得信息。InformaticaPWX已經實現了此功能。
5 使用Informatica PWC+PWX實現實時ETL
Informatica PWX程序實現與數據庫日志解析程序的實時交互。同時通過將數據的變化信息傳遞到ETL服務器端(PWC)供數據抽取工作流使用。對于Oracle源數據庫,基于數據庫日志分析的CDC抽取策略的實現如圖3所示。
其中,Oracle日志(Redo Log)是數據庫日志分析的基礎,被監測數據庫須在存檔模式下運行。LogMiner讀取Redo Log,使PWX能夠從指定的時間點抽取數據,這些時間點由Oracle SCN(System Change Numbers)分隔。“捕獲注冊”是用戶創建的變更捕獲注冊信息,定義了用戶需要實時監測的數據。PWXCondense作業讀取“捕獲注冊”,獲取需要監測的表和列信息,然后連接OracleLog Miner,確定應該返回哪些變更記錄。PWXCondense作業會保證變化數據按照其提交的順序被依次處理,同時去除回滾的事務。PWX Condense作業將接收到的變化信息輸出到Condense文件。
ETL的映射、會話和工作流在PWC中創建,當PWC中的工作流被調用后,通過請求PWX的監聽程序來獲得變化信息。“提取映射”定義了捕獲到的變化信息如何展現給PWC。PWC得到變化信息后,ETL進程就會將變化的數據抽取過來加載到目標表中,從而實現了數據的實時抽取。如果因為某種原因停止了實時ETL,會生成一個檢查點(checkpoint)文件,該文件保存了ETL進程停止時數據庫日志解析點的SCN值,當下次程序啟動時會從檢查點文件中讀取上次結束的位置,從而保證了數據抽取的連續性。
6 總結
本文探討了一種具有數據緩存機制的實時數據倉庫ETL架構,結合項目需要和相關軟件環境,選擇了CTF配合實時分區的方法實現實時ETL,通過Informatica PWX和PWC工具加以實現,并模擬系統正常使用時的表更新頻率對ETL進行了測試。在源系統和數據倉庫負載正常,網絡通暢的情況下,數據延遲情況如表2所示。
方案實現了秒級的數據同步,能夠適應突發大數據量,滿足了核電決策支持類應用對數據實時性的要求。本方案在兼容性、完備性、性能和侵入性幾個方面的評估如表3所示。
本文所述的實時ETL方案在數據庫和ETL工具兼容CDC,要求對源系統侵入性和性能影響較小的情況下是十分合適的,應用本方案可實現一分鐘之內的數據延遲和優秀的抽取性能、完備性和健壯性。
參考文獻
[1]張春亮.基于ETL的企業數據交換平臺的設計與實現[D].哈爾濱:哈爾濱工業大學,2016.
[2]林子雨,楊冬青,宋國杰等.實時主動數據倉庫中面向需求的實時數據集成方法研究[J].計算機研究與發展,2007,44(s3):435-440.
[3]霍卓群.基于實時資源狀況和代價分析的ETL動態調整研究[J].南陽理工學院學報,2015,7(06):40-42.
[4]R.Kimball and J.Caserta.The Data Warehouse ETL Toolkit:Practical Techniques for Extracting,Cleanin,Conformingand Delivering Data[M]. Wiley Publishing,Inc,2004.
[5]徐春艷.面向實時數據倉庫的ETL研究[D].南京:南京航空航天大學,2007,碩士.
[6]龍曉泉.基于Oracle的實時數據倉庫技術研究與應用[D].長沙:湖南大學,2010,碩士.
[7]Conceptual modeling for ETL processes.Vassiliadis,P,Simitsis,A,Skiadopoulos,S.5th ACM International Workshop on Data Warehousing and OLAP.2002
作者簡介
王尉(1984-),男,內蒙古自治區赤峰市人。碩士學位。現為核工業計算機應用研究所工程師。研究方向為項目管理、軟件工程、企業架構。
作者單位
核工業計算機應用研究所 北京市 100048