国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于XML的數(shù)據(jù)遷移技術(shù)研究

2013-12-29 00:00:00曹大華
電腦知識(shí)與技術(shù) 2013年1期

摘要:針對(duì)臨盤采油廠的數(shù)據(jù)遷移的具體需求,該文提出了一種基于XML的數(shù)據(jù)遷移模型,以實(shí)現(xiàn)數(shù)據(jù)的提取、轉(zhuǎn)換、寫(xiě)入等功能。它采用JAVA和XML技術(shù),具有很好的跨平臺(tái)、易擴(kuò)展、復(fù)用性等,能很好的解決異構(gòu)數(shù)據(jù)庫(kù)間數(shù)據(jù)遷移的問(wèn)題。

關(guān)鍵詞:數(shù)據(jù)遷移;XML;異構(gòu)數(shù)據(jù)庫(kù)

中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2013)01-0011-04

臨盤采油廠綜合信息平臺(tái)始建于2001年,積累了很多重要的油田數(shù)據(jù)。隨著“數(shù)字油田”的發(fā)展趨勢(shì),臨盤采油廠的數(shù)據(jù)需要遷移到一個(gè)統(tǒng)一的源頭數(shù)據(jù)庫(kù),這樣不僅臨盤采油廠可以訪問(wèn)數(shù)據(jù)庫(kù)中的信息,其他系統(tǒng)也可以共享其數(shù)據(jù),以達(dá)到信息統(tǒng)一管理、信息共享的目的。這樣能很好的解決了“信息孤島”的現(xiàn)象。針對(duì)上述問(wèn)題,結(jié)合現(xiàn)有的數(shù)據(jù)遷移轉(zhuǎn)換技術(shù),設(shè)計(jì)一個(gè)數(shù)據(jù)遷移轉(zhuǎn)換接口是十分必要的。它將實(shí)現(xiàn)將來(lái)源離散且格式多樣的臨盤采油廠數(shù)據(jù)進(jìn)行處理后,再將這些標(biāo)準(zhǔn)化數(shù)據(jù)遷移到源頭數(shù)據(jù)庫(kù)中,為臨盤采油廠和其他管理部門提供標(biāo)準(zhǔn)統(tǒng)一的數(shù)據(jù)信息,實(shí)現(xiàn)數(shù)據(jù)的共享。

1 數(shù)據(jù)遷移相關(guān)技術(shù)及解決思路

1.1常用的數(shù)據(jù)遷移技術(shù)

數(shù)據(jù)遷移是指將源數(shù)據(jù)庫(kù)中指定表的數(shù)據(jù)進(jìn)行清洗、轉(zhuǎn)換并裝載到目的數(shù)據(jù)庫(kù)指定表中的過(guò)程[1]。數(shù)據(jù)遷移可以分為抽取、轉(zhuǎn)換、裝載三個(gè)步驟。數(shù)據(jù)抽取是根據(jù)實(shí)際應(yīng)用,對(duì)舊系統(tǒng)的底層數(shù)據(jù)進(jìn)行篩選,選擇出需要的待遷移數(shù)據(jù)。轉(zhuǎn)換是根據(jù)新舊數(shù)據(jù)庫(kù)的映射關(guān)系進(jìn)行的,首先比較新舊系統(tǒng)中字段數(shù)據(jù)類型的差異和聯(lián)系,找出適當(dāng)?shù)膶?duì)應(yīng)關(guān)系,然后進(jìn)行相應(yīng)的轉(zhuǎn)換。數(shù)據(jù)裝載是通過(guò)數(shù)據(jù)遷移工具或事先編寫(xiě)的SQL程序?qū)⒊槿?、轉(zhuǎn)換后的數(shù)據(jù)寫(xiě)入到目標(biāo)數(shù)據(jù)庫(kù)對(duì)應(yīng)的表中。數(shù)據(jù)遷移的基本流程如圖1所示。

常用的幾種數(shù)據(jù)遷移的實(shí)現(xiàn)方法有以下幾種[2]:

1.1.1 數(shù)據(jù)庫(kù)廠商的專業(yè)工具

當(dāng)前很多數(shù)據(jù)庫(kù)廠家都提供專門的數(shù)據(jù)遷移工具,常見(jiàn)的有Informix的Infomover、Microsoft SQL Server的DTS和Oracle的Oracle Warehouse Builder等。國(guó)內(nèi)的主流數(shù)據(jù)庫(kù)廠商如DM、King Base、GBase等也都有著自己的數(shù)據(jù)庫(kù)遷移工具。

1.1.2 利用前臺(tái)開(kāi)發(fā)工具

PowerBuilder 是廣泛用于數(shù)據(jù)庫(kù)前臺(tái)開(kāi)發(fā)的軟件,它對(duì)不同數(shù)據(jù)庫(kù)采用不同接口(ODBC 或?qū)S媒涌冢?,可以支持多種關(guān)系數(shù)據(jù)庫(kù)。

1.1.3 利用數(shù)據(jù)庫(kù)組件轉(zhuǎn)換

利用. net 數(shù)據(jù)庫(kù)應(yīng)用程序開(kāi)發(fā)技術(shù)實(shí)現(xiàn)源數(shù)據(jù)庫(kù)向目標(biāo)數(shù)據(jù)庫(kù)的直接轉(zhuǎn)換。這個(gè)過(guò)程中使用了ADO. NET提供的兩個(gè)核心組件:DataSet 和DataProvider。DataSet 組件的設(shè)計(jì)實(shí)現(xiàn)了獨(dú)立于任何數(shù)據(jù)源的數(shù)據(jù)訪問(wèn), DataProvider 組件的設(shè)計(jì)實(shí)現(xiàn)了對(duì)數(shù)據(jù)庫(kù)的連接、操作、讀取的訪問(wèn)。

1.1.4 基于中間件的解決方法

顧名思義,這種方法就是在源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)間建立一個(gè)中間層。將用戶對(duì)不同數(shù)據(jù)庫(kù)的操作變?yōu)閷?duì)單一中間件的操作,然后經(jīng)過(guò)中間件的處理實(shí)現(xiàn)數(shù)據(jù)遷移處理?;谥虚g件的解決方案有以下優(yōu)點(diǎn):

(1)易于移植和集成。中間件將各種與平臺(tái)相關(guān)的細(xì)節(jié)進(jìn)行了封裝,即使變更操作系統(tǒng)或通信協(xié)議等底層配置,也不用改變應(yīng)用程序代碼。

(2)易于擴(kuò)充。中間件若有局部變動(dòng)和整體升級(jí),只要對(duì)外的接口保持不變,就不會(huì)影響系統(tǒng)其它部分的正常運(yùn)行,從功能上對(duì)應(yīng)用程序?qū)崿F(xiàn)了透明。

(3)訪問(wèn)透明、使用簡(jiǎn)單。中間件封裝了底層的具體實(shí)現(xiàn)細(xì)節(jié),對(duì)各種數(shù)據(jù)源使用統(tǒng)一的方法訪問(wèn),這對(duì)用戶來(lái)說(shuō)是透明的。

1.2 XML及JAVA技術(shù)

XML(Extensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)以一種自我描述的方式進(jìn)行數(shù)據(jù)結(jié)構(gòu)定義,在描述數(shù)據(jù)內(nèi)容的同時(shí)也突出了對(duì)結(jié)構(gòu)的描述,從而體現(xiàn)出數(shù)據(jù)之間的關(guān)系。XML的優(yōu)點(diǎn)很多,如高可擴(kuò)展性、平臺(tái)無(wú)關(guān)性、自描述性等等。XML技術(shù)的發(fā)展非常迅速,在許多領(lǐng)域都得到廣泛的應(yīng)用。

JAVA是面向?qū)ο笮驼Z(yǔ)言,它繼承了C++語(yǔ)言面向?qū)ο蠹夹g(shù)的核心,它集成了其它一些語(yǔ)言的特點(diǎn)和優(yōu)勢(shì),又避開(kāi)了它們的不足之處。Java中常用連接數(shù)據(jù)庫(kù)的技術(shù)是JDBC,很多數(shù)據(jù)庫(kù)都帶有JDBC驅(qū)動(dòng)程序[3]。SUN公司還開(kāi)發(fā)了JDBC-ODBC橋,用此技術(shù)可以實(shí)現(xiàn)對(duì)帶有ODBC驅(qū)動(dòng)程序的數(shù)據(jù)庫(kù)的訪問(wèn)。

Java和XML有許多相似的特性,比如平臺(tái)無(wú)關(guān)性、可擴(kuò)展性、可重用性等,因此它與XML結(jié)合起來(lái),是實(shí)現(xiàn)中間件的一個(gè)很好的方式。

1.3 數(shù)據(jù)遷移接口思路

現(xiàn)今臨盤采油廠數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要遷移到統(tǒng)一的源頭數(shù)據(jù)庫(kù)中,但新舊數(shù)據(jù)庫(kù)系統(tǒng)存在一定的差異,如數(shù)據(jù)庫(kù)系統(tǒng)的差異、數(shù)據(jù)表結(jié)構(gòu)的差異、數(shù)據(jù)類型的差異等。如何解決這些問(wèn)題是該文的難點(diǎn)和重點(diǎn)。

Java和xml的完美結(jié)合為問(wèn)題的解決提供了一個(gè)很好的途徑,因此本文的解決方案就是利用java和xml實(shí)現(xiàn)數(shù)據(jù)的跨平臺(tái)的遷移。

數(shù)據(jù)遷移的基本思路如下:

首先,建立各種關(guān)系數(shù)據(jù)庫(kù)的 XML 數(shù)據(jù)模型,根據(jù)具體的需求選擇相應(yīng)的列,將數(shù)據(jù)庫(kù)中單個(gè)或者多個(gè)表映射成相應(yīng)的 XML的屬性或文檔結(jié)構(gòu),然后提取表中的數(shù)據(jù),加以整理和組合生成相應(yīng) XML文檔,也就是將關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為 XML 格式的數(shù)據(jù)文件。

然后,就可以定義XML Schema的數(shù)據(jù)約束規(guī)則來(lái)控制程序,它在數(shù)據(jù)遷移過(guò)程中起著非常重要的作用。根據(jù) XML Schema 及自定義約束規(guī)則進(jìn)行數(shù)據(jù)的完整性校驗(yàn)。

最后,利用java語(yǔ)言實(shí)現(xiàn)對(duì)生成的XML的讀取,把XML文本中的內(nèi)容讀取出來(lái),同時(shí)找到和目標(biāo)數(shù)據(jù)庫(kù)表中的對(duì)應(yīng)關(guān)系,最終把數(shù)據(jù)導(dǎo)入目標(biāo)數(shù)據(jù)庫(kù)表中。

2 異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)遷移方案設(shè)計(jì)

2.1數(shù)據(jù)庫(kù)遷移面臨的問(wèn)題及總體流程設(shè)計(jì)

臨盤采油廠數(shù)據(jù)遷移面臨的問(wèn)題:

1)數(shù)據(jù)庫(kù)系統(tǒng)的異構(gòu)

臨盤采油廠開(kāi)發(fā)平臺(tái)采用的是Access、SQLServer數(shù)據(jù)庫(kù),而源頭數(shù)據(jù)庫(kù)采用的是Oracle數(shù)據(jù)庫(kù)。

2)數(shù)據(jù)表結(jié)構(gòu)的不同

臨盤采油廠開(kāi)發(fā)平臺(tái)中數(shù)據(jù)庫(kù)Access、SQLServer中的表結(jié)構(gòu)和源頭數(shù)據(jù)庫(kù)(目標(biāo)數(shù)據(jù)庫(kù))中的表結(jié)構(gòu)存在差異,如:列名稱不同、列的數(shù)目不同、存在列的組合情況等。

3)數(shù)據(jù)表的數(shù)據(jù)類型不同

臨盤采油廠開(kāi)發(fā)平臺(tái)中數(shù)據(jù)庫(kù)Access、SQLServer與源頭數(shù)據(jù)庫(kù)Oracle中的數(shù)據(jù)類型存在差異。

4)數(shù)據(jù)表之間行列轉(zhuǎn)換問(wèn)題

源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)之間存在行列轉(zhuǎn)換的問(wèn)題。

為了很好解決上述問(wèn)題,該文采用了基于xml的中間件,數(shù)據(jù)遷移的總體流程圖如圖2。

用戶是在了解源頭數(shù)據(jù)庫(kù)基本結(jié)構(gòu)的情況下,進(jìn)行數(shù)據(jù)庫(kù)中數(shù)據(jù)表的選擇,可以把整個(gè)表結(jié)構(gòu)通過(guò)Java映射為XML文件,也可以選擇其中部分字段進(jìn)行映射,或者是一些字段組合成一個(gè)新的字段。

通過(guò)相應(yīng)的XML格式檢測(cè),如果XML文件格式合法,則根據(jù)XML文件中的結(jié)構(gòu)進(jìn)行其與目標(biāo)數(shù)據(jù)庫(kù)中表的結(jié)構(gòu)進(jìn)行對(duì)應(yīng)。XML中的標(biāo)簽名可以不同于目標(biāo)數(shù)據(jù)庫(kù)中表的列名,這樣就解決了源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù)表列名不同的問(wèn)題。

最后,用Java采用DOM、JDOM或者SAX的解析方式,把XML文件中的數(shù)據(jù)讀取到目標(biāo)數(shù)據(jù)庫(kù)。

2.2源數(shù)據(jù)庫(kù)到XML文件的數(shù)據(jù)轉(zhuǎn)化

在程序開(kāi)發(fā)過(guò)程中,需要連接源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù),連接數(shù)據(jù)庫(kù)采用JAVA語(yǔ)言的JDBC驅(qū)動(dòng)程序。該驅(qū)動(dòng)程序具有效率高的特點(diǎn),不會(huì)增加額外的開(kāi)銷,由純JAVA語(yǔ)言開(kāi)發(fā)而成,擁有最佳的兼容性。

在源數(shù)據(jù)庫(kù)和XML文檔之間進(jìn)行轉(zhuǎn)換和高效的傳遞數(shù)據(jù),必須在XML文件和數(shù)據(jù)庫(kù)表結(jié)構(gòu)之間建立映射[4],建立它們之間的映射有兩種常用的映射方法:基于模板驅(qū)動(dòng)的映射和基于模型驅(qū)動(dòng)的映射[5]。

本文采用了基于模板驅(qū)動(dòng)的映射來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)到XML文檔的數(shù)據(jù)轉(zhuǎn)換。在模板中加入了SQL命令,經(jīng)過(guò)中間件的處理生成相應(yīng)的XML文件。

流程如下圖3。

基于模板驅(qū)動(dòng)的映射操作比較靈活,但是它只支持關(guān)系型數(shù)據(jù)庫(kù)轉(zhuǎn)換到XML文檔。

2.3 XML文檔數(shù)據(jù)轉(zhuǎn)移到目標(biāo)數(shù)據(jù)庫(kù)

XML文檔中的數(shù)據(jù)轉(zhuǎn)換到目標(biāo)數(shù)據(jù)庫(kù)中,我們準(zhǔn)備采用基于模型驅(qū)動(dòng)的映射模式,利用生成的XML文檔中的數(shù)據(jù)結(jié)構(gòu)顯性或隱性的與目標(biāo)數(shù)據(jù)庫(kù)表結(jié)構(gòu)進(jìn)行映射[6]。在此過(guò)程中采用DOM、JDOM或者SAX接口進(jìn)行XML文件的解析。

其流程圖如圖4。

實(shí)現(xiàn)XML文檔數(shù)據(jù)到目標(biāo)數(shù)據(jù)庫(kù)中的轉(zhuǎn)換步驟如下:

1)首先通過(guò)XML語(yǔ)法分析處理器檢測(cè)XML文檔結(jié)構(gòu)。

2)將分析處理的結(jié)果送到XML的解析器(DOM、JDOM或者SAX)中進(jìn)行解析,將其中的內(nèi)容轉(zhuǎn)換到JAVA對(duì)象中。

3)連接目標(biāo)數(shù)據(jù)庫(kù),把JAVA對(duì)象中的數(shù)據(jù)插入到目標(biāo)數(shù)據(jù)庫(kù)中。

基于模型的驅(qū)動(dòng)映射結(jié)構(gòu)簡(jiǎn)單,使用易用,但是和基于模板的驅(qū)動(dòng)相比,它不夠靈活,因?yàn)樗成涞氖蔷唧w的數(shù)據(jù)模型,不過(guò)可以通過(guò)XSL實(shí)現(xiàn)其靈活性。

3 結(jié)束語(yǔ)

本文介紹了采用JAVA技術(shù)和XML技術(shù)實(shí)現(xiàn)臨盤采油廠的數(shù)據(jù)轉(zhuǎn)換接口的實(shí)現(xiàn)方法。此方法可以很好的實(shí)現(xiàn)數(shù)據(jù)的遷移,采用XML作為中間數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)很好的屏蔽了數(shù)據(jù)庫(kù)系統(tǒng)之間的差異性,如數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型等,而且XML和JAVA都具有很好的跨平臺(tái)性,可以實(shí)現(xiàn)了系統(tǒng)的跨平臺(tái)性。

參考文獻(xiàn):

[1] 尹建璋.基于XML的應(yīng)用層數(shù)據(jù)交換技術(shù)的研究[J].計(jì)算機(jī)與現(xiàn)代化,2009 (11).

[2] 張欣欣.綜合錄井儀數(shù)據(jù)遷移及轉(zhuǎn)換接口技術(shù)研究[D].中國(guó)石油大學(xué),2008.

[3] 孔翔鷹,李治柱.XML與數(shù)據(jù)庫(kù)雙向接口的研究和實(shí)現(xiàn)[J].微型電腦應(yīng)用,2006,9(22):48-52.

[4] 周競(jìng)濤.基于XML的異構(gòu)數(shù)據(jù)庫(kù)集成中間件技術(shù)研究[D].西安:西北工業(yè)大學(xué),2002.

[5] Giuseppe Psaila.ERX:An ExPerience inIntegrating ER Models RDB and XML Teclinologies .EDBT 2002 Workshops .LNCS,2490.2002:242-265.

[6] 戴永壽,張淑英.基于JAVA和XML的綜合錄井儀數(shù)據(jù)轉(zhuǎn)換接口技術(shù)進(jìn)展[J].錄井工程, 2008,19(2).

[7] 鄭仕勇,李碧青.基于XML和中間件的數(shù)據(jù)遷移模型研究與設(shè)計(jì)[J].軟件導(dǎo)刊, 2012,11(4).

[8] 王云曉,張學(xué)誠(chéng),屈彪.基于XML的構(gòu)件庫(kù)管理系統(tǒng)實(shí)現(xiàn)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2009(26).

[9] 歐陽(yáng)崢崢,李禹生.基于XML的異構(gòu)數(shù)據(jù)庫(kù)數(shù)據(jù)交換中間件的研究[J].計(jì)算機(jī)與現(xiàn)代化,2008(12).

[10] 李鐘雋.基于XML數(shù)據(jù)遷移中間件的研究[D].哈爾濱:哈爾濱工程大學(xué),2007.

宜春市| 镇远县| 溧水县| 抚顺市| 谢通门县| 双流县| 大连市| 邻水| 英吉沙县| 哈尔滨市| 瓮安县| 灵武市| 扎赉特旗| 东明县| 玉溪市| 玛沁县| 三门县| 阜宁县| 河曲县| 太白县| 名山县| 彭山县| 望江县| 寻甸| 新龙县| 安化县| 祁门县| 晋城| 广东省| 吴江市| 天柱县| 武陟县| 垣曲县| 济宁市| 乾安县| 什邡市| 靖边县| 阿克陶县| 堆龙德庆县| 乃东县| 临武县|