論異構(gòu)數(shù)據(jù)庫(kù)的集成
【摘要】
本文討論了某數(shù)據(jù)集市項(xiàng)目的數(shù)據(jù)集成方法與過(guò)程。該系統(tǒng)在2008年12月啟動(dòng),在2009年5月正式上線使用。該系統(tǒng)是以oracle系統(tǒng)為主要的數(shù)據(jù)庫(kù),同時(shí)集成DB2系統(tǒng)中的數(shù)據(jù)。每天的話費(fèi)清單系在DB2數(shù)據(jù)庫(kù)中存儲(chǔ),通過(guò)E71調(diào)度程IWEDB2中的數(shù)據(jù)進(jìn)行匯總并把結(jié)果寫入到ORACLE數(shù)據(jù)倉(cāng)庫(kù)中。本文首先討論了建立數(shù)據(jù)集市項(xiàng)目異構(gòu)數(shù)據(jù)庫(kù)的兩個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的背景以及用戶対該項(xiàng)目的需求。接著討論了使用Perl技術(shù)來(lái)集成兩個(gè)數(shù)據(jù)庫(kù)中的業(yè)務(wù)邏輯的過(guò)程,并說(shuō)明了該技術(shù)在集成過(guò)程中出現(xiàn)的問(wèn)題,如:數(shù)據(jù)分層,E71調(diào)度程序改造,以及參數(shù)化SQL處理等問(wèn)題。最后討論了該集成方法的優(yōu)點(diǎn)和缺點(diǎn),并対改進(jìn)該項(xiàng)目提出了優(yōu)化Perl技術(shù)的設(shè)想。在本次的項(xiàng)目開發(fā)過(guò)程中,我主要擔(dān)任了系統(tǒng)分析與設(shè)計(jì)的工作。
【正文】
某數(shù)據(jù)集市項(xiàng)目是在2008年12月啟動(dòng)的,我所在的部門主旨了該項(xiàng)目的開發(fā)過(guò)程,我有幸在該項(xiàng)目中擔(dān)任了系統(tǒng)分析與設(shè)計(jì)的工作。該項(xiàng)目的實(shí)施是基于以下的背景的。在2005年12月,我們部門已經(jīng)組織了開發(fā)經(jīng)營(yíng)分析系統(tǒng),該系統(tǒng)已經(jīng)建立了數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng),把BOSS財(cái)務(wù)數(shù)據(jù),DSMP, MIS等項(xiàng)目的業(yè)務(wù)操作數(shù)據(jù)作為數(shù)據(jù)源,通過(guò)清洗,轉(zhuǎn)換,裝載等方式把所有的清單一級(jí)的數(shù)據(jù)全部集中到該系統(tǒng)中了,該經(jīng)營(yíng)分析系統(tǒng)是基于DB2的數(shù)據(jù)庫(kù)開發(fā)而成的,把數(shù)據(jù)倉(cāng)庫(kù)分為了 STAGE層,ODS層,EDS層,RHF層。STAGE層是數(shù)據(jù)清單的原始數(shù)據(jù),ODS層是經(jīng)過(guò)日匯總的數(shù)據(jù),EDS層是經(jīng)過(guò)維度統(tǒng)一化后的數(shù)據(jù),RHF層是維度數(shù)據(jù)層。每一層數(shù)據(jù)之間的業(yè)務(wù)邏輯是通過(guò)E71調(diào)度程序?qū)崿F(xiàn),該程序主要調(diào)用的是數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程或者Shell腳本完成每層中的數(shù)據(jù)匯總的過(guò)程。対于數(shù)據(jù)集市項(xiàng)目,我們比較有優(yōu)勢(shì)的就是該項(xiàng)目是基于上面的系統(tǒng)進(jìn)行擴(kuò)展而成,使用經(jīng)營(yíng)分析系統(tǒng)的經(jīng)驗(yàn)和技術(shù),我們可以快速開發(fā)完成。但是該項(xiàng)目由于企業(yè)的需求以及供應(yīng)廠商等問(wèn)題,最后企業(yè)選用了 0RACLE數(shù)據(jù)庫(kù)作為該項(xiàng)目的建立主要數(shù)據(jù)庫(kù),在該項(xiàng)目中必須把所有的EDS層的匯總數(shù)據(jù)記錄在以0RACI£的主的數(shù)據(jù)庫(kù)中以供企業(yè)的每個(gè)地市使用。在上面的背景與需求下,対于采用兩種數(shù)據(jù)庫(kù)系統(tǒng)集成的問(wèn)題是我們完成該項(xiàng)目的主耍障礙。為了完成該項(xiàng)目的開發(fā),我們対原有的系統(tǒng)和新開發(fā)系統(tǒng)的做了一些技術(shù)和方法的調(diào)整。這些方面主要有如下方面:
一、重新規(guī)劃數(shù)據(jù)層次。通過(guò)我們対用戶需求的分析,対數(shù)據(jù)分布的理解,覺(jué)得了在集成異構(gòu)數(shù)據(jù)庫(kù)層的時(shí)候,我們采用盡量保護(hù)數(shù)據(jù)的原則。我們按照之前的數(shù)據(jù)分層方法,在ORACLE的數(shù)據(jù)倉(cāng)庫(kù)中,重新増加了兩個(gè)層次的數(shù)據(jù),分別是DM層和RHF層,其中DM層的數(shù)據(jù)是EDS層數(shù)據(jù)的較大的粒度匯總過(guò)程,主要的來(lái)源數(shù)據(jù)是DB2的EDS層。通過(guò)調(diào)度業(yè)務(wù)邏輯程序,實(shí)現(xiàn)如下的數(shù)據(jù)匯總過(guò)程,STAGE層記錄數(shù)據(jù)庫(kù)清單的原始數(shù)據(jù),沒(méi)有經(jīng)過(guò)任何的轉(zhuǎn)換和變化,而ODS層主要是針対時(shí)間和地市維度進(jìn)行的第一級(jí)匯總的數(shù)據(jù),該數(shù)據(jù)基本上是以天為單位的歷史數(shù)據(jù)-EDS層是対其他維護(hù)進(jìn)行統(tǒng)一化后的匯總數(shù)據(jù),
該數(shù)據(jù)主要是対ODS數(shù)據(jù)進(jìn)行轉(zhuǎn)換和匯總的過(guò)程結(jié)果。DM層則是在EDS層的數(shù)據(jù)上,通過(guò)企業(yè)需要的業(yè)務(wù)邏輯,如每月統(tǒng)計(jì)數(shù)據(jù),平均值,指標(biāo)考核值,預(yù)測(cè)值等業(yè)務(wù)邏輯,把EDS層的數(shù)據(jù)匯總到DM層的數(shù)據(jù)中,并且通過(guò)特定的數(shù)據(jù)庫(kù)權(quán)限和視圖的方法,把各個(gè)地市需要查詢的數(shù)據(jù)匯總到該層的數(shù)據(jù)庫(kù)表中。通過(guò)這樣的數(shù)據(jù)劃分后,我們就等到的很好的數(shù)據(jù)分層結(jié)構(gòu),為下面進(jìn)行異構(gòu)數(shù)據(jù)庫(kù)業(yè)務(wù)邏輯集成莫定了重耍的基礎(chǔ)。
二、E71調(diào)度程序的異構(gòu)數(shù)據(jù)庫(kù)處理。在規(guī)劃了數(shù)據(jù)分層后,我們遇到的另外一個(gè)難題是E7L調(diào)度程序如何在這兩個(gè)數(shù)據(jù)庫(kù)中調(diào)度處理的過(guò)程,按照我們?cè)鹊脑O(shè)想是通過(guò)Shell程序來(lái)調(diào)度兩個(gè)數(shù)據(jù)庫(kù)中不同的存儲(chǔ)過(guò)程,完成匯總數(shù)據(jù)的過(guò)程。但是這樣的方法顯然會(huì)出現(xiàn)異構(gòu)數(shù)據(jù)庫(kù)中很多的調(diào)度問(wèn)題,而且會(huì)出現(xiàn)在調(diào)度程序中出現(xiàn)Shell再調(diào)用Shell等問(wèn)題,使得業(yè)務(wù)邏輯混亂而無(wú)法以后的維護(hù)結(jié)果。為了緩解這樣的問(wèn)題,我們大膽的采用了 Perl技術(shù)作為業(yè)務(wù)邏輯層的腳本處理平臺(tái)。通過(guò)該平臺(tái),我們只要處理不同數(shù)據(jù)庫(kù)的SQL就可以了,対于連接數(shù)據(jù)庫(kù)以及調(diào)度的腳本的開發(fā),調(diào)試,測(cè)試等提供了重要的保障,另外Perl程序另外一個(gè)特點(diǎn)就是可以面向?qū)澫螅@樣只要我們開發(fā)一些公共的模塊,通過(guò)対象的形式,就很容易把業(yè)務(wù)邏輯的SQL嵌入到Perl程序中,從而解決異構(gòu)數(shù)據(jù)庫(kù)集成的問(wèn)題。
三、異構(gòu)SQL的函數(shù)處理。在搞好可以統(tǒng)一調(diào)度的問(wèn)題后,數(shù)據(jù)倉(cāng)庫(kù)基本上能夠通過(guò)調(diào)度程序跑出対應(yīng)的數(shù)據(jù)了,但是我們開發(fā)人員在開發(fā)的過(guò)程中非常的頭疼,因?yàn)樗麄儽容^熟悉的DB2函數(shù),在ORACLE中要尋找其他的替換方法,并且某些業(yè)務(wù)邏輯還要書寫兩套的SQL語(yǔ)句來(lái)處理業(yè)務(wù)邏輯。這樣的妨礙了我們快速開發(fā)的目的。為了解決該問(wèn)題,我們?cè)O(shè)計(jì)了一套通過(guò)的Perl函數(shù)庫(kù),該函數(shù)庫(kù)式以SQLF2標(biāo)注為基礎(chǔ),通過(guò)DB2中我們經(jīng)常使用的函數(shù)集合的匯總過(guò)程,我們通過(guò)參數(shù)的輸入設(shè)計(jì)方法,把按照我們標(biāo)準(zhǔn)編寫的SQL語(yǔ)句轉(zhuǎn)換成數(shù)據(jù)庫(kù)中真正執(zhí)行的SQL語(yǔ)句,通過(guò)正則表達(dá)式以及SQL字符串特定分解的過(guò)程,轉(zhuǎn)換成特定數(shù)據(jù)庫(kù)的SQL,并通過(guò)Perl函數(shù)執(zhí)行該業(yè)務(wù)邏輯。這樣,我們完成了異構(gòu)數(shù)據(jù)庫(kù)集成的中的SQL異構(gòu)的處理。
通過(guò)以上的三個(gè)種處理過(guò)程,我們最終解決了數(shù)據(jù)集市項(xiàng)目中的異構(gòu)數(shù)據(jù)庫(kù)問(wèn)題,并且在2009年5月份完成了該項(xiàng)目的驗(yàn)收,把真正的數(shù)據(jù)通過(guò)經(jīng)營(yíng)分析系統(tǒng)的ETL調(diào)度程序下發(fā)到各個(gè)地市中,獲得了用戶的一致好評(píng)。同時(shí)由于該系統(tǒng)集成的時(shí)候充分考慮了開發(fā)人員的使用SQL習(xí)憒,所以開發(fā)的效率比較高,比使用存儲(chǔ)過(guò)程的開發(fā)過(guò)程減少了三分之一的開發(fā)時(shí)間。但是該系統(tǒng)還是存在很多的問(wèn)題,首先是異構(gòu)SQL的函數(shù)還不是很多,并且対于一些特殊的函數(shù),由于需要考慮到兩個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)換等問(wèn)題,曾經(jīng)出現(xiàn)過(guò)效率的瓶頸問(wèn)題,后來(lái)經(jīng)過(guò)多方的考慮,把某些功能定義為只能有一個(gè)數(shù)據(jù)庫(kù)使用的方法來(lái)解決。
另外,在Perl執(zhí)行的業(yè)務(wù)邏輯中,我們還是比較陌生,雖然開發(fā)處理了很多的通用模塊,但是沒(méi)有定義比較好的接口,如果以后需要改進(jìn)的時(shí)候,可能會(huì)出現(xiàn)大面積的修改工作量。我們建議在Perl開發(fā)平臺(tái)上,應(yīng)該多做一些規(guī)劃,如果能夠把Perl模塊做成數(shù)據(jù)庫(kù)連接構(gòu)件,SQL執(zhí)行構(gòu)件,函數(shù)轉(zhuǎn)換構(gòu)件等等構(gòu)件化的形成后,并且定義艮好的接口形式,這樣會(huì)使數(shù)據(jù)集市項(xiàng)目在集成異構(gòu)數(shù)據(jù)庫(kù)上更加的好,同時(shí)可以集中解決一些性能的問(wèn)題,以優(yōu)化系統(tǒng)的運(yùn)行效率。
本文摘自 :https://blog.51cto.com/u