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