唐勇
摘要:從當(dāng)前企業(yè)和單位中數(shù)據(jù)庫(kù)孤立的現(xiàn)狀入手,提出了利用中間庫(kù)來(lái)統(tǒng)籌業(yè)務(wù)基礎(chǔ)數(shù)據(jù)庫(kù)的方法,闡釋了該方法的使用方法及數(shù)據(jù)轉(zhuǎn)換的關(guān)鍵步驟,并利用JAVA語(yǔ)言實(shí)現(xiàn)了此關(guān)鍵步驟,通過(guò)驗(yàn)證,論文提出的設(shè)計(jì)方法是可行的。
關(guān)鍵詞:中間庫(kù);數(shù)據(jù)轉(zhuǎn)換;設(shè)計(jì)
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)26-0115-02
隨著大數(shù)據(jù)時(shí)代的來(lái)臨,數(shù)據(jù)與數(shù)據(jù)之間的聯(lián)系被進(jìn)一步挖掘,并在此基礎(chǔ)上進(jìn)行綜合分析,形成決策。將不同數(shù)據(jù)庫(kù)中的數(shù)據(jù)聯(lián)合起來(lái),形成相關(guān),具有多種解決方案,設(shè)計(jì)一個(gè)中間庫(kù)和一個(gè)中間件,專(zhuān)門(mén)負(fù)責(zé)數(shù)據(jù)的聯(lián)系和轉(zhuǎn)換,是當(dāng)前主流的解決方案。
1 現(xiàn)狀
伴隨信息化的高速發(fā)展,我國(guó)絕大多數(shù)中小型企業(yè)和單位在信息化建設(shè)方面已經(jīng)取得一定的成效,但在大數(shù)據(jù)背景下,以往建設(shè)的信息化系統(tǒng)出現(xiàn)了如下明顯問(wèn)題:
1)信息化孤島。有些政府和事業(yè)單位,根據(jù)自身的業(yè)務(wù)范圍,已經(jīng)建設(shè)了幾十個(gè)大小不一的信息管理系統(tǒng),這些系統(tǒng)中,每個(gè)系統(tǒng)都有一個(gè)自身獨(dú)立的數(shù)據(jù)庫(kù),系統(tǒng)與系統(tǒng)之間,數(shù)據(jù)庫(kù)與數(shù)據(jù)庫(kù)之間即使具有相同的字段,它們也沒(méi)有任何數(shù)據(jù)關(guān)聯(lián)。
2)由于數(shù)據(jù)庫(kù)沒(méi)有關(guān)聯(lián),則存在著明顯的二次錄入現(xiàn)象,比如一個(gè)人員名單的增加,需要在人事系統(tǒng)中增加,也需要在業(yè)務(wù)數(shù)據(jù)庫(kù)中增加,工作量大而繁瑣。
3)數(shù)據(jù)不一致。由于一條信息可能會(huì)在多個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)中出現(xiàn),如果這條信息沒(méi)有及時(shí)流通到相關(guān)部門(mén)中,則這個(gè)部門(mén)數(shù)據(jù)庫(kù)的數(shù)據(jù)不會(huì)更新,比如在一個(gè)高校的招生中,招生部門(mén)錄取了一名學(xué)生,但名單還未到達(dá)教務(wù)處前,教務(wù)處的系統(tǒng)沒(méi)有更新,導(dǎo)致了數(shù)據(jù)的不一致性。
4)數(shù)據(jù)沉睡。由于不同的數(shù)據(jù)庫(kù)之間沒(méi)有聯(lián)系,故不能挖掘相關(guān)數(shù)據(jù)的相關(guān)性,不同數(shù)據(jù)庫(kù)之間的數(shù)據(jù)不能聯(lián)合分析,致使數(shù)據(jù)沉睡,價(jià)值發(fā)揮不足。
基于以上的問(wèn)題,將不同數(shù)據(jù)庫(kù)之間的數(shù)據(jù)有效聯(lián)系起來(lái),成為了數(shù)據(jù)有效發(fā)揮其價(jià)值的重要環(huán)節(jié)。
2 中間件設(shè)計(jì)
1)模型設(shè)計(jì)
經(jīng)過(guò)多年的信息化建設(shè),眾多企業(yè)和單元已經(jīng)具備多套信息管理系統(tǒng),這些系統(tǒng)和系統(tǒng)之間具有如下特征:
① 系統(tǒng)之間相互孤立。在建設(shè)初期,每個(gè)系統(tǒng)都擁有獨(dú)立的數(shù)據(jù)庫(kù),各數(shù)據(jù)庫(kù)之間沒(méi)有聯(lián)系,修改其中一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù),其他數(shù)據(jù)庫(kù)的數(shù)據(jù)不受影響。
② 系統(tǒng)之間存在聯(lián)系。在操作某個(gè)業(yè)務(wù)時(shí),修改一個(gè)數(shù)據(jù)庫(kù)中的信息,其他數(shù)據(jù)庫(kù)中的信息可能要改變。如刪除一個(gè)名單時(shí),涉及多個(gè)系統(tǒng)多次刪除,形成二次錄入。
③ 新形勢(shì)下需要將多系統(tǒng)數(shù)據(jù)聯(lián)合分析。在大數(shù)據(jù)背景下,需要將所有的信息系統(tǒng)統(tǒng)一起來(lái)進(jìn)行綜合分析,以形成精準(zhǔn)決策和精準(zhǔn)管理。
其具體模型如圖1:
上述問(wèn)題至少有2種解決方案:
方案1:在設(shè)計(jì)統(tǒng)一查詢(xún)平臺(tái)時(shí),將綜合平臺(tái)的每一項(xiàng)信息與各業(yè)務(wù)平臺(tái)中的數(shù)據(jù)聯(lián)立。當(dāng)需要在統(tǒng)一查詢(xún)平臺(tái)上查詢(xún)某些信息時(shí),在其中一個(gè)或幾個(gè)數(shù)據(jù)庫(kù)聯(lián)合查詢(xún)即可,如需進(jìn)行數(shù)據(jù)轉(zhuǎn)換,則進(jìn)行適當(dāng)轉(zhuǎn)換。當(dāng)綜合平臺(tái)中某個(gè)數(shù)據(jù)修改時(shí),對(duì)應(yīng)的若干個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)統(tǒng)一完成修改。
方案2:在設(shè)計(jì)統(tǒng)一查詢(xún)平臺(tái)時(shí),設(shè)計(jì)一個(gè)中間庫(kù)。中間庫(kù)與各基礎(chǔ)庫(kù)聯(lián)立統(tǒng)一查詢(xún)平臺(tái)只在中間庫(kù)上進(jìn)行查詢(xún),在統(tǒng)一查詢(xún)平臺(tái)上進(jìn)行修改操作直接修改中間數(shù)據(jù)庫(kù)。在中間數(shù)據(jù)庫(kù)和各基礎(chǔ)業(yè)務(wù)數(shù)據(jù)庫(kù)之間,設(shè)計(jì)一個(gè)數(shù)據(jù)轉(zhuǎn)換模型,設(shè)計(jì)中間庫(kù)與基礎(chǔ)庫(kù)數(shù)據(jù)之間的轉(zhuǎn)換關(guān)系和轉(zhuǎn)換規(guī)則。具體見(jiàn)圖2:
比較分析方案1和方案2可以發(fā)現(xiàn),方案2明顯優(yōu)于方案1。方案1具有兩大明顯不足,一是綜合統(tǒng)一平臺(tái)在查詢(xún)某個(gè)數(shù)據(jù)時(shí),需要從業(yè)務(wù)數(shù)據(jù)庫(kù)中調(diào)取,這個(gè)數(shù)據(jù)有可能存在多個(gè)數(shù)據(jù)庫(kù)中,多個(gè)數(shù)據(jù)庫(kù)對(duì)這個(gè)數(shù)據(jù)的保存信息可能不一致,綜合查詢(xún)平臺(tái)基于不同的基礎(chǔ)業(yè)務(wù)數(shù)據(jù)庫(kù)時(shí),查詢(xún)結(jié)果不一樣。二是每次在修改數(shù)據(jù)時(shí),都需要向多個(gè)數(shù)據(jù)庫(kù)寫(xiě)數(shù)據(jù),所有的數(shù)據(jù)庫(kù)都必須全部打開(kāi)等待數(shù)據(jù)寫(xiě)入,非常浪費(fèi)系統(tǒng)資源。
方案2設(shè)計(jì)了一個(gè)中間庫(kù),統(tǒng)一查詢(xún)平臺(tái)的數(shù)據(jù)查詢(xún)都基于此中間庫(kù),平臺(tái)修改的數(shù)據(jù)也僅僅是修改中間庫(kù)的數(shù)據(jù),中間庫(kù)設(shè)計(jì)了一個(gè)觸發(fā)器,當(dāng)中間庫(kù)有變化時(shí),才向各業(yè)務(wù)數(shù)據(jù)庫(kù)寫(xiě)入數(shù)據(jù),當(dāng)各基礎(chǔ)業(yè)務(wù)數(shù)據(jù)庫(kù)發(fā)生變化時(shí),向中間庫(kù)寫(xiě)入數(shù)據(jù)。也可以設(shè)計(jì)一個(gè)算法,定時(shí)批量同步數(shù)據(jù)。
2)數(shù)據(jù)同步方案
① 數(shù)據(jù)轉(zhuǎn)換基本流程
數(shù)據(jù)同步時(shí),有兩種情況,第一種是統(tǒng)一查詢(xún)平臺(tái)修改數(shù)據(jù)后,中間數(shù)據(jù)庫(kù)的數(shù)據(jù)被修改,按照一定的規(guī)程根據(jù)被修改的中間數(shù)據(jù)庫(kù)的情況修改業(yè)務(wù)數(shù)據(jù)庫(kù),其基本流程對(duì)應(yīng)于圖3。第二種情況是,在各業(yè)務(wù)平臺(tái)上修改了數(shù)據(jù),這些數(shù)據(jù)引起了業(yè)務(wù)基礎(chǔ)庫(kù)的更新,更新的數(shù)據(jù)庫(kù)將引起中間庫(kù)的更新,其基本流程圖對(duì)應(yīng)于圖4。
② 數(shù)據(jù)同步方案
中間數(shù)據(jù)庫(kù)與業(yè)務(wù)基礎(chǔ)庫(kù)中相同變量的對(duì)應(yīng)關(guān)系是一對(duì)多,在中間數(shù)據(jù)中修改一個(gè)數(shù)據(jù),可能涉及多個(gè)業(yè)務(wù)基礎(chǔ)庫(kù)的修改,但每個(gè)業(yè)務(wù)數(shù)據(jù)庫(kù)修改的方式又不一樣。如在中間數(shù)據(jù)庫(kù)中增加一個(gè)姓名,定義為8個(gè)字節(jié),業(yè)務(wù)基礎(chǔ)數(shù)據(jù)庫(kù)1和業(yè)務(wù)基礎(chǔ)數(shù)據(jù)庫(kù)2都涉及了姓名列,但在業(yè)務(wù)數(shù)據(jù)庫(kù)1中,其字段長(zhǎng)度為20,而業(yè)務(wù)基礎(chǔ)庫(kù)2中,其字段長(zhǎng)度為30,故在轉(zhuǎn)換時(shí),需要為中間數(shù)據(jù)庫(kù)每一個(gè)字段與所有的業(yè)務(wù)基礎(chǔ)庫(kù)的相同字段定義好轉(zhuǎn)換規(guī)則,在轉(zhuǎn)換時(shí),必須查找對(duì)應(yīng)的規(guī)則進(jìn)行轉(zhuǎn)換。
當(dāng)在業(yè)務(wù)平臺(tái)i上進(jìn)行了數(shù)據(jù)處理(圖4),對(duì)應(yīng)的業(yè)務(wù)數(shù)據(jù)庫(kù)中的數(shù)據(jù)也要進(jìn)行更改,同時(shí)也要將修改的數(shù)據(jù)同步到中間數(shù)據(jù)庫(kù)中。此時(shí),業(yè)務(wù)數(shù)據(jù)庫(kù)中的某變量與中間數(shù)據(jù)庫(kù)中的某變量的對(duì)應(yīng)關(guān)系是一對(duì)一。在進(jìn)行數(shù)據(jù)轉(zhuǎn)換時(shí),只需要查詢(xún)他們的轉(zhuǎn)換關(guān)系即可。當(dāng)中間數(shù)據(jù)庫(kù)的數(shù)據(jù)完成更新后,會(huì)觸發(fā)中間數(shù)據(jù)庫(kù)更改程序,將所有其他與此字段有關(guān)的其他業(yè)務(wù)數(shù)據(jù)庫(kù)所有的相關(guān)字段統(tǒng)一進(jìn)行更改,這樣也達(dá)到了某個(gè)數(shù)據(jù)庫(kù)修改、其他數(shù)據(jù)庫(kù)同步的效果。
③ 數(shù)據(jù)庫(kù)同步的關(guān)鍵技術(shù)
由于中間數(shù)據(jù)庫(kù)與各業(yè)務(wù)數(shù)據(jù)庫(kù)存在一對(duì)多的關(guān)系,則他們之間將會(huì)出現(xiàn)多線(xiàn)程同時(shí)寫(xiě)入的情況,為了保證數(shù)據(jù)的準(zhǔn)確性,在向中間數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)寫(xiě)入時(shí),必須進(jìn)行加鎖技術(shù)(在java中,synchronized技術(shù)就可以實(shí)現(xiàn)),只有在寫(xiě)入完畢后,才進(jìn)行解鎖操作,允許下一個(gè)進(jìn)程寫(xiě)入數(shù)據(jù)。
3 算法實(shí)現(xiàn)
數(shù)據(jù)轉(zhuǎn)換算法(JAVA語(yǔ)言):
public void writer(int num) //
{ { for(int i=0;i<=n;i++) //逐個(gè)判斷參數(shù),是否需要進(jìn)行寫(xiě)操作
{ if(flag(i)=0){
synchronized (讀進(jìn)程) //死鎖進(jìn)行
try // 需要進(jìn)行寫(xiě)操作
{ if(fileNotFound){ //判斷文件是否存在
System.out.println("error"); } } //如果不存在,顯示錯(cuò)誤
catch (InterruptedException e) { //拋出異常
e.printStackTrace(); } } }//顯示異常信息
for (int j = 1; j <= num; ++j)
{conversion(A[i],B[j],)AB[ij]; } //將參數(shù)i,按照與每個(gè)數(shù)據(jù)庫(kù)特定的關(guān)系,逐個(gè)寫(xiě)入有關(guān)系的數(shù)據(jù)庫(kù)j中,
writeBufferedInputStream.out(B); } }
4 結(jié)束語(yǔ)
利用中間件來(lái)完成對(duì)數(shù)據(jù)的轉(zhuǎn)換是當(dāng)前企業(yè)的一種主流解決方案,這種方案可以在不更改舊系統(tǒng)的情況下建立新系統(tǒng),并且通過(guò)中間庫(kù)和中間件,使新舊數(shù)據(jù)庫(kù)及時(shí)更新,滿(mǎn)足數(shù)據(jù)一致性要求。但隨著數(shù)據(jù)量越來(lái)越大,在設(shè)計(jì)中間庫(kù)時(shí),各變量之間的聯(lián)系將越來(lái)越復(fù)雜,只有將這些負(fù)責(zé)的關(guān)聯(lián)建立清晰的模型,數(shù)據(jù)轉(zhuǎn)換才不會(huì)出錯(cuò),業(yè)務(wù)邏輯才能得到保證。作者在多個(gè)不同系統(tǒng)中測(cè)試了本文的設(shè)計(jì),能夠有效滿(mǎn)足數(shù)據(jù)轉(zhuǎn)換的要求,且安全性和穩(wěn)定性都較好。
參考文獻(xiàn):
[1] 楊曉強(qiáng),陳冰,魏生民.用基于XML的中間件訪(fǎng)問(wèn)異構(gòu)數(shù)據(jù)庫(kù)[J].計(jì)算機(jī)應(yīng)用研究,2004(6).
[2] 王振輝,王振鐸,張敏,王艷麗.Web數(shù)據(jù)庫(kù)安全中間件設(shè)計(jì)與實(shí)現(xiàn)[J].科學(xué)技術(shù)與工程,2003(5).
[3] 蔣念平,陳夏.實(shí)時(shí)Web數(shù)據(jù)庫(kù)中間件的研究[J].上海理工大學(xué)學(xué)報(bào),2010(2).