一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明實(shí)施例涉及數(shù)據(jù)庫(kù)技術(shù),尤其涉及一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法及裝置。
【背景技術(shù)】
[0002]隨著數(shù)據(jù)庫(kù)系統(tǒng)應(yīng)用的不斷增加和日益普及,多個(gè)數(shù)據(jù)庫(kù)之間的數(shù)據(jù)轉(zhuǎn)移變得越來越常見和重要。
[0003]目前,數(shù)據(jù)庫(kù)之間的數(shù)據(jù)結(jié)轉(zhuǎn)大致有三類方式法或技術(shù),分別為采用數(shù)據(jù)導(dǎo)入導(dǎo)出工具,基于數(shù)據(jù)訪問技術(shù)并采用SQL (Structured Query Language,結(jié)構(gòu)化查詢語言)編程實(shí)現(xiàn)數(shù)據(jù)結(jié)轉(zhuǎn),以及采用手工建庫(kù)重新輸入數(shù)據(jù)(待結(jié)轉(zhuǎn)數(shù)據(jù))的方式。
[0004]其中,第一種方式是可視化圖形工具,有對(duì)話框且?guī)驅(qū)В褂闷饋砗?jiǎn)單方便,但是針對(duì)數(shù)據(jù)量大,多種數(shù)據(jù)庫(kù)協(xié)同導(dǎo)入導(dǎo)出,便出現(xiàn)了很多瓶頸和性能問題,例如,在待結(jié)轉(zhuǎn)的數(shù)據(jù)量超過百萬行時(shí),利用該方式的數(shù)據(jù)結(jié)轉(zhuǎn)速度很慢,時(shí)間過長(zhǎng)甚至不能正常運(yùn)行。第二種方式是利用數(shù)據(jù)訪問技術(shù)(如開放數(shù)據(jù)庫(kù)互連技術(shù)以及Java數(shù)據(jù)庫(kù)連接技術(shù)等)分別訪問數(shù)據(jù)庫(kù)來連接源數(shù)據(jù)庫(kù)和目標(biāo)數(shù)據(jù)庫(kù),然后,讀取用戶選定的源數(shù)據(jù)庫(kù)中待結(jié)轉(zhuǎn)的數(shù)據(jù)表的架構(gòu)信息,根據(jù)該架構(gòu)信息在目標(biāo)數(shù)據(jù)庫(kù)中創(chuàng)建等價(jià)的數(shù)據(jù)表,最后,通過編寫程序代碼提取源數(shù)據(jù)表中的數(shù)據(jù),再采用SQL語句將源數(shù)據(jù)表中的數(shù)據(jù)逐行地插入到目的數(shù)據(jù)庫(kù)表。但是,在源數(shù)據(jù)表還存在與之相關(guān)聯(lián)的從表時(shí),這種方式便不再適用。第三種方式是在新系統(tǒng)中創(chuàng)建數(shù)據(jù)庫(kù),把原有系統(tǒng)的數(shù)據(jù)統(tǒng)一重新人工輸入到新系統(tǒng)中,很顯然該方式工作量大,效率低,同時(shí)出錯(cuò)率也很高。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法及裝置,以實(shí)現(xiàn)大量數(shù)據(jù)、多種類型的數(shù)據(jù)表在多種數(shù)據(jù)庫(kù)之間協(xié)同導(dǎo)入導(dǎo)出的目的,具有通用性強(qiáng)、以及執(zhí)行效率高的優(yōu)點(diǎn)。
[0006]第一方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法,包括:
[0007]根據(jù)預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),其中,所述中間表的主鍵值與源表的主鍵值相同;
[0008]根據(jù)所述源表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定結(jié)轉(zhuǎn)線程的數(shù)量,將所述結(jié)轉(zhuǎn)線程放入源表線程池,采用多線程并行處理的方式將所述源表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù);
[0009]根據(jù)用戶設(shè)置的源表與從表之間的關(guān)聯(lián)字段,確定與所述源表關(guān)聯(lián)的從表,根據(jù)所述從表的數(shù)量確定從表線程池的數(shù)量;
[0010]在所述從表的數(shù)量大于零時(shí),根據(jù)所述關(guān)聯(lián)字段從源數(shù)據(jù)庫(kù)中獲取與所述源表關(guān)聯(lián)的從表的數(shù)據(jù),根據(jù)各個(gè)從表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定從表結(jié)轉(zhuǎn)線程的數(shù)量,將所述從表結(jié)轉(zhuǎn)線程放入從表線程池,采用多線程并行處理的方式將所述從表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù)。
[0011]第二方面,本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)裝置,該跨庫(kù)結(jié)轉(zhuǎn)裝置包括:
[0012]數(shù)據(jù)獲取單元,用于根據(jù)預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),其中,所述中間表的主鍵值與源表的主鍵值相同;
[0013]源表結(jié)轉(zhuǎn)單元,用于根據(jù)所述源表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定結(jié)轉(zhuǎn)線程的數(shù)量,將所述結(jié)轉(zhuǎn)線程放入源表線程池,采用多線程并行處理的方式將所述源表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù);
[0014]從表確定單元,用于根據(jù)用戶設(shè)置的源表與從表之間的關(guān)聯(lián)字段,確定與所述源表關(guān)聯(lián)的從表,根據(jù)所述從表的數(shù)量確定從表線程池的數(shù)量;
[0015]從表結(jié)轉(zhuǎn)單元,用于在所述從表的數(shù)量大于零時(shí),根據(jù)所述關(guān)聯(lián)字段從源數(shù)據(jù)庫(kù)中獲取與所述源表關(guān)聯(lián)的從表的數(shù)據(jù),根據(jù)各個(gè)從表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定從表結(jié)轉(zhuǎn)線程的數(shù)量,將所述從表結(jié)轉(zhuǎn)線程放入從表線程池,采用多線程并行處理的方式將所述從表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù)。
[0016]本發(fā)明通過預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),根據(jù)源表的數(shù)據(jù)記錄數(shù)與用戶預(yù)先設(shè)置的結(jié)轉(zhuǎn)規(guī)則確定結(jié)轉(zhuǎn)線程,并根據(jù)用戶預(yù)先設(shè)置的結(jié)轉(zhuǎn)規(guī)則確定與源表關(guān)聯(lián)的從表,再根據(jù)從表的數(shù)據(jù)記錄數(shù)與用戶預(yù)先設(shè)置的結(jié)轉(zhuǎn)規(guī)則確定從表結(jié)轉(zhuǎn)線程,分別通過結(jié)轉(zhuǎn)線程以及從表結(jié)轉(zhuǎn)線程將源數(shù)據(jù)庫(kù)中的待結(jié)轉(zhuǎn)數(shù)據(jù)結(jié)轉(zhuǎn)到目標(biāo)數(shù)據(jù)庫(kù)。本發(fā)明解決現(xiàn)有的數(shù)據(jù)結(jié)轉(zhuǎn)方式無法滿足大量數(shù)據(jù)、多種類型的數(shù)據(jù)表在多種數(shù)據(jù)庫(kù)之間協(xié)同導(dǎo)入導(dǎo)出要求的問題,實(shí)現(xiàn)根據(jù)用戶自定義的結(jié)轉(zhuǎn)規(guī)則在多種數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)結(jié)轉(zhuǎn),具有通用性強(qiáng)、以及執(zhí)行效率高的優(yōu)點(diǎn)。
【附圖說明】
[0017]圖1是本發(fā)明實(shí)施例一中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法的流程圖;
[0018]圖2a是本發(fā)明實(shí)施例二中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法的流程圖;
[0019]圖2b是本發(fā)明實(shí)施例二中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法的整體框架圖;
[0020]圖2c是本發(fā)明實(shí)施例二中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法的數(shù)據(jù)結(jié)轉(zhuǎn)框圖;
[0021]圖3是本發(fā)明實(shí)施例三中的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0022]下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明。可以理解的是,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
[0023]實(shí)施例一
[0024]圖1為本發(fā)明實(shí)施例一中提供的一種數(shù)據(jù)庫(kù)的跨庫(kù)結(jié)轉(zhuǎn)方法的流程圖,本實(shí)施例可適用于包含主表和從表的復(fù)雜數(shù)據(jù)表的數(shù)據(jù)庫(kù)之間的數(shù)據(jù)迀移情況,該方法可以由跨庫(kù)結(jié)轉(zhuǎn)裝置來執(zhí)行,該裝置被配置于服務(wù)器內(nèi),可通過硬件和/或軟件的方式實(shí)現(xiàn)。該裝置具體包括如下步驟:
[0025]步驟110、根據(jù)預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù)。
[0026]其中,所述中間表為主鍵值與源表(主表)的主鍵值相同,且記錄源表的數(shù)據(jù)的結(jié)轉(zhuǎn)狀態(tài)的數(shù)據(jù)表。例如,該中間表可以是包括與所述源表的主鍵值對(duì)應(yīng)的源表的數(shù)據(jù)以及分別與所述源表的數(shù)據(jù)對(duì)應(yīng)的結(jié)轉(zhuǎn)狀態(tài)的標(biāo)識(shí)的數(shù)據(jù)表。由于所述中間表的主鍵值與源表的主鍵值相同,則根據(jù)所述主鍵值查找源數(shù)據(jù)庫(kù)以獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù)。源表是在數(shù)據(jù)庫(kù)中建立的、包含主鍵的數(shù)據(jù)表格,其中,主鍵用于與從表相關(guān)聯(lián),并且作為源表中的唯一性標(biāo)識(shí)。
[0027]根據(jù)預(yù)先創(chuàng)建的中間表從源數(shù)據(jù)庫(kù)中獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),可以是根據(jù)開始行號(hào)查詢所述中間表的主鍵值對(duì)應(yīng)的源表的數(shù)據(jù)的結(jié)轉(zhuǎn)狀態(tài),以確定待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),其中,所述開始行號(hào)為結(jié)轉(zhuǎn)線程的數(shù)量與單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)的乘積再加1,結(jié)轉(zhuǎn)線程的數(shù)量的取值為自然數(shù),單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)根據(jù)用戶的設(shè)置來確定,結(jié)轉(zhuǎn)狀態(tài)包括未結(jié)轉(zhuǎn)的狀態(tài)以及結(jié)轉(zhuǎn)未成功的狀態(tài);根據(jù)所述待結(jié)轉(zhuǎn)的源表的數(shù)據(jù)對(duì)應(yīng)的主鍵值查詢?cè)磾?shù)據(jù)庫(kù),以獲取待結(jié)轉(zhuǎn)的源表的數(shù)據(jù),相應(yīng)的,待結(jié)轉(zhuǎn)的源表的數(shù)據(jù)包括未結(jié)轉(zhuǎn)的數(shù)據(jù)以及結(jié)轉(zhuǎn)未成功的數(shù)據(jù)。
[0028]步驟120、根據(jù)所述源表的數(shù)據(jù)記錄數(shù)以及用戶設(shè)置的單次結(jié)轉(zhuǎn)的數(shù)據(jù)記錄數(shù)確定結(jié)轉(zhuǎn)線程的數(shù)量,將所述結(jié)轉(zhuǎn)線程放入源表線程池,采用多線程并行處理的方式將所述源表的數(shù)據(jù)結(jié)轉(zhuǎn)至目標(biāo)數(shù)據(jù)庫(kù)。
[0029]其中,結(jié)轉(zhuǎn)線程為用于處理源表的數(shù)據(jù)的迀移的線程。結(jié)轉(zhuǎn)源表的數(shù)據(jù)所需