專利名稱::一種數(shù)據(jù)遷移系統(tǒng)和方法一種數(shù)據(jù)遷移系統(tǒng)和方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及計(jì)算機(jī)系統(tǒng)數(shù)據(jù)處理
技術(shù)領(lǐng)域:
,特別是涉及一種數(shù)據(jù)遷移系統(tǒng)和方法。
背景技術(shù):
:目前,隨著網(wǎng)絡(luò)技術(shù)的發(fā)展和信息量的增加,網(wǎng)絡(luò)上形成了數(shù)量巨大的分布的異構(gòu)信息源。各企事業(yè)內(nèi)部由于地理位置的不同或新需求的增加也形成了一個(gè)分布式的、異構(gòu)的且數(shù)量巨大的數(shù)據(jù)集合。異構(gòu)的數(shù)據(jù)源出現(xiàn)的一個(gè)很重要的原因是由于多種商業(yè)數(shù)據(jù)庫(kù)的同時(shí)存在。異構(gòu)數(shù)據(jù)源形式多樣,從結(jié)構(gòu)上來(lái)區(qū)分,其不僅可以包括數(shù)據(jù)庫(kù)(如關(guān)系數(shù)據(jù)庫(kù))中結(jié)構(gòu)化數(shù)據(jù),而且還可以包括文件系統(tǒng)中非結(jié)構(gòu)化的數(shù)據(jù),如一般的文本文件、電子郵件、演示文稿和各種文檔等。這些數(shù)據(jù)源往往分布在地理位置上,數(shù)據(jù)格式和代碼不同一,這些都直接推動(dòng)了對(duì)異構(gòu)數(shù)據(jù)源的數(shù)據(jù)共享和透明訪問(wèn)的需求的產(chǎn)生。因此,如何將數(shù)據(jù)在這些異構(gòu)數(shù)據(jù)源之間進(jìn)行遷移,從而維持一個(gè)一致、完整的全局模式,具有重要的意義。在現(xiàn)有技術(shù)中,常用的數(shù)據(jù)遷移方法主要采用導(dǎo)出/導(dǎo)入方式。假設(shè)欲將數(shù)據(jù)從Oracle數(shù)據(jù)庫(kù)遷移至HDFS(分布式文件系統(tǒng),HadoopDistributedFileSystem)系統(tǒng),貝丨J現(xiàn)有技術(shù)首先采用Oracle的數(shù)據(jù)導(dǎo)出命令或工具將源數(shù)據(jù)導(dǎo)出為文件,然后利用工具將文件格式、編碼進(jìn)行轉(zhuǎn)化后拷貝到HDFS系統(tǒng)中。現(xiàn)有技術(shù)具有如下缺點(diǎn)1、數(shù)據(jù)的導(dǎo)出和轉(zhuǎn)碼過(guò)程都需要磁盤(pán)轉(zhuǎn)儲(chǔ),由于磁盤(pán)轉(zhuǎn)儲(chǔ)需要大量的磁盤(pán)I/0(輸入/輸出,input/output),而磁盤(pán)是慢速設(shè)備,這就導(dǎo)致數(shù)據(jù)遷移的流程比較長(zhǎng),數(shù)據(jù)遷移的性能低下;另外,在長(zhǎng)的數(shù)據(jù)遷移流程中,用戶不僅需要自己銜接上下游過(guò)程,對(duì)每個(gè)過(guò)程進(jìn)行監(jiān)控,而且還要監(jiān)控磁盤(pán)空間,這大大提高了運(yùn)維成本;2、雖然,目前成熟的數(shù)據(jù)導(dǎo)入導(dǎo)出工具比較多,但是一般都只能支持一個(gè)或者幾個(gè)特定類型的數(shù)據(jù)庫(kù);一旦擁有很多異構(gòu)數(shù)據(jù)源,如Mysql、Oracle、Rac>Hive等數(shù)據(jù)庫(kù)/文件系統(tǒng),并且需要經(jīng)常在這些異構(gòu)數(shù)據(jù)源之間導(dǎo)入導(dǎo)出數(shù)據(jù),那么需要開(kāi)發(fā)/維護(hù)/學(xué)習(xí)使用一批這樣的工具,并且隨著數(shù)據(jù)源類型的增加,需要的導(dǎo)入導(dǎo)出工具數(shù)目會(huì)呈線性增長(zhǎng)趨勢(shì),而導(dǎo)入導(dǎo)出工具的開(kāi)發(fā)會(huì)花費(fèi)大量的開(kāi)發(fā)成本。
發(fā)明內(nèi)容本申請(qǐng)所要解決的技術(shù)問(wèn)題是,提供一種數(shù)據(jù)遷移系統(tǒng)和方法,以提高數(shù)據(jù)遷移的性能,降低數(shù)據(jù)遷移所花費(fèi)的運(yùn)維成本和開(kāi)發(fā)成本。為了解決上述問(wèn)題,本申請(qǐng)公開(kāi)了一種數(shù)據(jù)遷移系統(tǒng),包括配置讀取模塊,用于讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;讀取模塊,用于依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后,寫(xiě)入數(shù)據(jù)交換緩沖模塊;數(shù)據(jù)交換緩沖模塊,用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);及寫(xiě)入模塊,用于從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。另一方面,本申請(qǐng)還公開(kāi)了一種數(shù)據(jù)遷移方法,包括讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀??;將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式,并寫(xiě)入數(shù)據(jù)交換緩沖模塊,其中,所述數(shù)據(jù)交換緩沖模塊用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù);依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式,并寫(xiě)入目標(biāo)地址。優(yōu)選的,所述方法還包括依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件,并向所述讀取插件提供相應(yīng)的運(yùn)行環(huán)境,由所述讀取插件依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后寫(xiě)入數(shù)據(jù)交換緩沖插件,由所述數(shù)據(jù)交換緩沖插件臨時(shí)存儲(chǔ)讀取插件寫(xiě)入的中間格式的數(shù)據(jù);依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,裝載相應(yīng)的寫(xiě)入插件,并向所述寫(xiě)入插件提供相應(yīng)的運(yùn)行環(huán)境,由所述寫(xiě)入插件從所述數(shù)據(jù)交換緩沖插件中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。優(yōu)選的,所述方法還包括在進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);所述依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取的步驟為,在多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取優(yōu)選的,所述方法還包括在所述寫(xiě)入模塊將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);所述寫(xiě)入目標(biāo)地址的步驟為,在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址。優(yōu)選的,所述數(shù)據(jù)交換緩沖模塊為基于雙緩沖隊(duì)列的內(nèi)存緩沖區(qū)。優(yōu)選的,所述方法還包括在所述讀取模塊和/或數(shù)據(jù)交換緩沖模塊和/或?qū)懭肽K的運(yùn)行過(guò)程中,監(jiān)控相應(yīng)的運(yùn)行參數(shù),所述運(yùn)行參數(shù)包括讀取和/或臨時(shí)存儲(chǔ)和/或?qū)懭霐?shù)據(jù)的行數(shù)和/或字節(jié)數(shù)。優(yōu)選的,所述數(shù)據(jù)讀取信息包括如下信息中的一種或多種源數(shù)據(jù)庫(kù)的IP地址、端口號(hào)、庫(kù)名、登錄用戶名、登錄密碼、數(shù)據(jù)庫(kù)表名、過(guò)濾條件;所述數(shù)據(jù)寫(xiě)入信息包括如下信息中的一種或多種數(shù)據(jù)寫(xiě)入路徑、數(shù)據(jù)目標(biāo)格式。優(yōu)選的,所述配置文件為可擴(kuò)展標(biāo)記語(yǔ)言文件,所述可擴(kuò)展標(biāo)記語(yǔ)言文件的命名規(guī)則為源表名_目的表名_源數(shù)據(jù)庫(kù)類型_目的數(shù)據(jù)庫(kù)類型.xml。優(yōu)選的,所述方法還包括存放插件的插件描述文件;依據(jù)所述插件描述文件中存儲(chǔ)的裝載插件所需信息,對(duì)相應(yīng)的插件進(jìn)行注冊(cè),并存儲(chǔ)相應(yīng)的插件注冊(cè)信息;所述裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件的步驟,包括將所述配置文件中的數(shù)據(jù)讀取信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化;所述裝載相應(yīng)的寫(xiě)入插件的步驟,包括將所述配置文件中的數(shù)據(jù)寫(xiě)入信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化。與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn)首先,本申請(qǐng)依據(jù)配置文件進(jìn)行數(shù)據(jù)遷移,并且,在數(shù)據(jù)遷移過(guò)程中,利用數(shù)據(jù)交換緩沖模塊臨時(shí)存儲(chǔ)從源地址讀取的數(shù)據(jù),由于數(shù)據(jù)交換緩沖模塊中的數(shù)據(jù)立即被取走并寫(xiě)入至目標(biāo)地址,故整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需磁盤(pán)中轉(zhuǎn)。因此,相對(duì)于現(xiàn)有技術(shù),能夠縮短數(shù)據(jù)遷移的流程,提高數(shù)據(jù)遷移的性能;另外,在數(shù)據(jù)遷移流程中,用戶無(wú)需監(jiān)控磁盤(pán)空間,故也可以減少運(yùn)維成本。其次,無(wú)論數(shù)據(jù)的源格式如何,本申請(qǐng)都會(huì)將讀取的數(shù)據(jù)轉(zhuǎn)換為預(yù)先規(guī)定的、寫(xiě)入模塊能夠識(shí)別的中間格式,并進(jìn)行臨時(shí)存儲(chǔ),從而能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的通用緩沖管理,以便寫(xiě)入模塊能夠依據(jù)數(shù)據(jù)寫(xiě)入信息將該中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式,并寫(xiě)入目標(biāo)地址;所述中間格式使得讀取模塊和寫(xiě)入模塊的功能獨(dú)立,這樣,讀取模塊和寫(xiě)入模塊的開(kāi)發(fā)能夠單獨(dú)進(jìn)行,既能夠快速支持新的異構(gòu)數(shù)據(jù)源,又能夠降低開(kāi)發(fā)難度和開(kāi)發(fā)成本。再者,本申請(qǐng)還可以采用線程池進(jìn)行所述多個(gè)讀取子任務(wù)的讀取,和/或,多個(gè)寫(xiě)入子任務(wù)的寫(xiě)入,而任意兩個(gè)讀取/寫(xiě)入子任務(wù)之間互不影響,因此能夠?qū)崿F(xiàn)并行讀取和/或并行寫(xiě)入,從而能夠大大縮短數(shù)據(jù)遷移流程,同時(shí)進(jìn)一步提高數(shù)據(jù)遷移性能。進(jìn)一步,相對(duì)于現(xiàn)有技術(shù),在長(zhǎng)的數(shù)據(jù)遷移流程中,用戶不僅需要自己銜接上下游過(guò)程,對(duì)每個(gè)過(guò)程進(jìn)行監(jiān)控,而且還要監(jiān)控磁盤(pán)空間;本申請(qǐng)會(huì)在短的數(shù)據(jù)遷移流程中自動(dòng)為用戶呈現(xiàn)數(shù)據(jù)遷移的運(yùn)行參數(shù),例如,當(dāng)前讀取了多少字節(jié)數(shù),臨時(shí)存儲(chǔ)了多少字節(jié)數(shù),寫(xiě)入了多少字節(jié)數(shù),所述呈現(xiàn)使得用戶對(duì)數(shù)據(jù)遷移流程一目了然。最后,本申請(qǐng)可以采用框架+插件的結(jié)構(gòu)開(kāi)發(fā)數(shù)據(jù)遷移系統(tǒng),作為系統(tǒng)的框架,插件式數(shù)據(jù)遷移平臺(tái)相當(dāng)于一個(gè)數(shù)據(jù)中轉(zhuǎn)平臺(tái),而插件則為訪問(wèn)不同類型的數(shù)據(jù)源(數(shù)據(jù)庫(kù)/文件系統(tǒng))提供實(shí)現(xiàn),支持以插件的形式開(kāi)發(fā)每個(gè)數(shù)據(jù)源的訪問(wèn)功能;這樣,用戶可以很方便的往插件式數(shù)據(jù)遷移平臺(tái)增加新的插件,使插件式數(shù)據(jù)遷移平臺(tái)快速支持新的數(shù)據(jù)庫(kù)或者文件系統(tǒng),增強(qiáng)系統(tǒng)的靈活性和擴(kuò)展性;同時(shí),相對(duì)于現(xiàn)有技術(shù),為了訪問(wèn)一個(gè)新的數(shù)據(jù)源,需要大量的人力開(kāi)發(fā)和測(cè)試,才能開(kāi)發(fā)一套導(dǎo)入導(dǎo)出工具,而本申請(qǐng)的插件只需較小的工作量和開(kāi)發(fā)成本,因此能夠大大降低開(kāi)發(fā)成本。圖1是本申請(qǐng)一種數(shù)據(jù)遷移系統(tǒng)實(shí)施例1的結(jié)構(gòu)圖;圖2是本申請(qǐng)一種企業(yè)中數(shù)據(jù)遷移的示意圖;圖3是本申請(qǐng)一種數(shù)據(jù)遷移系統(tǒng)實(shí)施例2的結(jié)構(gòu)圖;圖4是本申請(qǐng)一種數(shù)據(jù)遷移方法實(shí)施例1的流程圖;圖5是本申請(qǐng)一種數(shù)據(jù)遷移方法實(shí)施例2的流程圖。具體實(shí)施例方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說(shuō)明。本申請(qǐng)實(shí)施例的核心構(gòu)思之一在于,依據(jù)配置文件進(jìn)行數(shù)據(jù)遷移,并且,在數(shù)據(jù)遷移過(guò)程中,利用數(shù)據(jù)交換緩沖模塊臨時(shí)存儲(chǔ)從源地址讀取的數(shù)據(jù),由于數(shù)據(jù)交換緩沖模塊中的數(shù)據(jù)立即被取走并寫(xiě)入至目標(biāo)地址,故整個(gè)數(shù)據(jù)遷移過(guò)程無(wú)需磁盤(pán)中轉(zhuǎn)。因此,相對(duì)于現(xiàn)有技術(shù),能夠縮短數(shù)據(jù)遷移的流程,提高數(shù)據(jù)遷移的性能;另外,在數(shù)據(jù)遷移流程中,用戶無(wú)需監(jiān)控磁盤(pán)空間,故也可以減少運(yùn)維成本。參照?qǐng)D1,其示出了本申請(qǐng)一種數(shù)據(jù)遷移系統(tǒng)實(shí)施例1的結(jié)構(gòu)圖,具體可以包括配置讀取模塊101,用于讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中可以包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;讀取模塊102,用于依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后,寫(xiě)入數(shù)據(jù)交換緩沖模塊;數(shù)據(jù)交換緩沖模塊103,用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);及寫(xiě)入模塊104,用于從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù),并依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。本申請(qǐng)可以適用于任意數(shù)據(jù)庫(kù)之間、任意文件系統(tǒng)之間或者任意數(shù)據(jù)庫(kù)和文件系統(tǒng)之間的數(shù)據(jù)遷移。在實(shí)際中,本申請(qǐng)可以應(yīng)用在企業(yè)倉(cāng)庫(kù)領(lǐng)域、電子商務(wù)數(shù)據(jù)倉(cāng)庫(kù)、企業(yè)信息集成等領(lǐng)域。參照?qǐng)D2,其示出了本申請(qǐng)一種企業(yè)中數(shù)據(jù)遷移的示意圖,由于企業(yè)數(shù)據(jù)倉(cāng)庫(kù)用于支撐企業(yè)的運(yùn)營(yíng)和決策,因而需要企業(yè)中各個(gè)部門(mén)的數(shù)據(jù),而各個(gè)部門(mén)的業(yè)務(wù)系統(tǒng)由于建設(shè)時(shí)間不同,決策者不同,往往采用了不同的系統(tǒng)和數(shù)據(jù)庫(kù),如財(cái)務(wù)系統(tǒng)采用DB2數(shù)據(jù)庫(kù),人力資源系統(tǒng)采用Oracle數(shù)據(jù)庫(kù),銷售系統(tǒng)采用MSSQLserver數(shù)據(jù)庫(kù),CRM(客戶關(guān)系管理系統(tǒng),CustomerRelationshipManagement)米用HTTP(超文本傳輸,HyperTextTransferProtocol)接口的數(shù)據(jù)庫(kù),物流系統(tǒng)采用MySQL數(shù)據(jù)庫(kù),等等。因此,這時(shí)可以采用本申請(qǐng)將數(shù)據(jù)從企業(yè)業(yè)務(wù)系統(tǒng)導(dǎo)入到企業(yè)數(shù)據(jù)倉(cāng)庫(kù)中。另外,企業(yè)數(shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)經(jīng)過(guò)ETL(數(shù)據(jù)提取、轉(zhuǎn)換和加載,Extraction-Transformation-Loading)過(guò)程后,形成了分析型的結(jié)果數(shù)據(jù),還需要將這些結(jié)果數(shù)據(jù)導(dǎo)出到企業(yè)業(yè)務(wù)系統(tǒng)、采用Oracel數(shù)據(jù)庫(kù)的MSTR(MicroStrategy)報(bào)表系統(tǒng)或采用MySQL的自建報(bào)表系統(tǒng),或者可視化引擎中形成圖表等圖形表現(xiàn)形式,供企業(yè)經(jīng)營(yíng)決策者使用。每一次數(shù)據(jù)遷移都可以當(dāng)作一個(gè)數(shù)據(jù)遷移任務(wù),這樣,本申請(qǐng)的數(shù)據(jù)遷移任務(wù)具體可以包括在異構(gòu)數(shù)據(jù)庫(kù)之間或者異構(gòu)文件系統(tǒng)之間或者異構(gòu)數(shù)據(jù)庫(kù)和文件系統(tǒng)之間進(jìn)行數(shù)據(jù)遷移的任務(wù)。本申請(qǐng)對(duì)具體的數(shù)據(jù)遷移任務(wù)不加以限制。關(guān)于配置文件本申請(qǐng)實(shí)施例采用配置文件來(lái)描述每個(gè)數(shù)據(jù)遷移任務(wù)的信息。在實(shí)際應(yīng)用中可由一專門(mén)的配置模塊,依據(jù)用戶配置生成數(shù)據(jù)遷移任務(wù)的配置文件。在本申請(qǐng)實(shí)施例中,優(yōu)選的是,所述配置文件可以為XML(可擴(kuò)展標(biāo)記語(yǔ)言文件,ExtensibleMarkupLanguage)格式,所述可擴(kuò)展標(biāo)記語(yǔ)言文件的命名規(guī)則可以為源表名_目的表名_源數(shù)據(jù)庫(kù)類型_目的數(shù)據(jù)庫(kù)類型.xmlο下面以MySQL->HDFS的數(shù)據(jù)遷移(表示遷移方向)為例,說(shuō)明配置文件中應(yīng)該描述數(shù)據(jù)遷移任務(wù)的信息。首先,由于要從mysql數(shù)據(jù)庫(kù)讀取數(shù)據(jù),故需要了解源數(shù)據(jù)庫(kù)的ip地址、端口、用戶名、密碼等數(shù)據(jù)讀取信息,并將這些信息存放在每個(gè)數(shù)據(jù)遷移任務(wù)的XML文件中;其次,由于要將數(shù)據(jù)寫(xiě)入至HDFS系統(tǒng),故還需要了解數(shù)據(jù)寫(xiě)入路徑、數(shù)據(jù)目標(biāo)格式等數(shù)據(jù)寫(xiě)入信息,并將這些信息存放在每個(gè)數(shù)據(jù)遷移任務(wù)的XML文件中。因此,在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述數(shù)據(jù)讀取信息具體可以包括如下信息中的一種或多種源數(shù)據(jù)庫(kù)的IP地址、端口號(hào)、庫(kù)名、登錄用戶名、登錄密碼、數(shù)據(jù)庫(kù)表名、過(guò)濾條件;所述過(guò)濾條件可以是在where條件中過(guò)濾所需的記錄,或者指定拖表所需要的列等等,本申請(qǐng)對(duì)具體的過(guò)濾條件不加以限制。所述數(shù)據(jù)寫(xiě)入信息具體可以包括如下信息中的一種或多種數(shù)據(jù)寫(xiě)入路徑、數(shù)據(jù)目標(biāo)格式。為了方便用戶生成數(shù)據(jù)遷移任務(wù)的配置文件,可通過(guò)命令行配置向?qū)苫镜呐渲梦募?。必要時(shí),如果還需深入定制,可以在生成的XML文件基礎(chǔ)上進(jìn)行再次修改。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,針對(duì)mysql分庫(kù)分表較多的情況,可以使用變量達(dá)到同一模版支持多個(gè)數(shù)據(jù)遷移任務(wù)的目的。具體可以通過(guò)如下示例來(lái)說(shuō)明假設(shè)需要同步Uic中bmw_USerS這表,而該表的數(shù)據(jù)量比較大,因此分散在16個(gè)庫(kù)、1024張表中uic_main_0000bmw_users_uic_main_0001bmw_users_uic_main_0002bmw_users_uic_main_0003bmw_users_[O192-0255]uic_main_0004bmw_users_uic_main_0005bmw_users_uic_main_0006bmw_users_uic_main_0007bmw_users_uic_main_0008bmw_users_uic_main_0009bmw_users_uic_main_0010bmw_users_uic_main_00Ilbmw_users_uic_main_00I2bmw_users_uic_main_00I3bmw_users_uic_main_0014bmw_users_uic_main_00I5bmw_users_對(duì)于這類表,本優(yōu)選實(shí)施例通常將變化的參數(shù),比如庫(kù)名和/或表名等作為變量保存在一個(gè)通用的配置文件中,然后在運(yùn)行時(shí),通過(guò)定義不同的參數(shù)值從而達(dá)到一個(gè)xml文件多表使用的目的。對(duì)應(yīng)上例,在生成配置文件的過(guò)程中,可以將Dtable_name作為表名的變量,將Ddbname作為庫(kù)名的變量,然后,在運(yùn)行時(shí)為該變量賦值,一種賦值示例如下/home/taobao/datax/bin/datax.py-p"-Dtable_name=bmw_users_-Ddbname=uic_main_0008"job.xml上述不例定位了uic_main_0008bmw_users_這個(gè)數(shù)據(jù)庫(kù)和數(shù)據(jù)表作為數(shù)據(jù)的源地址。關(guān)于中間格式無(wú)論數(shù)據(jù)的源格式如何,本申請(qǐng)都會(huì)將讀取的數(shù)據(jù)轉(zhuǎn)換為預(yù)先規(guī)定的、寫(xiě)入模塊能夠識(shí)別的中間格式,并寫(xiě)入數(shù)據(jù)交換緩沖模塊,從而能夠?qū)崿F(xiàn)對(duì)數(shù)據(jù)的通用緩沖管理,以便寫(xiě)入模塊能夠依據(jù)數(shù)據(jù)寫(xiě)入信息將該中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式,并寫(xiě)入目標(biāo)地址。所述中間格式使得讀取模塊和寫(xiě)入模塊的功能相對(duì)獨(dú)立,使得讀取模塊和寫(xiě)入模塊的開(kāi)發(fā)能夠單獨(dú)進(jìn)行,這既能夠快速支持新的異構(gòu)數(shù)據(jù)源,又能夠降低開(kāi)發(fā)難度和開(kāi)發(fā)成本。在具體實(shí)現(xiàn)中,可以預(yù)先規(guī)定數(shù)組格式,或者Java中Map類格式的中間格式。其中,Map類以按鍵/數(shù)值對(duì)的形式存儲(chǔ)數(shù)據(jù),和數(shù)組非常相似,在數(shù)組中存在的索引,它們本身也是對(duì)象。Map類的接口具體可以包括Map---實(shí)現(xiàn)MapMap.Entry—Map的內(nèi)部類,描述Map中的按鍵/數(shù)值對(duì)。SortedMap---擴(kuò)展Map,使按鍵保持升序排列當(dāng)然除了數(shù)組格式、Java中Map類格式外,所述中間格式還可以其其它格式,本申請(qǐng)對(duì)具體的中間格式不加以限制。關(guān)于數(shù)據(jù)交換緩沖模塊103在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述數(shù)據(jù)交換緩沖模塊103可以為基于雙緩沖隊(duì)列的內(nèi)存緩沖區(qū)。統(tǒng)隊(duì)列是讀取線程和寫(xiě)入線程從同一個(gè)隊(duì)列中存取數(shù)據(jù),必然需要互斥訪問(wèn),在互相同步等待中浪費(fèi)了寶貴的時(shí)間,使隊(duì)列吞吐量受影響。而雙緩沖隊(duì)使用兩個(gè)隊(duì)列,將讀寫(xiě)分離,一個(gè)隊(duì)列專門(mén)用來(lái)讀,另一個(gè)專門(mén)用來(lái)寫(xiě),當(dāng)讀隊(duì)列空或?qū)戧?duì)列滿時(shí),將兩個(gè)隊(duì)列互換。這里為了保證隊(duì)列的讀寫(xiě)順序,當(dāng)讀隊(duì)列為空且寫(xiě)隊(duì)列不為空的時(shí)候才允許兩個(gè)隊(duì)列互換。在本申請(qǐng)的又一種優(yōu)選實(shí)施例中,所述系統(tǒng)還可以包括讀取分解模塊,用于在所述讀取模塊進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);所述讀取模塊,具體用于在多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取。例如,用戶將某張Oracle數(shù)據(jù)表導(dǎo)入到HDFS文件系統(tǒng),則所述讀取分解模塊可以將這張表按行切分為N個(gè)區(qū)間,假設(shè)N=100,則可以將所述100個(gè)讀取子任務(wù)放入隊(duì)列。又如,如果用戶將HDFS文件系統(tǒng)的數(shù)據(jù)導(dǎo)入至某張Oracle數(shù)據(jù)表,則所述讀取分解模塊可以對(duì)HDFS文件系統(tǒng)的文件進(jìn)行分解,本申請(qǐng)對(duì)具體的分解過(guò)程不加以限制。進(jìn)一步,在多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取,主要具有如下優(yōu)點(diǎn)1.線程的重復(fù)利用,一個(gè)線程完成一個(gè)讀取子任務(wù)求后,會(huì)被重新丟回到該線程池,繼續(xù)等待處理下一個(gè)讀取子任務(wù);2.線程的創(chuàng)建,假如當(dāng)前的讀取子任務(wù)多于當(dāng)前了處理線程,新的讀取子任務(wù)得不到處理后,線程池會(huì)主動(dòng)創(chuàng)建新的線程處理新的讀取子任務(wù);3.線程的銷毀,假如當(dāng)前的讀取子任務(wù)比較少,大部分線程處于空閑狀態(tài)中得不到讀取子任務(wù),線程池會(huì)主動(dòng)關(guān)閉一些長(zhǎng)時(shí)間沒(méi)處理讀取子任務(wù)的線程,減少資源占用。在具體實(shí)現(xiàn)中,所述多線程池中的線程數(shù)目可由用戶在配置文字中設(shè)置,也可具有默認(rèn)值,例如,上例中可以設(shè)置線程數(shù)目為40。由于采用線程池進(jìn)行所述多個(gè)讀取子任務(wù)的讀取,任意兩個(gè)讀取子任務(wù)之間互不影響,因此能夠?qū)崿F(xiàn)讀取子任務(wù)的并行讀取,從而能夠大大縮短數(shù)據(jù)遷移流程,同時(shí)進(jìn)一步提高數(shù)據(jù)遷移性能。同理,在本申請(qǐng)的再一種優(yōu)選實(shí)施例中,所述系統(tǒng)還可以包括寫(xiě)入分解模塊,用于在所述寫(xiě)入模塊將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);所述寫(xiě)入模塊,具體用于在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址。對(duì)于采用線程池進(jìn)行所述多個(gè)寫(xiě)入子任務(wù)的寫(xiě)入,由于寫(xiě)入過(guò)程與上述讀取過(guò)程類似,故在此不作贅述,相互參照即可。由于采用線程池進(jìn)行所述多個(gè)寫(xiě)入子任務(wù)的寫(xiě)入,任意兩個(gè)讀取子任務(wù)之間互不影響,因此能夠?qū)崿F(xiàn)寫(xiě)入子任務(wù)的并行寫(xiě)入,從而能夠大大縮短數(shù)據(jù)遷移流程,同時(shí)進(jìn)一步提高數(shù)據(jù)遷移性能。在本申請(qǐng)的再一種優(yōu)選實(shí)施例中,所述系統(tǒng)還可以包括監(jiān)控計(jì)數(shù)模塊,用于在所述讀取模塊和/或數(shù)據(jù)交換緩沖模塊和/或?qū)懭肽K的運(yùn)行過(guò)程中,監(jiān)控相應(yīng)的運(yùn)行參數(shù),所述運(yùn)行參數(shù)具體可以包括讀取和/或臨時(shí)存儲(chǔ)和/或?qū)懭霐?shù)據(jù)的行數(shù)和/或字節(jié)數(shù)。相對(duì)于現(xiàn)有技術(shù),在長(zhǎng)的數(shù)據(jù)遷移流程中,用戶不僅需要自己銜接上下游過(guò)程,對(duì)每個(gè)過(guò)程進(jìn)行監(jiān)控,而且還要監(jiān)控磁盤(pán)空間;本申請(qǐng)會(huì)在短的數(shù)據(jù)遷移流程中自動(dòng)為用戶呈現(xiàn)數(shù)據(jù)遷移的運(yùn)行參數(shù),例如,當(dāng)前讀取了多少字節(jié)數(shù),臨時(shí)存儲(chǔ)了多少字節(jié)數(shù),寫(xiě)入了多少字節(jié)數(shù),所述呈現(xiàn)使得用戶對(duì)數(shù)據(jù)遷移流程一目了然。參照?qǐng)D3,其示出了本申請(qǐng)一種數(shù)據(jù)遷移系統(tǒng)實(shí)施例2的結(jié)構(gòu)圖,具體可以包括插件式數(shù)據(jù)遷移平臺(tái)301,可以進(jìn)一步包括插件裝載模塊311,用于讀取數(shù)據(jù)遷移任務(wù)的配置文件,并依據(jù)所述配置文件中的數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息,裝載相應(yīng)的讀取插件、寫(xiě)入插件和數(shù)據(jù)交換緩沖插件;及執(zhí)行引擎模塊312,用于為插件提供運(yùn)行環(huán)境;插件302,可以進(jìn)一步包括讀取插件321,用于依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后,寫(xiě)入數(shù)據(jù)交換緩沖插件322;數(shù)據(jù)交換緩沖插件322,用于臨時(shí)存儲(chǔ)讀取插件寫(xiě)入的中間格式的數(shù)據(jù);及寫(xiě)入插件323,用于從所述數(shù)據(jù)交換緩沖插件322中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。本實(shí)施例2與實(shí)施例1的區(qū)別在于,采用框架+插件的結(jié)構(gòu)開(kāi)發(fā)數(shù)據(jù)遷移系統(tǒng),作為系統(tǒng)的框架,插件式數(shù)據(jù)遷移平臺(tái)301相當(dāng)于一個(gè)數(shù)據(jù)中轉(zhuǎn)平臺(tái),而插件302則為訪問(wèn)不同類型的數(shù)據(jù)源(數(shù)據(jù)庫(kù)/文件系統(tǒng))提供實(shí)現(xiàn)。本實(shí)施例以插件的形式開(kāi)發(fā)每個(gè)數(shù)據(jù)源的訪問(wèn)功能,具有如下優(yōu)點(diǎn)1、用戶可以很方便地往插件式數(shù)據(jù)遷移平臺(tái)301增加新的插件,使插件式數(shù)據(jù)遷移平臺(tái)301支持新的數(shù)據(jù)庫(kù)或者文件系統(tǒng);為了訪問(wèn)一個(gè)新的數(shù)據(jù)源,現(xiàn)有技術(shù)需要大量的人力開(kāi)發(fā)和測(cè)試,才能開(kāi)發(fā)一套導(dǎo)入導(dǎo)出工具,而本申請(qǐng)的插件只需較小的工作量和開(kāi)發(fā)成本;2、插件式數(shù)據(jù)遷移平臺(tái)301通過(guò)封裝插件的控制邏輯,將能夠執(zhí)行數(shù)據(jù)遷移任務(wù)的插件組合在一起,能夠在受管理插件中建立其協(xié)作關(guān)系,進(jìn)而通過(guò)插件實(shí)現(xiàn)系統(tǒng)功能。關(guān)于插件管理插件管理是插件式數(shù)據(jù)遷移平臺(tái)301的核心功能,其主要用于根據(jù)插件的描述信息對(duì)插件進(jìn)行統(tǒng)一的管理。管理的主要內(nèi)容可以包括插件的裝載、插件運(yùn)行環(huán)境提供等。在具體實(shí)現(xiàn)中,用戶可以根據(jù)插件式數(shù)據(jù)遷移平臺(tái)301定義的接口,自行開(kāi)發(fā)插件。例如,插件可以實(shí)現(xiàn)為一個(gè)JAR(Java歸檔文件,JavaArchive)包,用戶將此JAR包放入插件式數(shù)據(jù)遷移平臺(tái)301定義的plugins(插件)目錄下,同時(shí)plugins,xml文件中進(jìn)行注冊(cè),就可以使用此插件了。為了說(shuō)明插件的裝載功能,在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述插件式數(shù)據(jù)遷移平臺(tái)301還可以包括插件存放模塊,用于存放插件的插件描述文件;插件注冊(cè)模塊,用于依據(jù)所述插件描述文件中存儲(chǔ)的裝載插件所需信息,對(duì)相應(yīng)的插件進(jìn)行注冊(cè),并存儲(chǔ)相應(yīng)的插件注冊(cè)信息;此時(shí),所述插件裝載模塊311,可以具體用于將所述配置文件中的數(shù)據(jù)讀取信息、數(shù)據(jù)寫(xiě)入信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件。所述裝載過(guò)程具體可以包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化。例如,所述插件描述文件中可以包括基本信息字段plugin、依賴插件信息字段required、功能定義信息字段define和功能實(shí)現(xiàn)信息字段implement等,其中,所述基本信息字段plugin存儲(chǔ)的信息可以包括插件標(biāo)識(shí)符。在具體實(shí)現(xiàn)中,所述插件標(biāo)識(shí)符可以用數(shù)據(jù)源類型和相應(yīng)的功能來(lái)表示,例如,插件標(biāo)識(shí)符A_0,A代表Oracle數(shù)據(jù)庫(kù),O代表讀取數(shù)據(jù),又如,插件標(biāo)識(shí)符F_l,F(xiàn)代表IDFS文件系統(tǒng),O代表與入數(shù)據(jù),等等。在實(shí)際中,所述插件的初始化可以進(jìn)一步包括讀入所述插件描述文件中的數(shù)據(jù)信息,將相應(yīng)插件和插件式數(shù)據(jù)遷移平臺(tái)301中其它部分連接在一起等等。本申請(qǐng)對(duì)具體的插件初始化和插件裝載方案不加以限制。為了說(shuō)明執(zhí)行引擎模塊312的功能,在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述插件的功能還可以包括讀取分解插件,用于在所述讀取插件321進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);此時(shí),所述執(zhí)行引擎模塊312,可以進(jìn)一步包括并發(fā)讀取環(huán)境提供子模塊,用于為所述讀取插件321提供多線程池的讀取運(yùn)行環(huán)境,由所述讀取插件321在所述多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取。同理,在本申請(qǐng)的另一種優(yōu)選實(shí)施例中,所述插件301還可以包括寫(xiě)入分解插件,用于在所述寫(xiě)入插件322將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);此時(shí),所述執(zhí)行引擎模塊312,可以進(jìn)一步包括并發(fā)寫(xiě)入環(huán)境提供子模塊,用于為所述寫(xiě)入插件322提供多線程池的寫(xiě)入運(yùn)行環(huán)境,由所述寫(xiě)入插件322在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)并發(fā)寫(xiě)入目標(biāo)地址。在本申請(qǐng)的再一種優(yōu)選實(shí)施例中,所述插件式數(shù)據(jù)遷移平臺(tái)301還可以具有監(jiān)控計(jì)數(shù)功能,相應(yīng)地,其還可以包括監(jiān)控計(jì)數(shù)模塊,用于在所述讀取插件321和/或數(shù)據(jù)交換緩沖插件322和/或?qū)懭氩寮?23的運(yùn)行過(guò)程中,監(jiān)控相應(yīng)的運(yùn)行參數(shù),所述運(yùn)行參數(shù)具體可以包括讀取和/或臨時(shí)存儲(chǔ)和/或?qū)懭霐?shù)據(jù)的行數(shù)和/或字節(jié)數(shù)。需要說(shuō)明的是,在具體實(shí)現(xiàn)中,還可以將讀取插件321中將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式的功能集成在專門(mén)的第一插件中,也可以將寫(xiě)入插件323中依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式的功能集成在專門(mén)的第二插件中;總之,本領(lǐng)域技術(shù)人員可以依據(jù)不同的功能分配開(kāi)發(fā)不同的插件,本申請(qǐng)對(duì)插件的功能分配和開(kāi)發(fā)不加以限制。另外,還可以在所述插件式數(shù)據(jù)遷移平臺(tái)301中設(shè)置異常日志模塊,用于平臺(tái)的異常處理和日志記錄。其中,所述異常處理可以包括異常對(duì)象的定義,也可以包括當(dāng)異常出現(xiàn)時(shí),根據(jù)實(shí)際情況封裝異常對(duì)象產(chǎn)生;所述日志記錄可以保存每個(gè)數(shù)據(jù)遷移任務(wù)的執(zhí)行記錄,例如,可以保存在平臺(tái)主目錄下的log文件夾下,日志文件可以數(shù)據(jù)遷移任務(wù)的xml配置文件名+"·"+時(shí)間戳+".log"為方式命名。對(duì)于系統(tǒng)實(shí)施例2而言,由于其與系統(tǒng)實(shí)施例1基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)系統(tǒng)實(shí)施例1的部分說(shuō)明即可。參照?qǐng)D4,其示出了本申請(qǐng)一種數(shù)據(jù)遷移方法實(shí)施例1的流程圖,具體可以包括步驟401、讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中可以包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;步驟402、依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取;步驟403、將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式,并寫(xiě)入數(shù)據(jù)交換緩沖模塊,其中,所述數(shù)據(jù)交換緩沖模塊可用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);步驟404、從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù);步驟405、依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式,并寫(xiě)入目標(biāo)地址。在本申請(qǐng)實(shí)施例中,優(yōu)選的是,所述數(shù)據(jù)讀取信息可以包括如下信息中的一種或多種源數(shù)據(jù)庫(kù)的IP地址、端口號(hào)、庫(kù)名、登錄用戶名、登錄密碼、數(shù)據(jù)庫(kù)表名、過(guò)濾條件;所述數(shù)據(jù)寫(xiě)入信息可以包括如下信息中的一種或多種數(shù)據(jù)寫(xiě)入路徑、數(shù)據(jù)目標(biāo)格式。在本申請(qǐng)實(shí)施例中,優(yōu)選的是,所述配置文件可以為可擴(kuò)展標(biāo)記語(yǔ)言文件,所述可擴(kuò)展標(biāo)記語(yǔ)言文件的命名規(guī)則可以為源表名_目的表名_源數(shù)據(jù)庫(kù)類型_目的數(shù)據(jù)庫(kù)類型·xml。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述方法還可以包括在進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);此時(shí),所述依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取的步驟可以為,在多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取在本申請(qǐng)的另一種優(yōu)選實(shí)施例中,所述方法還可以包括在所述寫(xiě)入模塊將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);相應(yīng)地,所述寫(xiě)入目標(biāo)地址的步驟為,在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址。在本申請(qǐng)實(shí)施例中,優(yōu)選的是,所述中間格式可以包括數(shù)組格式,或者Java中Map類格式。在本申請(qǐng)實(shí)施例中,優(yōu)選的是,所述數(shù)據(jù)交換緩沖模塊為基于雙緩沖隊(duì)列的內(nèi)存緩沖區(qū)。在本申請(qǐng)的再一種優(yōu)選實(shí)施例中,所述方法還可以包括在所述讀取模塊和/或數(shù)據(jù)交換緩沖模塊和/或?qū)懭肽K的運(yùn)行過(guò)程中,監(jiān)控相應(yīng)的運(yùn)行參數(shù),所述運(yùn)行參數(shù)可以包括讀取和/或臨時(shí)存儲(chǔ)和/或?qū)懭霐?shù)據(jù)的行數(shù)和/或字節(jié)數(shù)。參照?qǐng)D5,其示出了本申請(qǐng)一種數(shù)據(jù)遷移方法實(shí)施例2的流程圖,具體可以包括步驟501、依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件,并向所述讀取插件提供相應(yīng)的運(yùn)行環(huán)境,由所述讀取插件依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后寫(xiě)入數(shù)據(jù)交換緩沖插件,由所述數(shù)據(jù)交換緩沖插件臨時(shí)存儲(chǔ)讀取插件寫(xiě)入的中間格式的數(shù)據(jù);步驟502、依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,裝載相應(yīng)的寫(xiě)入插件,并向所述寫(xiě)入插件提供相應(yīng)的運(yùn)行環(huán)境,由所述寫(xiě)入插件從所述數(shù)據(jù)交換緩沖插件中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。本實(shí)施例與實(shí)施例1的區(qū)別在于,以插件作為訪問(wèn)不同類型的數(shù)據(jù)源(數(shù)據(jù)庫(kù)/文件系統(tǒng))提供實(shí)現(xiàn),也即以插件的形式開(kāi)發(fā)每個(gè)數(shù)據(jù)源的訪問(wèn)功能;因此,本實(shí)施例通過(guò)封裝插件的控制邏輯,將能夠執(zhí)行數(shù)據(jù)遷移任務(wù)的插件組合在一起,能夠在受管理插件中建立其協(xié)作關(guān)系,進(jìn)而通過(guò)插件實(shí)現(xiàn)系統(tǒng)功能。在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述方法還可以包括存放插件的插件描述文件;依據(jù)所述插件描述文件中存儲(chǔ)的裝載插件所需信息,對(duì)相應(yīng)的插件進(jìn)行注冊(cè),并存儲(chǔ)相應(yīng)的插件注冊(cè)信息;此時(shí),所述裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件的步驟,可以進(jìn)一步包括將所述配置文件中的數(shù)據(jù)讀取信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程可以包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化;所述裝載相應(yīng)的寫(xiě)入插件的步驟,可以進(jìn)一步包括將所述配置文件中的數(shù)據(jù)寫(xiě)入信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程可以包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化。為了說(shuō)明如何向所述讀取插件提供相應(yīng)的運(yùn)行環(huán)境,在本申請(qǐng)的一種優(yōu)選實(shí)施例中,所述插件還可以包括讀取分解插件,用于在所述讀取插件進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);此時(shí),所述向所述讀取插件提供相應(yīng)的運(yùn)行環(huán)境的步驟,可以包括為所述讀取插件提供多線程池的讀取運(yùn)行環(huán)境,由所述讀取插件在所述多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取。同理,在本申請(qǐng)的另一種優(yōu)選實(shí)施例中,所述插件還可以包括寫(xiě)入分解插件,用于在所述寫(xiě)入插件將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);此時(shí),所述向所述寫(xiě)入插件提供相應(yīng)的運(yùn)行環(huán)境的步驟,可以進(jìn)一步包括為所述寫(xiě)入插件提供多線程池的寫(xiě)入運(yùn)行環(huán)境,由所述寫(xiě)入插在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)并發(fā)寫(xiě)入目標(biāo)地址。對(duì)于方法實(shí)施例2而言,由于其與方法實(shí)施例1基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例1的部分說(shuō)明即可。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。以上對(duì)本申請(qǐng)所提供的一種數(shù)據(jù)遷移系統(tǒng)和方法,進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。權(quán)利要求1.一種數(shù)據(jù)遷移系統(tǒng),其特征在于,包括配置讀取模塊,用于讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;讀取模塊,用于依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后,寫(xiě)入數(shù)據(jù)交換緩沖模塊;數(shù)據(jù)交換緩沖模塊,用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù)'及寫(xiě)入模塊,用于從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。2.一種數(shù)據(jù)遷移方法,其特征在于,包括讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀??;將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式,并寫(xiě)入數(shù)據(jù)交換緩沖模塊,其中,所述數(shù)據(jù)交換緩沖模塊用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù);依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式,并寫(xiě)入目標(biāo)地址。3.如權(quán)利要求2所述的方法,其特征在于,還包括依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件,并向所述讀取插件提供相應(yīng)的運(yùn)行環(huán)境,由所述讀取插件依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后寫(xiě)入數(shù)據(jù)交換緩沖插件,由所述數(shù)據(jù)交換緩沖插件臨時(shí)存儲(chǔ)讀取插件寫(xiě)入的中間格式的數(shù)據(jù);依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息,裝載相應(yīng)的寫(xiě)入插件,并向所述寫(xiě)入插件提供相應(yīng)的運(yùn)行環(huán)境,由所述寫(xiě)入插件從所述數(shù)據(jù)交換緩沖插件中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。4.如權(quán)利要求2所述的方法,其特征在于,還包括在進(jìn)行數(shù)據(jù)的讀取前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)讀取子任務(wù);所述依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取的步驟為,在多線程池的讀取運(yùn)行環(huán)境下,進(jìn)行所述多個(gè)讀取子任務(wù)的讀取。5.如權(quán)利要求2所述的方法,其特征在于,還包括在所述寫(xiě)入模塊將目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址前,將一個(gè)數(shù)據(jù)遷移任務(wù)分解成多個(gè)寫(xiě)入子任務(wù);所述寫(xiě)入目標(biāo)地址的步驟為,在所述多線程池的寫(xiě)入運(yùn)行環(huán)境下,將與所述多個(gè)寫(xiě)入子任務(wù)相應(yīng)的目標(biāo)格式的數(shù)據(jù)寫(xiě)入目標(biāo)地址。6.如權(quán)利要求2所述的方法,其特征在于,所述數(shù)據(jù)交換緩沖模塊為基于雙緩沖隊(duì)列的內(nèi)存緩沖區(qū)。7.如權(quán)利要求2所述的方法,其特征在于,還包括在所述讀取模塊和/或數(shù)據(jù)交換緩沖模塊和/或?qū)懭肽K的運(yùn)行過(guò)程中,監(jiān)控相應(yīng)的運(yùn)行參數(shù),所述運(yùn)行參數(shù)包括讀取和/或臨時(shí)存儲(chǔ)和/或?qū)懭霐?shù)據(jù)的行數(shù)和/或字節(jié)數(shù)。8.如權(quán)利要求2或3所述的方法,其特征在于,所述數(shù)據(jù)讀取信息包括如下信息中的一種或多種源數(shù)據(jù)庫(kù)的IP地址、端口號(hào)、庫(kù)名、登錄用戶名、登錄密碼、數(shù)據(jù)庫(kù)表名、過(guò)濾條件;所述數(shù)據(jù)寫(xiě)入信息包括如下信息中的一種或多種數(shù)據(jù)寫(xiě)入路徑、數(shù)據(jù)目標(biāo)格式。9.如權(quán)利要求2或3所述的方法,其特征在于,所述配置文件為可擴(kuò)展標(biāo)記語(yǔ)言文件,所述可擴(kuò)展標(biāo)記語(yǔ)言文件的命名規(guī)則為源表名目的表名源數(shù)據(jù)庫(kù)類型目的數(shù)據(jù)庫(kù)類型·xml。10.如權(quán)利要求3所述的方法,其特征在于,還包括存放插件的插件描述文件;依據(jù)所述插件描述文件中存儲(chǔ)的裝載插件所需信息,對(duì)相應(yīng)的插件進(jìn)行注冊(cè),并存儲(chǔ)相應(yīng)的插件注冊(cè)信息;所述裝載相應(yīng)的讀取插件和數(shù)據(jù)交換緩沖插件的步驟,包括將所述配置文件中的數(shù)據(jù)讀取信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化;所述裝載相應(yīng)的寫(xiě)入插件的步驟,包括將所述配置文件中的數(shù)據(jù)寫(xiě)入信息,與所述插件注冊(cè)模塊中存儲(chǔ)的插件注冊(cè)信息進(jìn)行匹配,如果匹配成功,則裝載與所述插件注冊(cè)信息相應(yīng)的插件,所述裝載過(guò)程包括依據(jù)所述插件描述文件生成相應(yīng)的插件實(shí)例,并根據(jù)所述插件實(shí)例進(jìn)行插件的初始化。全文摘要本申請(qǐng)?zhí)峁┝艘环N數(shù)據(jù)遷移系統(tǒng)和方法,其中的系統(tǒng)具體包括配置讀取模塊,用于讀取數(shù)據(jù)遷移任務(wù)的配置文件,所述配置文件中包括有數(shù)據(jù)讀取信息和數(shù)據(jù)寫(xiě)入信息;讀取模塊,用于依據(jù)所述配置文件中的數(shù)據(jù)讀取信息,進(jìn)行數(shù)據(jù)的讀取,并在將讀取的數(shù)據(jù)轉(zhuǎn)換為中間格式后,寫(xiě)入數(shù)據(jù)交換緩沖模塊;數(shù)據(jù)交換緩沖模塊,用于臨時(shí)存儲(chǔ)寫(xiě)入的中間格式的數(shù)據(jù);及寫(xiě)入模塊,用于從所述數(shù)據(jù)交換緩沖模塊中讀取所述中間格式的數(shù)據(jù),并在依據(jù)所述配置文件中的數(shù)據(jù)寫(xiě)入信息將所述中間格式的數(shù)據(jù)轉(zhuǎn)換為目標(biāo)格式后,寫(xiě)入目標(biāo)地址。本申請(qǐng)能夠提高數(shù)據(jù)遷移的性能,降低數(shù)據(jù)遷移所花費(fèi)的運(yùn)維成本和開(kāi)發(fā)成本。文檔編號(hào)G06F17/30GK102999537SQ20111027878公開(kāi)日2013年3月27日申請(qǐng)日期2011年9月19日優(yōu)先權(quán)日2011年9月19日發(fā)明者王磊申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司