一種實時多維數據的分析及同步系統


多維分析技術是一種被廣泛應用的數據分析技術,本人在實際項目中使用開源OLAP框架Mondrian及關系型數據庫MySQL,嘗試設計並實現了一套多維數據的分析及同步系統,以解決現有技術對於互聯網上實時流動變化數據無法進行快速有效的多維度分析的問題。這里是對該方案的詳細描述。

1. 系統內部模塊

下圖所示為該系統的內部模塊結構,分為:實時數據收集模塊,實時計算模塊,實時同步模塊,關系型數據庫,數據加載模塊,多維數據展現組件,多維數據分析引擎(Mondrian),緩存更新模塊。

1)實時數據收集模塊:該模塊是系統的數據源,通過實時地、不間斷地采集指定網站的用戶訪問日志數據,為系統提供具有固定格式的日志數據,這些數據的特點是具有各個維度的用戶訪問信息,如訪問時間、訪客唯一標識、訪問來源URL、訪問URL、訪客IP地址等。

2)實時計算模塊:根據實時數據收集模塊收集到的日志數據,提取其中有用的字段,如訪問時間、訪客唯一標識、訪問來源URL、訪問URL、訪客IP地址等用於多維分析的字段,通過在內存中進行實時計算,完成從原始日志數據到維度數據的轉換,得到對應維度下的各項計算指標,如訪問PV量、訪問點擊量等。

3)實時同步模塊:周期性地將實時計算模塊實時計算的結果和關系型數據庫(MySQL)中的歷史數據進行同步與合並處理,具體分為兩步操作:

    a)對於事實表,則直接將實時計算模塊中的計算結果插入到事實表中;

    b)對於聚合表,則判斷關系型數據庫中是否存在對應維度下的計算指標結果:

  • 若不存在,則直接將計算結果作為一條新的記錄插入關系型數據庫的聚合表中;
  • 否則存在,則首先查詢關系型數據庫得到對應維度下的歷史結果,然后和實時計算模塊新累加的計算結果進行合並后得到最新的計算結果,並更新寫入關系型數據庫的聚合表中。

4)關系型數據庫:按照多維數據的格式,存儲實時計算模塊輸出的數據;根據存儲數據類型的不同,分為事實表、維度表和聚合表。

結合實時同步模塊和關系型數據庫,下面是本系統中實現的多維數據同步算法的具體邏輯:

Step1遍歷實時計算模塊中的每條計算結果記錄,對於其中的每條記錄:

    Step1.1獲取各個維度信息及各項指標計算結果;

    Step1.2將指標計算結果按照各個維度信息寫入關系型數據庫中的事實表中;

    Step1.3對於關系型數據庫中的每張聚合表:

        Step1.3.1從記錄中提取該聚合表中維度的值,查詢該聚合表中是否存在對應維度下的歷史計算結果:

        Step1.3.2若存在,則進行更新操作:根據維度信息,將關系型數據庫中的歷史結果和實時計算模塊中累加的計算結果進行合並后寫入關系型數據庫中;

        Step1.3.3若不存在,則進行插入操作:直接根據維度信息,將實時計算模塊中累加的計算結果寫入到關系型數據庫中;

Step2清空實時計算模塊中累加的計算結果。周期性地重復步驟Step1~Step2。

5)數據加載模塊:由於關系型數據庫中為了加速對聚合表中數據的查詢與更新速度,聚合表往往采用內存表的方式存儲,這樣當系統重新啟動時,聚合表中數據會丟失。因此需要在系統啟動后初始化階段,通過讀取事實表中的歷史結果數據,按照聚合表的維度情況,通過預先進行聚合計算將結果加載到聚合表中,供多維數據分析引擎模塊查詢使用。

6)多維數據分析展現組件:通過MDX語句,與多維數據分析引擎模塊交互,得到相應維度下的各項計算指標結果值。

7)多維數據分析引擎模塊:接收用戶通過多維數據分析展現組件發起的MDX查詢請求,首先在多維數據分析引擎的緩存中查找:若存在,則直接將結果返回給多維數據分析展現組件;否則,將MDX語句映射轉換為SQL語句,通過查詢關系型數據庫,得到數據庫表的查詢結果集。

8)緩存更新模塊:接收多維數據分析展現組件發起的請求,調用多維數據分析引擎模塊相關API接口清除系統緩存,然后通過重新執行用戶查詢得到最新的結果,返回給多維數據分析展現組件。

2. 系統拓撲結構

根據以上系統模塊結構的介紹,下圖所示為本發明中一種實時多維數據的分析及同步系統的拓撲結構示意圖:

1)數據收集服務器:實時采集網站的用戶訪問日志數據,並發送給實時計算服務器。每次接收並轉發一行日志數據,代表一個顧客的一次訪問記錄。

2)實時計算服務器:從數據收集服務器接收用於訪問日志數據;提取其中的有用字段,轉換為對應的維度信息;同時完成各項指標的計算;累積一定的時間周期后,將計算結果同步更新到數據庫服務器。

3)數據庫服務器:存儲多維數據的各項指標計算結果,作為數據源為數據加載服務器提供查詢服務。

4)數據加載服務器:用於系統啟動后讀取數據庫服務器中事實表和維度表中的數據,初始化聚合表中的數據記錄,提供給多維數據分析引擎模塊查詢使用。

5)Web服務器:通過MDX語句,請求OLAP引擎服務器,得到請求維度下的各項計算指標結果值。

6)OLAP引擎服務器:將MDX語句解析為SQL語句,通過執行SQL語句,查詢數據庫服務器,得到數據庫聚合表/事實表的查詢結果集,並返回給Web服務器。

7)緩存更新服務器:接收Web服務器發起的請求,調用OLAP引擎服務器相關API接口清除系統緩存,然后通過執行SQL查詢得到最新的結果,返回給Web服務器。

3. 總結

1)通過項目的實踐過程證明了該方案的可行性,基於的軟件平台是Mondrian和MySQL。

2)該方案的實施過程中,可以借助Mondrian的緩存機制、聚合表機制;MySQL的內存表、索引機制進行調優,從而達到提高系統運行性能的目的。

3)同時在系統實現過程中發現,對於實時變化數據進行多維分析,關鍵在於如何做到數據盡可能短時間內保持同步更新(本方案中即指事實表和聚合表中數據的同步),這是系統性能和復雜性折中的結果。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM