本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制方法及系統(tǒng)。
背景技術(shù):
支付清算等金融系統(tǒng)是一個(gè)復(fù)雜、包括異構(gòu)數(shù)據(jù)庫的業(yè)務(wù)系統(tǒng),經(jīng)常有從一個(gè)數(shù)據(jù)庫批量轉(zhuǎn)移一些表的數(shù)據(jù)到另一個(gè)或多個(gè)數(shù)據(jù)庫的需求,針對這樣的數(shù)據(jù)轉(zhuǎn)移需求,一般都是開發(fā)一個(gè)應(yīng)用模塊實(shí)現(xiàn),基于系統(tǒng)的開發(fā)環(huán)境和開發(fā)語言,如基于java的系統(tǒng),采用jdbc API訪問數(shù)據(jù)庫;如基于C/C++的系統(tǒng),采用各數(shù)據(jù)庫引擎提供的原生API訪問數(shù)據(jù)庫。每出現(xiàn)新的數(shù)據(jù)轉(zhuǎn)移需求,就需要增加一個(gè)這樣的應(yīng)用模塊。這種模式,存在重復(fù)勞動(dòng),開發(fā)效率低下,代碼質(zhì)量參差不齊的問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種基于不同數(shù)據(jù)的數(shù)據(jù)復(fù)制方法及系統(tǒng),用以解決不同數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)復(fù)制時(shí)存在工作效率低的問題。
本發(fā)明方法包括一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制方法,該方法包括:
接收用戶的配置指令,生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的配置文件,其中,所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫為單數(shù)據(jù)庫或者為分布式數(shù)據(jù)庫,所述配置文件至少包括所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫信息,以及篩選條件;
解析所述配置文件,根據(jù)對所述篩選條件的解析結(jié)果,利用目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令;
利用所述數(shù)據(jù)庫查詢指令從所述源數(shù)據(jù)庫中讀取所述目標(biāo)數(shù)據(jù),并將所述目標(biāo)數(shù)據(jù)復(fù)制到所述目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)為從所述源數(shù)據(jù)庫中篩選出的符合所述篩選條件的原始數(shù)據(jù)集合。
基于同樣的發(fā)明構(gòu)思,本發(fā)明實(shí)施例進(jìn)一步地提供一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制系統(tǒng),該系統(tǒng)包括:
收發(fā)單元,用于接收用戶的配置指令;
生成單元,用于生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的配置文件,其中,所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫為單數(shù)據(jù)庫或者為分布式數(shù)據(jù)庫,所述配置文件至少包括所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫信息,以及篩選條件;
解析單元,用于解析所述配置文件;
所述生成單元,還用于根據(jù)對所述篩選條件的解析結(jié)果,利用目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令;
復(fù)制單元,用于利用所述數(shù)據(jù)庫查詢指令從所述源數(shù)據(jù)庫中讀取所述目標(biāo)數(shù)據(jù),并將所述目標(biāo)數(shù)據(jù)復(fù)制到所述目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)為從所述源數(shù)據(jù)庫中篩選出的符合所述篩選條件的原始數(shù)據(jù)集合。
本發(fā)明實(shí)施例通過提供一種數(shù)據(jù)復(fù)制系統(tǒng),用戶可以在這個(gè)系統(tǒng)上配置自身的數(shù)據(jù)拷貝需求,然后系統(tǒng)就會自動(dòng)生成配置文件,進(jìn)而觸發(fā)后續(xù)的數(shù)據(jù)復(fù)制過程,具體地,數(shù)據(jù)復(fù)制系統(tǒng)解析配置文件,可以根據(jù)解析結(jié)果找到源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫,然后利用統(tǒng)一的目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令,從員數(shù)據(jù)庫中獲取目標(biāo)數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫中,可見,這一方法因?yàn)樘峁┑慕y(tǒng)一的數(shù)據(jù)庫開發(fā)語言,所以可以適用于各種引擎的數(shù)據(jù)庫,而且數(shù)據(jù)復(fù)制系統(tǒng)可以適用于源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫是單庫或者分布式數(shù)據(jù)庫的各種場景,如一對一,一對多、多對一的場景,因此,很好的滿足了個(gè)性化定制需求,具有高可用性。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1a~圖1d為本發(fā)明實(shí)施例提供的數(shù)據(jù)復(fù)制場景示意圖;
圖2為本發(fā)明實(shí)施例提供的一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制方法流程示意圖;
圖3為本發(fā)明實(shí)施例提供的數(shù)據(jù)庫的數(shù)據(jù)復(fù)制方法的流程示意圖;
圖4為本發(fā)明實(shí)施例提供的數(shù)據(jù)庫的多線程復(fù)制方法的實(shí)現(xiàn)示意圖;
圖5為本發(fā)明實(shí)施例提供的一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制系統(tǒng)架構(gòu)示意圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對本發(fā)明作進(jìn)一步地詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部份實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
需要說明的是,本發(fā)明實(shí)施例中的源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫可以是單庫,也可以是目標(biāo)數(shù)據(jù)庫,所以本發(fā)明實(shí)施例提供的數(shù)據(jù)復(fù)制方法可以適用于如下幾種場景,即一對一、多對一、一對多、多對多等場景,分別如圖1a~圖1d所示,其中,圖1a表示源庫為單庫,目標(biāo)庫是單庫的情形;圖1b表示源庫為單庫,目標(biāo)庫是由三個(gè)數(shù)據(jù)庫組成的分布式數(shù)據(jù)庫的情形,其中三個(gè)數(shù)據(jù)庫可以是不同類型的數(shù)據(jù)庫;圖1c表示源庫配置了三個(gè)數(shù)據(jù)庫的情形,其中,三個(gè)數(shù)據(jù)庫的類型可以是不同的;圖1d表示源庫配置了三個(gè)數(shù)據(jù)庫,目標(biāo)庫也配置了三個(gè)數(shù)據(jù)庫的情形,分布式數(shù)據(jù)庫的配置主要是在配置文件XML文件中由用戶配置得到。
基于如上的應(yīng)用場景,本發(fā)明實(shí)施例提供一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制方法流程示意圖,參見圖2所示,具體地實(shí)現(xiàn)方法包括:
步驟S101,接收用戶的配置指令,生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的配置文件,其中,所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫為單數(shù)據(jù)庫或者為分布式數(shù)據(jù)庫,所述配置文件至少包括所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫信息,以及篩選條件。
步驟S102,解析所述配置文件,根據(jù)對所述篩選條件的解析結(jié)果,利用目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令。
步驟S103,利用所述數(shù)據(jù)庫查詢指令從所述源數(shù)據(jù)庫中讀取所述目標(biāo)數(shù)據(jù),并將所述目標(biāo)數(shù)據(jù)復(fù)制到所述目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)為從所述源數(shù)據(jù)庫中篩選出的符合所述篩選條件的原始數(shù)據(jù)集合。
需要說明的是,為了適應(yīng)不同數(shù)據(jù)庫之間的數(shù)據(jù)轉(zhuǎn)移,以及擴(kuò)展性考慮,必須設(shè)計(jì)一致的API接口訪問不同的數(shù)據(jù)庫,將底層的數(shù)據(jù)庫引擎差異隱藏。本發(fā)明實(shí)施例基于C++開發(fā),C++提供了良好的面相對象的編程機(jī)制,通過良好的設(shè)計(jì),使用者以一致的調(diào)用接口訪問數(shù)據(jù)庫,抽象的統(tǒng)一數(shù)據(jù)庫訪問接口的主要的接口和類介紹如下:
上述方法一般由進(jìn)行數(shù)據(jù)復(fù)制的應(yīng)用執(zhí)行,在上述步驟中,配置文件一般指的是XML配置文件,主要是用戶根據(jù)自身的需求在該應(yīng)用上進(jìn)行配置,然后該應(yīng)用接收用戶在圖形交互界面工具上通過拖、拉、拽、選中的操作方式生成配置指令;根據(jù)所述配置指令生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的XML配置文件。其中,XML配置文件是本發(fā)明實(shí)施例中的核心配置文件,它定義了數(shù)據(jù)復(fù)制任務(wù)的一切規(guī)則和需求。該XML配置文件包括如下幾個(gè)組成部分:1、源端數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫的相關(guān)信息,2,目標(biāo)數(shù)據(jù)的復(fù)制規(guī)則,3、篩選目標(biāo)數(shù)據(jù)的篩選條件,具體如下:
其中,第一部分源端數(shù)據(jù)庫的信息,包括如下內(nèi)容:(1)轉(zhuǎn)移模式(mode):源端數(shù)據(jù)庫是通常的單庫(normal)還是分布式數(shù)據(jù)庫(blw);(2)數(shù)據(jù)庫類型(engine_type):如MYSQL DB2等;(3)數(shù)據(jù)庫標(biāo)識(id):源端數(shù)據(jù)庫名(4)數(shù)據(jù)庫地址(ip):源端數(shù)據(jù)庫所在的ip地址;(5)數(shù)據(jù)庫端口(port):源端數(shù)據(jù)庫所在的端口號。用戶配置生成的XML配置文件主要是以如下形式表示:
另外,其余部分如數(shù)據(jù)復(fù)制規(guī)則和篩選條件中具體包含如下內(nèi)容:(1)轉(zhuǎn)移模式(mode):目標(biāo)端數(shù)據(jù)庫是通常的單庫(normal)還是分布式數(shù)據(jù)庫(blw)。(2)轉(zhuǎn)移規(guī)則標(biāo)識(id):用于標(biāo)識轉(zhuǎn)移規(guī)則。(3)數(shù)據(jù)庫類型(engine_type):如MYSQL DB2等。(4)插入模式(insert_ode>:插入目標(biāo)數(shù)據(jù)庫時(shí),如遇主鍵沖突,怎么處理,ERROR表示程序報(bào)錯(cuò)退出,IGNORE表示忽略該條記錄,REPLACE表示替換原記錄。(4)提交筆數(shù)(commit_count):目標(biāo)數(shù)據(jù)庫插入多少筆時(shí)提交。(6)源表字段(src_fields):表示哪些字段從源表讀取。(7)目標(biāo)表字段(dst_fields):表示插入到目標(biāo)表的哪些字段。(8)路由方式(type):表示根據(jù)什么方式確定路由,0標(biāo)識根據(jù)條件表達(dá)式求值的真?zhèn)芜M(jìn)行路由,1表示根據(jù)腳本函數(shù)計(jì)算路由目標(biāo)數(shù)據(jù)庫的地址、端口、用戶名等信息。
以下給出一個(gè)示例來說明配置文件中對應(yīng)上述配置信息的表示形式:
當(dāng)用戶完成配置生成上述配置文件之后,應(yīng)用就開始執(zhí)行數(shù)據(jù)復(fù)制的過程,數(shù)據(jù)復(fù)制過程是本發(fā)明實(shí)施例中的重要組成部分,具體地,針對所述目標(biāo)數(shù)據(jù)中的一個(gè)原始數(shù)據(jù)對象,確定所述配置文件的解析結(jié)果中的關(guān)于所述原始數(shù)據(jù)對象的數(shù)據(jù)路由信息,所述數(shù)據(jù)路由信息包含所述原始數(shù)據(jù)對象待插入的目標(biāo)數(shù)據(jù)庫的信息和所述目標(biāo)數(shù)據(jù)庫的位置標(biāo)識;
根據(jù)所述數(shù)據(jù)路由信息,對所述目標(biāo)數(shù)據(jù)庫進(jìn)行過濾,確定出需要插入所述原始數(shù)據(jù)對象的第一目標(biāo)數(shù)據(jù)庫集合;
根據(jù)所述數(shù)據(jù)路由信息中的所述目標(biāo)數(shù)據(jù)庫的位置標(biāo)識,將所述原始數(shù)據(jù)對象插入到所述第一目標(biāo)數(shù)據(jù)庫集合中每個(gè)目標(biāo)數(shù)據(jù)庫所述位置標(biāo)識對應(yīng)的位置。
因?yàn)楸景l(fā)明實(shí)施例中支持目標(biāo)數(shù)據(jù)庫可以配置為一個(gè)或多個(gè)數(shù)據(jù)庫,并且用戶配置在什么條件下插入哪個(gè)目標(biāo)數(shù)據(jù)庫就構(gòu)成數(shù)據(jù)路由。其中,數(shù)據(jù)路由支持以表達(dá)式的形式或者lua腳本的形式表示。
類型一,以表達(dá)式的形式設(shè)置路由
通過表達(dá)式設(shè)置路由需要在XML文件配置,以下是一個(gè)示例,該示例表明當(dāng)記錄的id字段的取值小于10時(shí),該記錄插入到以dest1標(biāo)識的目標(biāo)數(shù)據(jù)庫,目標(biāo)表為tbl_test_new1;當(dāng)記錄的id字段的取值大于10時(shí),該記錄插入到以dest2標(biāo)識的目標(biāo)數(shù)據(jù)庫,目標(biāo)表為tbl_test_new2;具體如下:
類型二,Lua腳本設(shè)置路由
通過在XML文件中指定lua腳本,然后在lua腳本編寫路由控制規(guī)則,以下是一個(gè)示例,該示例起到的作用與上一個(gè)示例的作用是一樣的,都是將當(dāng)記錄的id字段的取值小于10時(shí),該記錄插入到以dest1標(biāo)識的目標(biāo)數(shù)據(jù)庫,目標(biāo)表為tbl_test_new1;當(dāng)記錄的id字段的取值大于10時(shí),該記錄插入到以dest2標(biāo)識的目標(biāo)數(shù)據(jù)庫,目標(biāo)表為tbl_test_new2,具體如下:
進(jìn)一步地,還可以利用表達(dá)式或者lua腳本設(shè)置過濾條件,根據(jù)所述數(shù)據(jù)路由信息,對所述目標(biāo)數(shù)據(jù)庫進(jìn)行過濾,確定出需要插入所述原始數(shù)據(jù)對象的第一目標(biāo)數(shù)據(jù)庫集合,比如,以表達(dá)式的形式過濾,以下展示了一個(gè)示例,示例中表示僅當(dāng)源數(shù)據(jù)庫記錄的id字段小于6時(shí),該記錄才會被插入目標(biāo)數(shù)據(jù)庫,否則不插入。
另外,下面的示例展示了通過lua腳本設(shè)置過濾,其效果與上述表達(dá)式過濾的效果類似。
優(yōu)選地,當(dāng)用戶完成配置生成上述配置文件之后,應(yīng)用就開始執(zhí)行數(shù)據(jù)復(fù)制的過程,在執(zhí)行數(shù)據(jù)復(fù)制之前,先對配置文件進(jìn)行解析,根據(jù)所述配置文件的解析結(jié)果,確定所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的表結(jié)構(gòu)是否相同;
當(dāng)所述目標(biāo)數(shù)據(jù)庫與所述源數(shù)據(jù)庫的表結(jié)構(gòu)不相同時(shí),對所述源數(shù)據(jù)庫中的目標(biāo)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,將轉(zhuǎn)換后的目標(biāo)數(shù)據(jù)插入到所述目標(biāo)數(shù)據(jù)庫。
通常,數(shù)據(jù)復(fù)制時(shí)的源表字段和目標(biāo)表字段的定義是相同或相似的,但也會存在目標(biāo)表的字段不能直接從源表的某個(gè)字段直接獲取,需要做一定的形變。比如從源表的某個(gè)字段截取,或者由源表的某幾個(gè)字段組合而成。
以下XML片段定義了源表數(shù)據(jù)字段和目標(biāo)表數(shù)據(jù)字段的對照和形變關(guān)系。以下內(nèi)容配置了字段插入規(guī)則,源表的id字段插入到目標(biāo)表的id字段,源表的name字段插入到目標(biāo)表的name字段,源表的up_date字段插入到目標(biāo)表的up_date字段,源表resv的前15個(gè)字節(jié)的內(nèi)容插入到目標(biāo)表的mchnt_cd字段,具體如下:
進(jìn)一步地,還包括:統(tǒng)計(jì)從所述源數(shù)據(jù)庫中所獲取的原始數(shù)據(jù)對象的第一記錄條數(shù),并統(tǒng)計(jì)向所述目標(biāo)數(shù)據(jù)庫所寫入的數(shù)據(jù)對象的第二記錄條數(shù),并在所述第二記錄條數(shù)與所述第一記錄條數(shù)不相等時(shí)報(bào)錯(cuò)。
也就是說,每次數(shù)據(jù)復(fù)制完成之后都會對復(fù)制的結(jié)果進(jìn)行校對,避免數(shù)據(jù)復(fù)制時(shí)發(fā)生丟失的問題,當(dāng)檢測發(fā)現(xiàn)數(shù)據(jù)復(fù)制的記錄條數(shù)不等,則說明,該提醒該次數(shù)據(jù)復(fù)制發(fā)生錯(cuò)誤,用戶收到報(bào)錯(cuò)通知后,可以重新進(jìn)行數(shù)據(jù)復(fù)制。
為了更加系統(tǒng)地描述上述數(shù)據(jù)復(fù)制過程,本發(fā)明實(shí)施例進(jìn)一步地以圖3所示流程圖進(jìn)行詳細(xì)闡述,具體步驟如下:
步驟201,當(dāng)用戶完成配置之后,獲取生成的XML配置文件,并對其進(jìn)行解析。
步驟202,根據(jù)XML配置文件的解析結(jié)果,查找到待復(fù)制的目標(biāo)數(shù)據(jù)庫,并獲取到源數(shù)據(jù)庫的信息和目標(biāo)數(shù)據(jù)庫的信息,以及篩選條件和源數(shù)據(jù)庫的表信息,以及目標(biāo)數(shù)據(jù)庫的表信息。
步驟203,根據(jù)XML配置文件中的篩選條件,用統(tǒng)一的數(shù)據(jù)庫訪問接口生成數(shù)據(jù)查詢指令,如SELECT語句。
步驟204,執(zhí)行數(shù)據(jù)查詢指令依次從源數(shù)據(jù)庫中獲取每一個(gè)目標(biāo)數(shù)據(jù);
步驟205,遍歷所有的目標(biāo)數(shù)據(jù)庫,執(zhí)行過濾函數(shù)找到條件滿足的待復(fù)制的目標(biāo)數(shù)據(jù)庫。
步驟206,判斷該條數(shù)據(jù)是否需要形變處理,若需要,則執(zhí)行步驟207,否則執(zhí)行步驟208;
步驟207,對該條數(shù)據(jù)按照映射函數(shù)或者形變函數(shù)進(jìn)行形變處理,得到形變后的數(shù)據(jù)。
步驟208,將形變后的目標(biāo)數(shù)據(jù)或者該目標(biāo)數(shù)據(jù)插入到待復(fù)制的目標(biāo)數(shù)據(jù)庫,然后返回至步驟204執(zhí)行下一個(gè)目標(biāo)數(shù)據(jù)的復(fù)制過程。
考慮到當(dāng)多對多場景數(shù)據(jù)復(fù)制系統(tǒng)的壓力較大,因此可以每個(gè)源數(shù)據(jù)庫對應(yīng)一個(gè)線程,執(zhí)行多線程并行處理地過程,這樣可以提高數(shù)據(jù)復(fù)制的效率,如圖4所示,源數(shù)據(jù)庫1至源數(shù)據(jù)庫N各對應(yīng)數(shù)據(jù)復(fù)制系統(tǒng)中的一個(gè)線程,例如,線程1執(zhí)行將源數(shù)據(jù)庫1中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫1至目標(biāo)數(shù)據(jù)庫N的過程,依次類推,各個(gè)線程均執(zhí)行完成之后,就完成了源數(shù)據(jù)庫中的目標(biāo)數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的過程,可見,本發(fā)明實(shí)施例提供的數(shù)據(jù)復(fù)制系統(tǒng)能橫向擴(kuò)展進(jìn)行多機(jī)部署,有較高的性能,本發(fā)明實(shí)施例實(shí)現(xiàn)了多機(jī)部署、運(yùn)行,在每臺機(jī)器上又可以多進(jìn)程方式執(zhí)行,具有較高的性能。
基于相同的技術(shù)構(gòu)思,本發(fā)明實(shí)施例還提供一種基于不同數(shù)據(jù)庫的數(shù)據(jù)復(fù)制系統(tǒng),該系統(tǒng)可執(zhí)行上述方法實(shí)施例,該系統(tǒng)可以單獨(dú)集成在一個(gè)服務(wù)器上,可以集成在多個(gè)服務(wù)器上。本發(fā)明實(shí)施例提供的數(shù)據(jù)復(fù)制系統(tǒng)如圖5所示,包括:收發(fā)單元401、生成單元402、解析單元403、復(fù)制單元404,其中:
收發(fā)單元401,用于接收用戶的配置指令;
生成單元402,用于生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的配置文件,其中,所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫為單數(shù)據(jù)庫或者為分布式數(shù)據(jù)庫,所述配置文件至少包括所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的數(shù)據(jù)庫信息,以及篩選條件;
解析單元403,用于解析所述配置文件;
所述生成單元402,還用于根據(jù)對所述篩選條件的解析結(jié)果,利用目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令;
復(fù)制單元404,用于利用所述數(shù)據(jù)庫查詢指令從所述源數(shù)據(jù)庫中讀取所述目標(biāo)數(shù)據(jù),并將所述目標(biāo)數(shù)據(jù)復(fù)制到所述目標(biāo)數(shù)據(jù)庫,所述目標(biāo)數(shù)據(jù)為從所述源數(shù)據(jù)庫中篩選出的符合所述篩選條件的原始數(shù)據(jù)集合。
進(jìn)一步地,所述復(fù)制單元404具體用于:
針對所述目標(biāo)數(shù)據(jù)中的一個(gè)原始數(shù)據(jù)對象,確定所述配置文件的解析結(jié)果中的關(guān)于所述原始數(shù)據(jù)對象的數(shù)據(jù)路由信息,所述數(shù)據(jù)路由信息包含所述原始數(shù)據(jù)對象待插入的目標(biāo)數(shù)據(jù)庫的信息和所述目標(biāo)數(shù)據(jù)庫的位置標(biāo)識;
根據(jù)所述數(shù)據(jù)路由信息,對所述目標(biāo)數(shù)據(jù)庫進(jìn)行過濾,確定出需要插入所述原始數(shù)據(jù)對象的第一目標(biāo)數(shù)據(jù)庫集合;
根據(jù)所述數(shù)據(jù)路由信息中的所述目標(biāo)數(shù)據(jù)庫的位置標(biāo)識,將所述原始數(shù)據(jù)對象插入到所述第一目標(biāo)數(shù)據(jù)庫集合中每個(gè)目標(biāo)數(shù)據(jù)庫所述位置標(biāo)識對應(yīng)的位置。
進(jìn)一步地,所述收發(fā)單元401,具體用于接收用戶在圖形交互界面工具上通過拖、拉、拽、選中的操作方式生成配置指令;
所述生成單元402,具體用于根據(jù)所述配置指令生成關(guān)于將源數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫的配置文件。
進(jìn)一步地,所述復(fù)制單元404還用于:根據(jù)所述配置文件的解析結(jié)果,確定所述源數(shù)據(jù)庫和所述目標(biāo)數(shù)據(jù)庫的表結(jié)構(gòu)是否相同;當(dāng)所述目標(biāo)數(shù)據(jù)庫與所述源數(shù)據(jù)庫的表結(jié)構(gòu)不相同時(shí),對所述源數(shù)據(jù)庫中的目標(biāo)數(shù)據(jù)進(jìn)行轉(zhuǎn)換,將轉(zhuǎn)換后的目標(biāo)數(shù)據(jù)插入到所述目標(biāo)數(shù)據(jù)庫。
進(jìn)一步地,該系統(tǒng)還包括:校對單元405,用于統(tǒng)計(jì)從所述源數(shù)據(jù)庫中所獲取的原始數(shù)據(jù)對象的第一記錄條數(shù),并統(tǒng)計(jì)向所述目標(biāo)數(shù)據(jù)庫所寫入的數(shù)據(jù)對象的第二記錄條數(shù),并在所述第二記錄條數(shù)與所述第一記錄條數(shù)不相等時(shí)報(bào)錯(cuò)。
綜上所述,本發(fā)明實(shí)施例通過提供一種數(shù)據(jù)復(fù)制系統(tǒng),用戶可以在這個(gè)系統(tǒng)上配置自身的數(shù)據(jù)拷貝需求,然后系統(tǒng)就會自動(dòng)生成配置文件,進(jìn)而觸發(fā)后續(xù)的數(shù)據(jù)復(fù)制過程,具體地,數(shù)據(jù)復(fù)制系統(tǒng)解析配置文件,可以根據(jù)解析結(jié)果找到源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫,然后利用統(tǒng)一的目標(biāo)開發(fā)語言生成數(shù)據(jù)庫查詢指令,從員數(shù)據(jù)庫中獲取目標(biāo)數(shù)據(jù)復(fù)制到目標(biāo)數(shù)據(jù)庫中,可見,這一方法因?yàn)樘峁┑慕y(tǒng)一的數(shù)據(jù)庫開發(fā)語言,所以可以適用于各種引擎的數(shù)據(jù)庫,而且數(shù)據(jù)復(fù)制系統(tǒng)可以適用于源數(shù)據(jù)庫和目標(biāo)數(shù)據(jù)庫是單庫或者分布式數(shù)據(jù)庫的各種場景,如一對一,一對多、多對一的場景,因此,很好的滿足了個(gè)性化定制需求,具有高可用性。
本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲器中,使得存儲在該計(jì)算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。