當前位置:首頁 > IT技術(shù) > 數(shù)據(jù)庫 > 正文

系統(tǒng)架構(gòu)師論文-論異構(gòu)數(shù)據(jù)庫的集成
2022-03-06 18:05:25


論異構(gòu)數(shù)據(jù)庫的集成

【摘要】

本文討論了某數(shù)據(jù)集市項目的數(shù)據(jù)集成方法與過程。該系統(tǒng)在2008年12月啟動,在2009年5月正式上線使用。該系統(tǒng)是以oracle系統(tǒng)為主要的數(shù)據(jù)庫,同時集成DB2系統(tǒng)中的數(shù)據(jù)。每天的話費清單系在DB2數(shù)據(jù)庫中存儲,通過E71調(diào)度程IWEDB2中的數(shù)據(jù)進行匯總并把結(jié)果寫入到ORACLE數(shù)據(jù)倉庫中。本文首先討論了建立數(shù)據(jù)集市項目異構(gòu)數(shù)據(jù)庫的兩個數(shù)據(jù)庫系統(tǒng)的背景以及用戶対該項目的需求。接著討論了使用Perl技術(shù)來集成兩個數(shù)據(jù)庫中的業(yè)務邏輯的過程,并說明了該技術(shù)在集成過程中出現(xiàn)的問題,如:數(shù)據(jù)分層,E71調(diào)度程序改造,以及參數(shù)化SQL處理等問題。最后討論了該集成方法的優(yōu)點和缺點,并対改進該項目提出了優(yōu)化Perl技術(shù)的設想。在本次的項目開發(fā)過程中,我主要擔任了系統(tǒng)分析與設計的工作。

【正文】

某數(shù)據(jù)集市項目是在2008年12月啟動的,我所在的部門主旨了該項目的開發(fā)過程,我有幸在該項目中擔任了系統(tǒng)分析與設計的工作。該項目的實施是基于以下的背景的。在2005年12月,我們部門已經(jīng)組織了開發(fā)經(jīng)營分析系統(tǒng),該系統(tǒng)已經(jīng)建立了數(shù)據(jù)倉庫系統(tǒng),把BOSS財務數(shù)據(jù),DSMP, MIS等項目的業(yè)務操作數(shù)據(jù)作為數(shù)據(jù)源,通過清洗,轉(zhuǎn)換,裝載等方式把所有的清單一級的數(shù)據(jù)全部集中到該系統(tǒng)中了,該經(jīng)營分析系統(tǒng)是基于DB2的數(shù)據(jù)庫開發(fā)而成的,把數(shù)據(jù)倉庫分為了 STAGE層,ODS層,EDS層,RHF層。STAGE層是數(shù)據(jù)清單的原始數(shù)據(jù),ODS層是經(jīng)過日匯總的數(shù)據(jù),EDS層是經(jīng)過維度統(tǒng)一化后的數(shù)據(jù),RHF層是維度數(shù)據(jù)層。每一層數(shù)據(jù)之間的業(yè)務邏輯是通過E71調(diào)度程序?qū)崿F(xiàn),該程序主要調(diào)用的是數(shù)據(jù)庫中的存儲過程或者Shell腳本完成每層中的數(shù)據(jù)匯總的過程。対于數(shù)據(jù)集市項目,我們比較有優(yōu)勢的就是該項目是基于上面的系統(tǒng)進行擴展而成,使用經(jīng)營分析系統(tǒng)的經(jīng)驗和技術(shù),我們可以快速開發(fā)完成。但是該項目由于企業(yè)的需求以及供應廠商等問題,最后企業(yè)選用了 0RACLE數(shù)據(jù)庫作為該項目的建立主要數(shù)據(jù)庫,在該項目中必須把所有的EDS層的匯總數(shù)據(jù)記錄在以0RACI£的主的數(shù)據(jù)庫中以供企業(yè)的每個地市使用。在上面的背景與需求下,対于采用兩種數(shù)據(jù)庫系統(tǒng)集成的問題是我們完成該項目的主耍障礙。為了完成該項目的開發(fā),我們対原有的系統(tǒng)和新開發(fā)系統(tǒng)的做了一些技術(shù)和方法的調(diào)整。這些方面主要有如下方面:

一、重新規(guī)劃數(shù)據(jù)層次。通過我們対用戶需求的分析,対數(shù)據(jù)分布的理解,覺得了在集成異構(gòu)數(shù)據(jù)庫層的時候,我們采用盡量保護數(shù)據(jù)的原則。我們按照之前的數(shù)據(jù)分層方法,在ORACLE的數(shù)據(jù)倉庫中,重新増加了兩個層次的數(shù)據(jù),分別是DM層和RHF層,其中DM層的數(shù)據(jù)是EDS層數(shù)據(jù)的較大的粒度匯總過程,主要的來源數(shù)據(jù)是DB2的EDS層。通過調(diào)度業(yè)務邏輯程序,實現(xiàn)如下的數(shù)據(jù)匯總過程,STAGE層記錄數(shù)據(jù)庫清單的原始數(shù)據(jù),沒有經(jīng)過任何的轉(zhuǎn)換和變化,而ODS層主要是針対時間和地市維度進行的第一級匯總的數(shù)據(jù),該數(shù)據(jù)基本上是以天為單位的歷史數(shù)據(jù)-EDS層是対其他維護進行統(tǒng)一化后的匯總數(shù)據(jù),

該數(shù)據(jù)主要是対ODS數(shù)據(jù)進行轉(zhuǎn)換和匯總的過程結(jié)果。DM層則是在EDS層的數(shù)據(jù)上,通過企業(yè)需要的業(yè)務邏輯,如每月統(tǒng)計數(shù)據(jù),平均值,指標考核值,預測值等業(yè)務邏輯,把EDS層的數(shù)據(jù)匯總到DM層的數(shù)據(jù)中,并且通過特定的數(shù)據(jù)庫權(quán)限和視圖的方法,把各個地市需要查詢的數(shù)據(jù)匯總到該層的數(shù)據(jù)庫表中。通過這樣的數(shù)據(jù)劃分后,我們就等到的很好的數(shù)據(jù)分層結(jié)構(gòu),為下面進行異構(gòu)數(shù)據(jù)庫業(yè)務邏輯集成莫定了重耍的基礎(chǔ)。

二、E71調(diào)度程序的異構(gòu)數(shù)據(jù)庫處理。在規(guī)劃了數(shù)據(jù)分層后,我們遇到的另外一個難題是E7L調(diào)度程序如何在這兩個數(shù)據(jù)庫中調(diào)度處理的過程,按照我們原先的設想是通過Shell程序來調(diào)度兩個數(shù)據(jù)庫中不同的存儲過程,完成匯總數(shù)據(jù)的過程。但是這樣的方法顯然會出現(xiàn)異構(gòu)數(shù)據(jù)庫中很多的調(diào)度問題,而且會出現(xiàn)在調(diào)度程序中出現(xiàn)Shell再調(diào)用Shell等問題,使得業(yè)務邏輯混亂而無法以后的維護結(jié)果。為了緩解這樣的問題,我們大膽的采用了 Perl技術(shù)作為業(yè)務邏輯層的腳本處理平臺。通過該平臺,我們只要處理不同數(shù)據(jù)庫的SQL就可以了,対于連接數(shù)據(jù)庫以及調(diào)度的腳本的開發(fā),調(diào)試,測試等提供了重要的保障,另外Perl程序另外一個特點就是可以面向?qū)澫螅@樣只要我們開發(fā)一些公共的模塊,通過対象的形式,就很容易把業(yè)務邏輯的SQL嵌入到Perl程序中,從而解決異構(gòu)數(shù)據(jù)庫集成的問題。

三、異構(gòu)SQL的函數(shù)處理。在搞好可以統(tǒng)一調(diào)度的問題后,數(shù)據(jù)倉庫基本上能夠通過調(diào)度程序跑出対應的數(shù)據(jù)了,但是我們開發(fā)人員在開發(fā)的過程中非常的頭疼,因為他們比較熟悉的DB2函數(shù),在ORACLE中要尋找其他的替換方法,并且某些業(yè)務邏輯還要書寫兩套的SQL語句來處理業(yè)務邏輯。這樣的妨礙了我們快速開發(fā)的目的。為了解決該問題,我們設計了一套通過的Perl函數(shù)庫,該函數(shù)庫式以SQLF2標注為基礎(chǔ),通過DB2中我們經(jīng)常使用的函數(shù)集合的匯總過程,我們通過參數(shù)的輸入設計方法,把按照我們標準編寫的SQL語句轉(zhuǎn)換成數(shù)據(jù)庫中真正執(zhí)行的SQL語句,通過正則表達式以及SQL字符串特定分解的過程,轉(zhuǎn)換成特定數(shù)據(jù)庫的SQL,并通過Perl函數(shù)執(zhí)行該業(yè)務邏輯。這樣,我們完成了異構(gòu)數(shù)據(jù)庫集成的中的SQL異構(gòu)的處理。

通過以上的三個種處理過程,我們最終解決了數(shù)據(jù)集市項目中的異構(gòu)數(shù)據(jù)庫問題,并且在2009年5月份完成了該項目的驗收,把真正的數(shù)據(jù)通過經(jīng)營分析系統(tǒng)的ETL調(diào)度程序下發(fā)到各個地市中,獲得了用戶的一致好評。同時由于該系統(tǒng)集成的時候充分考慮了開發(fā)人員的使用SQL習憒,所以開發(fā)的效率比較高,比使用存儲過程的開發(fā)過程減少了三分之一的開發(fā)時間。但是該系統(tǒng)還是存在很多的問題,首先是異構(gòu)SQL的函數(shù)還不是很多,并且対于一些特殊的函數(shù),由于需要考慮到兩個數(shù)據(jù)庫轉(zhuǎn)換等問題,曾經(jīng)出現(xiàn)過效率的瓶頸問題,后來經(jīng)過多方的考慮,把某些功能定義為只能有一個數(shù)據(jù)庫使用的方法來解決。

另外,在Perl執(zhí)行的業(yè)務邏輯中,我們還是比較陌生,雖然開發(fā)處理了很多的通用模塊,但是沒有定義比較好的接口,如果以后需要改進的時候,可能會出現(xiàn)大面積的修改工作量。我們建議在Perl開發(fā)平臺上,應該多做一些規(guī)劃,如果能夠把Perl模塊做成數(shù)據(jù)庫連接構(gòu)件,SQL執(zhí)行構(gòu)件,函數(shù)轉(zhuǎn)換構(gòu)件等等構(gòu)件化的形成后,并且定義艮好的接口形式,這樣會使數(shù)據(jù)集市項目在集成異構(gòu)數(shù)據(jù)庫上更加的好,同時可以集中解決一些性能的問題,以優(yōu)化系統(tǒng)的運行效率。



本文摘自 :https://blog.51cto.com/u

開通會員,享受整站包年服務立即開通 >