本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理方法及裝置。
背景技術(shù):
隨著業(yè)務(wù)的發(fā)展以及數(shù)據(jù)量的逐年增長,出于技術(shù)架構(gòu)優(yōu)化或公司戰(zhàn)略的決策,數(shù)據(jù)存儲(chǔ)的策略往往會(huì)發(fā)生變更。例如,基于公司去oracle存儲(chǔ)戰(zhàn)略決策,需要更換存儲(chǔ)數(shù)據(jù)庫的類型,將原先在oracle數(shù)據(jù)庫的數(shù)據(jù)庫表中存儲(chǔ)的數(shù)據(jù)遷移至mysql數(shù)據(jù)庫的數(shù)據(jù)庫表中。
其中,在開始將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移時(shí),就會(huì)將存儲(chǔ)策略和獲取策略全部遷移至目標(biāo)數(shù)據(jù)庫表。這樣,如果接收到攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,則會(huì)將待存儲(chǔ)的數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中;如果接收到攜帶有數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求,則會(huì)從目標(biāo)數(shù)據(jù)庫表中獲取該數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù)。
然而,在將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移的過程中,由于還未將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表中,即,此時(shí)目標(biāo)數(shù)據(jù)庫表中并未存儲(chǔ)源數(shù)據(jù)庫表中的全部源數(shù)據(jù),而僅僅存儲(chǔ)了源數(shù)據(jù)庫表中的一部分源數(shù)據(jù),如果該獲取請求是需要獲取源數(shù)據(jù)庫表中的除該一部分源數(shù)據(jù)以外的另一部分源數(shù)據(jù)時(shí),就無法獲取到該另一部分源數(shù)據(jù)。
例如,假設(shè)源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)為源數(shù)據(jù)A、源數(shù)據(jù)B和源數(shù)據(jù)C,當(dāng)源數(shù)據(jù)A和源數(shù)據(jù)B已經(jīng)遷移至目標(biāo)數(shù)據(jù)庫表且源數(shù)據(jù)C還未遷移至目標(biāo)數(shù)據(jù)庫表時(shí),如果此時(shí)接收到用于獲取源數(shù)據(jù)C的獲取請求,由于此時(shí)目標(biāo)數(shù)據(jù)庫表還未存儲(chǔ)源數(shù)據(jù)C,則就無法獲取到源數(shù)據(jù)C。
技術(shù)實(shí)現(xiàn)要素:
為克服相關(guān)技術(shù)中存在的問題,本發(fā)明提供一種數(shù)據(jù)處理方法及裝置。
根據(jù)本發(fā)明實(shí)施例的第一方面,提供一種數(shù)據(jù)處理方法,所述方法包括:
當(dāng)開始將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移時(shí),檢測是否接收到第一請求;
當(dāng)接收到第一請求時(shí),判斷所述第一請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或, 為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
如果所述第一請求為所述數(shù)據(jù)獲取請求,從所述源數(shù)據(jù)庫表中獲取所述第一請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
如果所述第一請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第一請求攜帶的待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在所述源數(shù)據(jù)庫表和所述目標(biāo)數(shù)據(jù)庫表中。
進(jìn)一步地,所述方法還包括:
當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),檢測是否接收到第二請求;
當(dāng)接收到第二請求時(shí),判斷所述第二請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
如果所述第二請求為所述數(shù)據(jù)獲取請求,從所述目標(biāo)數(shù)據(jù)庫表中獲取所述第二請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
如果所述第二請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第二請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中。
進(jìn)一步地,所述方法還包括:
當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),對所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn);
當(dāng)所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),如果接收到的所述第二請求為所述數(shù)據(jù)讀取請求,則執(zhí)行所述從所述目標(biāo)數(shù)據(jù)庫表中獲取所述數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù)的步驟;或,如果接收到的所述第二請求為數(shù)據(jù)存儲(chǔ)請求,則執(zhí)行所述將所述待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中的步驟。
其中,所述對所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn),包括:
判斷所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量是否相同;
當(dāng)所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同時(shí),確定所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整。
其中,所述判斷所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量是否相同,包括:
獲取所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息;所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
獲取所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息,所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
判斷所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息是否相同;
當(dāng)所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息相同時(shí),將所述源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息中的相同的列名組成列名組;
對于每一個(gè)列名組,統(tǒng)計(jì)所述列名組中的第一個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第一個(gè)數(shù);以及統(tǒng)計(jì)所述列名組中的第二個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第二個(gè)數(shù);
對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
進(jìn)一步地,所述方法還包括:
對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),從組成的列名組中獲取第一預(yù)設(shè)個(gè)數(shù)個(gè)列名組;
對于每一個(gè)獲取的列名組,獲取所述列名組中的兩個(gè)列名對應(yīng)的列;從所述兩個(gè)列名對應(yīng)的列中分別獲取第二預(yù)設(shè)個(gè)數(shù)個(gè)、且行編號(hào)相同的行中存儲(chǔ)的數(shù)據(jù);判斷所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)是否相同;當(dāng)所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)相同時(shí),執(zhí)行所述確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同的步驟。
其中,所述方法還包括:
當(dāng)所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),刪除所述源數(shù)據(jù)庫表中存儲(chǔ)的數(shù)據(jù)。
根據(jù)本發(fā)明實(shí)施例的第二方面,提供一種數(shù)據(jù)處理裝置,所述裝置包括:
第一檢測模塊,用于當(dāng)開始將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移時(shí),檢測是否接收到第一請求;
第一判斷模塊,用于當(dāng)接收到第一請求時(shí),判斷所述第一請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
第一獲取模塊,用于如果所述第一請求為所述數(shù)據(jù)獲取請求,從所述源數(shù)據(jù)庫表中獲取所述第一請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
第一存儲(chǔ)模塊,用于如果所述第一請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第一請求攜帶的待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在所述源數(shù)據(jù)庫表和所述目標(biāo)數(shù)據(jù)庫表中。
進(jìn)一步地,所述裝置還包括:
第二檢測模塊,用于當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),檢測是否接收到第二請求;
第二判斷模塊,用于當(dāng)接收到第二請求時(shí),判斷所述第二請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
第二獲取模塊,用于如果所述第二請求為所述數(shù)據(jù)獲取請求,從所述目標(biāo)數(shù)據(jù)庫表中獲取所述第二請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
第二存儲(chǔ)模塊,用于如果所述第二請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第二請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中。
進(jìn)一步地,所述裝置還包括:
校驗(yàn)?zāi)K,用于當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),對所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn);
所述第二獲取模塊還用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),如果接收到的所述第二請求為所述數(shù)據(jù)讀取請求,則執(zhí)行所述從所述目標(biāo)數(shù)據(jù)庫表中獲取所述數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù)的步驟;
所述第二存儲(chǔ)模塊還用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),如果接收到的所述第二請求為數(shù)據(jù)存儲(chǔ)請求,則執(zhí)行所述將所述待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中的步驟。
其中,所述校驗(yàn)?zāi)K包括:
判斷單元,用于判斷所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量是否相同;
確定單元,用于當(dāng)所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同時(shí),確定所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整。
其中,所述判斷單元包括:
第一獲取子單元,用于獲取所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息;所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
第二獲取子單元,用于獲取所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息,所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
第一判斷子單元,用于判斷所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表 結(jié)構(gòu)信息是否相同;
組成子單元,用于當(dāng)所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息相同時(shí),將所述源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息中的相同的列名組成列名組;
統(tǒng)計(jì)子單元,用于對于每一個(gè)列名組,統(tǒng)計(jì)所述列名組中的第一個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第一個(gè)數(shù);以及統(tǒng)計(jì)所述列名組中的第二個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第二個(gè)數(shù);
確定子單元,用于對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
進(jìn)一步地,所述判斷單元還包括:
第三獲取子單元,用于對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),從組成的列名組中獲取第一預(yù)設(shè)個(gè)數(shù)個(gè)列名組;
第四獲取子單元,用于對于每一個(gè)獲取的列名組,獲取所述列名組中的兩個(gè)列名對應(yīng)的列;
第五獲取子單元,用于從所述兩個(gè)列名對應(yīng)的列中分別獲取第二預(yù)設(shè)個(gè)數(shù)個(gè)、且行編號(hào)相同的行中存儲(chǔ)的數(shù)據(jù);
第二判斷子單元,用于判斷所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)是否相同;
所述確定子單元,用于當(dāng)所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)相同時(shí),執(zhí)行所述確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同的步驟。
進(jìn)一步地,所述裝置還包括:
刪除模塊,用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),刪除所述源數(shù)據(jù)庫表中存儲(chǔ)的數(shù)據(jù)。
本發(fā)明的實(shí)施例提供的技術(shù)方案可以包括以下有益效果:在本發(fā)明中,如果第一請求為數(shù)據(jù)存儲(chǔ)請求,將待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在源數(shù)據(jù)庫表中和目標(biāo)數(shù)據(jù)庫表中。如果第一請求為數(shù)據(jù)獲取請求,從源數(shù)據(jù)庫表中讀取數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);由于源數(shù)據(jù)庫表不僅存儲(chǔ)了源數(shù)據(jù),且存儲(chǔ)新增的待存儲(chǔ)數(shù)據(jù),因此,無論數(shù)據(jù)獲取請求是需要獲取源數(shù)據(jù)還是需要獲取新增的待存儲(chǔ)數(shù)據(jù),從源數(shù)據(jù)中表均可以獲取到。
應(yīng)當(dāng)理解的是,以上的一般描述和后文的細(xì)節(jié)描述僅是示例性和解釋性的,并不能 限制本發(fā)明。
附圖說明
此處的附圖被并入說明書中并構(gòu)成本說明書的一部分,示出了符合本發(fā)明的實(shí)施例,并與說明書一起用于解釋本發(fā)明的原理。
圖1是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理方法的流程圖。
圖2是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理方法的流程圖。
圖3是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理方法的流程圖。
圖4是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理方法的流程圖。
圖5是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理裝置的框圖。
具體實(shí)施方式
這里將詳細(xì)地對示例性實(shí)施例進(jìn)行說明,其示例表示在附圖中。下面的描述涉及附圖時(shí),除非另有表示,不同附圖中的相同數(shù)字表示相同或相似的要素。以下示例性實(shí)施例中所描述的實(shí)施方式并不代表與本發(fā)明相一致的所有實(shí)施方式。相反,它們僅是與如所附權(quán)利要求書中所詳述的、本發(fā)明的一些方面相一致的裝置和方法的例子。
圖1是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理方法的流程圖,如圖1所示,該方法包括以下步驟。
在步驟S101中,當(dāng)開始將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移時(shí),檢測是否接收到第一請求;
源數(shù)據(jù)庫表所屬的數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫所屬的數(shù)據(jù)庫可以是同一數(shù)據(jù)庫,也可以是不同的數(shù)據(jù)庫。
當(dāng)接收到第一請求時(shí),在步驟S102中,判斷第一請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
如果第一請求為數(shù)據(jù)獲取請求,在步驟S103中,從源數(shù)據(jù)庫表中獲取第一請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
由于源數(shù)據(jù)庫表存儲(chǔ)了完整的源數(shù)據(jù),因此,如果數(shù)據(jù)獲取請求包含的數(shù)據(jù)標(biāo)識(shí)為源數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),根據(jù)該數(shù)據(jù)標(biāo)識(shí)從源數(shù)據(jù)庫中一定能獲取到源數(shù)據(jù)。
如果第一請求為數(shù)據(jù)存儲(chǔ)請求,在步驟S104中,將第一請求攜帶的待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在源數(shù)據(jù)庫表和目標(biāo)數(shù)據(jù)庫表中。
其中,將待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在源數(shù)據(jù)庫表中是為了:如果之后接收到攜帶該待存儲(chǔ)數(shù) 據(jù)的數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求,則可以從源數(shù)據(jù)庫表中獲取到該待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù)。
其中,將待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中是為了:當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫遷移完畢時(shí),會(huì)將存儲(chǔ)策略和獲取策略遷移至目標(biāo)數(shù)據(jù)庫表,之后可能不再使用源數(shù)據(jù)庫表,但可以從目標(biāo)數(shù)據(jù)庫表中獲取到該待存儲(chǔ)的數(shù)據(jù)。
在本發(fā)明圖1所示的實(shí)施例中,如果第一請求為數(shù)據(jù)存儲(chǔ)請求,將待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在源數(shù)據(jù)庫表中和目標(biāo)數(shù)據(jù)庫表中。如果第一請求為數(shù)據(jù)獲取請求,從源數(shù)據(jù)庫表中讀取數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);由于源數(shù)據(jù)庫表不僅存儲(chǔ)了源數(shù)據(jù),且存儲(chǔ)新增的待存儲(chǔ)數(shù)據(jù),因此,無論數(shù)據(jù)獲取請求是需要獲取源數(shù)據(jù)還是需要獲取新增的待存儲(chǔ)數(shù)據(jù),從源數(shù)據(jù)中表均可以獲取到。
在本發(fā)明另一實(shí)施例中,參見圖2,該方法還包括:
在步驟S201中,當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表時(shí),檢測是否接收到第二請求;
當(dāng)接收到第二請求時(shí),在步驟S202中,判斷第二請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
如果第二請求為數(shù)據(jù)獲取請求,在步驟S203中,從目標(biāo)數(shù)據(jù)庫表中獲取第二請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
其中,當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表時(shí),就可以實(shí)現(xiàn)去源數(shù)據(jù)庫表,即,不再使用源數(shù)據(jù)庫表,進(jìn)而可以將存儲(chǔ)策略和讀取策略都遷移至目標(biāo)數(shù)據(jù)庫中。
且由于當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表時(shí),目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)了源數(shù)據(jù)庫表中的全部的源數(shù)據(jù),同時(shí)也存儲(chǔ)了在將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移的過程中新增加的數(shù)據(jù)。
因此,本發(fā)明實(shí)施例保障了無論該數(shù)據(jù)獲取請求用于獲取源數(shù)據(jù),還是用于獲取在將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表中遷移的過程中新增加的數(shù)據(jù),均可能從目標(biāo)數(shù)據(jù)庫表中獲取到。
如果第二請求為數(shù)據(jù)存儲(chǔ)請求,在步驟S204中,將第二請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中。
其中,當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表時(shí),就可以實(shí)現(xiàn)去源數(shù)據(jù)庫,即,不再使用源數(shù)據(jù)庫中,可以將存儲(chǔ)策略和讀取策略都遷移至目標(biāo)數(shù)據(jù)庫 中。
當(dāng)接收到攜帶待存儲(chǔ)數(shù)據(jù)的存儲(chǔ)請求時(shí),不再將待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在源數(shù)據(jù)庫表中,只需將待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中即可,之后當(dāng)接收到用于獲取該待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)獲取請求時(shí),從目標(biāo)數(shù)據(jù)庫表中一定能獲取到該待存儲(chǔ)的數(shù)據(jù)。
其中,由于在將源數(shù)據(jù)庫表中的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表表中遷移時(shí),可能會(huì)發(fā)生數(shù)據(jù)傳輸錯(cuò)誤、數(shù)據(jù)丟失等情況,因此,最終遷移到目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)可能是不完整的源數(shù)據(jù),即,最終遷移到目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)可能與源數(shù)據(jù)庫中的源數(shù)據(jù)不完全相同。所以,當(dāng)將源數(shù)據(jù)庫表中的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表中遷移完畢時(shí),需要對目標(biāo)數(shù)據(jù)庫表中的、從源數(shù)據(jù)庫表中遷移過來的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn),當(dāng)目標(biāo)數(shù)據(jù)庫表中的、從源數(shù)據(jù)庫表中遷移過來的源數(shù)據(jù)完整時(shí),才能保證之后可以從目標(biāo)數(shù)據(jù)表中獲取到所有的源數(shù)據(jù)。
因此,在本發(fā)明又一實(shí)施例中,參見圖3,該方法還包括:
在步驟S301中,當(dāng)將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至目標(biāo)數(shù)據(jù)庫表時(shí),對目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn);
當(dāng)目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),在步驟S302中,如果接收到的第二請求為數(shù)據(jù)獲取請求,則從目標(biāo)數(shù)據(jù)庫表中獲取第二請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);或,如果接收到的第二請求為數(shù)據(jù)存儲(chǔ)請求,則將第二請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中。
其中,需要說明的是,本發(fā)明實(shí)施例中的目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)為從源數(shù)據(jù)庫表中遷移至目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)。
其中,在確定出目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整之前,如果接收到的請求為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求,則從源數(shù)據(jù)庫表中獲取該請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);如果接收到的請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,則將該請求攜帶的待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在源數(shù)據(jù)庫表中和目標(biāo)數(shù)據(jù)庫表中。
其中,在本發(fā)明又一實(shí)施例中,參見圖4,步驟S301中的“對目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn)”,包括:
在步驟S401中,判斷源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫中表的源數(shù)據(jù)的數(shù)據(jù)總量是否相同;
其中,目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)為從源數(shù)據(jù)庫表中遷移過來的源數(shù)據(jù)。
具體地,本步驟可以通過如下流程實(shí)現(xiàn),包括:
11)、獲取源數(shù)據(jù)庫表的表結(jié)構(gòu)信息;
源數(shù)據(jù)庫表的表結(jié)構(gòu)信息包括用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)源數(shù)據(jù)的列的列名;
其中,任一數(shù)據(jù)庫表中包括至少一個(gè)列,一列中包括至少一行,行用于存儲(chǔ)數(shù)據(jù)。
例如,假設(shè)源數(shù)據(jù)庫表中的、用于存儲(chǔ)源數(shù)據(jù)的列一共有三個(gè),列名分別為A、B和C。
12)、獲取目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息;
目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息包括用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)源數(shù)據(jù)的列的列名;
假設(shè)目標(biāo)數(shù)據(jù)庫表中的、用于存儲(chǔ)從源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的列一共有三個(gè),列名分別為A、B和C。
13)、判斷源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息是否相同;
具體地,比較源數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)與目標(biāo)數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)是否相同;如果源數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)與目標(biāo)數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)相同,則在目標(biāo)數(shù)據(jù)庫表中包括的所有用于存儲(chǔ)源數(shù)據(jù)的列的列名中,分別查找源數(shù)據(jù)庫表中的每一個(gè)用于存儲(chǔ)源數(shù)據(jù)的列的列名,如果在目標(biāo)數(shù)據(jù)庫表中包括的所有用于存儲(chǔ)源數(shù)據(jù)的列的列名中能夠查找源數(shù)據(jù)庫表中的每一個(gè)用于存儲(chǔ)源數(shù)據(jù)的列的列名,則確定源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息是否相同。
例如,將源數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)3與目標(biāo)數(shù)據(jù)庫表中包括的用于存儲(chǔ)源數(shù)據(jù)的列的總個(gè)數(shù)3進(jìn)行比較,且二者相同,然后在目標(biāo)數(shù)據(jù)庫表中包括的所有用于存儲(chǔ)源數(shù)據(jù)的列的列名A、B和C中,分別查找源數(shù)據(jù)庫表中的每一個(gè)用于存儲(chǔ)源數(shù)據(jù)的列的列名A、B和C,且分別查找到列名A、B和C,則確定源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息是否相同。
14)、當(dāng)源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息相同時(shí),將源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息中的相同的列名組成列名組;
其中,同一個(gè)數(shù)據(jù)庫表中的任意兩個(gè)列的列名都不相同。
例如,將源數(shù)據(jù)庫表中的列名A與目標(biāo)數(shù)據(jù)庫表中的列名A組成第一列名組;將源數(shù)據(jù)庫表中的列名B與目標(biāo)數(shù)據(jù)庫表中的列名B組成第二列名組;將源數(shù)據(jù)庫表中的列名C與目標(biāo)數(shù)據(jù)庫表中的列名C組成第三列名組。
15)、對于每一個(gè)列名組,統(tǒng)計(jì)該列名組中的第一個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第一個(gè)數(shù);以及統(tǒng)計(jì)該列名組中的第二個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第二個(gè)數(shù);
其中,對于任一列名組,統(tǒng)計(jì)出該列名組中的第一個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第一個(gè)數(shù),以及統(tǒng)計(jì)出該列名組中的第二個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第二個(gè)數(shù)。對于其他每一個(gè)列名組,均執(zhí)行上述操作。
例如,對于第一列名組,統(tǒng)計(jì)出第一列名組中的源數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù),以及出第一列名組中的目標(biāo)數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù)。對于第二列名組和第三列名組均執(zhí)行上述操作。
例如,假設(shè)統(tǒng)計(jì)出第一列名組中的源數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù)為10,以及統(tǒng)計(jì)出第一列名組中的目標(biāo)數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù)為10;統(tǒng)計(jì)出第二列名組中的源數(shù)據(jù)庫表中的列名B對應(yīng)的列中包括的行的個(gè)數(shù)為12,以及統(tǒng)計(jì)出第二列名組中的目標(biāo)數(shù)據(jù)庫表中的列名B對應(yīng)的列中包括的行的個(gè)數(shù)為12。統(tǒng)計(jì)出第三列名組中的源數(shù)據(jù)庫表中的列名C對應(yīng)的列中包括的行的個(gè)數(shù)為13,以及統(tǒng)計(jì)出第三列名組中的目標(biāo)數(shù)據(jù)庫表中的列名C對應(yīng)的列中包括的行的個(gè)數(shù)為13。
16)、對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的該第一個(gè)數(shù)與該第二個(gè)數(shù)相同時(shí),確定源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
對于任一列名組,判斷統(tǒng)計(jì)出的該列名組中的第一個(gè)數(shù)與第二個(gè)數(shù)是否相同;對于其他每一列名組,均執(zhí)行上述操作;如果每一個(gè)列名組中的第一個(gè)數(shù)與第二個(gè)數(shù)都相同時(shí),則確定源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
例如,第一列名組中的源數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù)10與第一列名組中的目標(biāo)數(shù)據(jù)庫表中的列名A對應(yīng)的列中包括的行的個(gè)數(shù)10相同;
第二列名組中的源數(shù)據(jù)庫表中的列名B對應(yīng)的列中包括的行的個(gè)數(shù)12與第二列名組中的目標(biāo)數(shù)據(jù)庫表中的列名B對應(yīng)的列中包括的行的個(gè)數(shù)12相同;
第三列名組中的源數(shù)據(jù)庫表中的列名C對應(yīng)的列中包括的行的個(gè)數(shù)14與第三列名組中的目標(biāo)數(shù)據(jù)庫表中的列名C對應(yīng)的列中包括的行的個(gè)數(shù)14相同。
其中,只要存在一個(gè)列名組中的第一個(gè)數(shù)與第二個(gè)數(shù)不同,確定源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量不同。
當(dāng)源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同時(shí),在步驟S402中,確定目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整。
當(dāng)源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量不相同時(shí),在步驟S403中,確定目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)不完整。
進(jìn)一步地,如果確定目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整,則需要將源數(shù)據(jù)庫表中的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表中重新遷移,直至遷移至目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí)為止。
其中,為了進(jìn)一步確保目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)的完整性,在本發(fā)明又一實(shí)施例中,該方法還包括:
對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的該第一個(gè)數(shù)與該第二個(gè)數(shù)相同時(shí),21)、從組成的列名組中獲取第一預(yù)設(shè)個(gè)數(shù)個(gè)列名組;
第一預(yù)設(shè)個(gè)數(shù)為技術(shù)人員事先設(shè)置的數(shù)值,可以為2、3或5等,本發(fā)明對此不加以限定。
如果第一預(yù)設(shè)個(gè)數(shù)小于組成的列名組的個(gè)數(shù),則可以從組成的列名組中隨機(jī)挑選出第一預(yù)設(shè)個(gè)數(shù)個(gè)列名組。
如果第一預(yù)設(shè)個(gè)數(shù)等于或大于組成的列名組的個(gè)數(shù),則獲取組成的全部列名組。
例如,假設(shè)組成的列名組為上述實(shí)施例中的第一列名組、第二列名組和第三列名組。如果第一預(yù)設(shè)個(gè)數(shù)為2,則從第一列名組、第二列名組和第三列名組隨機(jī)挑選出兩個(gè)列名組。如果第一預(yù)設(shè)個(gè)數(shù)為3或5,則獲取第一列名組、第二列名組和第三列名組。
22)、對于每一個(gè)獲取的列名組,獲取該列名組中的兩個(gè)列名對應(yīng)的列;從兩個(gè)列名對應(yīng)的列中分別獲取第二預(yù)設(shè)個(gè)數(shù)個(gè)、且行編號(hào)相同的行中存儲(chǔ)的數(shù)據(jù);
對于獲取的任一個(gè)列名組,獲取該列名組中的第一個(gè)列名對應(yīng)的列,以及獲取該列名組中的第二個(gè)列名對應(yīng)的列。從第一個(gè)列名對應(yīng)的列中選擇第二預(yù)設(shè)個(gè)數(shù)個(gè)行,從第二個(gè)列名中選擇第二預(yù)設(shè)個(gè)數(shù)個(gè)行,從第一個(gè)列名對應(yīng)的列中獲取的行的行編號(hào)與從第二個(gè)列名中對應(yīng)的列中獲取的行編號(hào)相同。例如,從第一個(gè)列名中對應(yīng)的列中選擇第1行、第3行和第4行。則從第一個(gè)列名中對應(yīng)的列中也選擇第1行、第3行和第4行。然后獲取存儲(chǔ)在選擇的行中的數(shù)據(jù),再將獲取相同的行編號(hào)的行中的數(shù)據(jù)進(jìn)行比較。
另外,對于獲取的其他每一列名組,均執(zhí)行上述操作。
其中,在數(shù)據(jù)庫表中的列可以為包括至少一行,每一行都有行編號(hào),用于唯一標(biāo)識(shí)該行。
第二預(yù)設(shè)個(gè)數(shù)為技術(shù)人員事先設(shè)置的數(shù)值,可以為5、10或15等,本發(fā)明對此不加以限定。
如果一個(gè)列名對應(yīng)的列中包括的行的個(gè)數(shù)大于第二預(yù)設(shè)個(gè)數(shù),則從該列名對應(yīng)的列 中包括的行中隨機(jī)選擇出第二預(yù)設(shè)個(gè)數(shù)個(gè)行。
如果一個(gè)列名對應(yīng)的列中包括的行的個(gè)數(shù)小于或等于第二預(yù)設(shè)個(gè)數(shù),則從該列名對應(yīng)的列中選擇所有行。
23)、判斷每個(gè)列名組中的兩個(gè)列名對應(yīng)的列中的、獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)是否相同;
當(dāng)兩個(gè)列名對應(yīng)的列中的、獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)相同時(shí),16)、確定源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
其中,在本發(fā)明又一實(shí)施例中,當(dāng)目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),之后當(dāng)接收到請求時(shí),如果接收到的請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,則會(huì)將該請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在目標(biāo)數(shù)據(jù)庫表中;以及,如果接收到的該請求為攜帶數(shù)據(jù)標(biāo)識(shí)數(shù)據(jù)獲取請求,則會(huì)從目標(biāo)數(shù)據(jù)庫表中獲取該請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);即,當(dāng)目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),之后無論是接收到的請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,還是為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求,均不會(huì)再利用到源數(shù)據(jù)庫表,因此,當(dāng)目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),為了節(jié)省源數(shù)據(jù)庫表的存儲(chǔ)空間,可以刪除源數(shù)據(jù)庫表中存儲(chǔ)的數(shù)據(jù)。
圖5是根據(jù)一示例性實(shí)施例示出的一種數(shù)據(jù)處理裝置的框圖。參照圖5,該裝置包括:
第一檢測模塊11,用于當(dāng)開始將源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)向目標(biāo)數(shù)據(jù)庫表遷移時(shí),檢測是否接收到第一請求;
第一判斷模塊12,用于當(dāng)接收到第一請求時(shí),判斷所述第一請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
第一獲取模塊13,用于如果所述第一請求為所述數(shù)據(jù)獲取請求,從所述源數(shù)據(jù)庫表中獲取所述第一請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
第一存儲(chǔ)模塊14,用于如果所述第一請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第一請求攜帶的待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在所述源數(shù)據(jù)庫表和所述目標(biāo)數(shù)據(jù)庫表中。
在本發(fā)明圖5所示的實(shí)施例中,如果第一請求為數(shù)據(jù)存儲(chǔ)請求,將待存儲(chǔ)數(shù)據(jù)分別存儲(chǔ)在源數(shù)據(jù)庫表中和目標(biāo)數(shù)據(jù)庫表中。如果第一請求為數(shù)據(jù)獲取請求,從源數(shù)據(jù)庫表中讀取數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);由于源數(shù)據(jù)庫表不僅存儲(chǔ)了源數(shù)據(jù),且存儲(chǔ)新增的待存儲(chǔ)數(shù)據(jù),因此,無論數(shù)據(jù)獲取請求是需要獲取源數(shù)據(jù)還是需要獲取新增的待存儲(chǔ)數(shù)據(jù),從 源數(shù)據(jù)中表均可以獲取到。
進(jìn)一步地,所述裝置還包括:
第二檢測模塊,用于當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),檢測是否接收到第二請求;
第二判斷模塊,用于當(dāng)接收到第二請求時(shí),判斷所述第二請求為攜帶待存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)存儲(chǔ)請求,或,為攜帶數(shù)據(jù)標(biāo)識(shí)的數(shù)據(jù)獲取請求;
第二獲取模塊,用于如果所述第二請求為所述數(shù)據(jù)獲取請求,從所述目標(biāo)數(shù)據(jù)庫表中獲取所述第二請求攜帶的數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù);
第二存儲(chǔ)模塊,用于如果所述第二請求為所述數(shù)據(jù)存儲(chǔ)請求,將所述第二請求攜帶的待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中。
進(jìn)一步地,所述裝置還包括:
校驗(yàn)?zāi)K,用于當(dāng)將所述源數(shù)據(jù)庫表中存儲(chǔ)的源數(shù)據(jù)全部遷移至所述目標(biāo)數(shù)據(jù)庫表時(shí),對所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)的完整性進(jìn)行校驗(yàn);
所述第二獲取模塊還用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),如果接收到的所述第二請求為所述數(shù)據(jù)讀取請求,則執(zhí)行所述從所述目標(biāo)數(shù)據(jù)庫表中獲取所述數(shù)據(jù)標(biāo)識(shí)對應(yīng)的數(shù)據(jù)的步驟;
所述第二存儲(chǔ)模塊還用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中存儲(chǔ)的、從所述源數(shù)據(jù)庫表中遷移的源數(shù)據(jù)完整時(shí),如果接收到的所述第二請求為數(shù)據(jù)存儲(chǔ)請求,則執(zhí)行所述將所述待存儲(chǔ)數(shù)據(jù)存儲(chǔ)在所述目標(biāo)數(shù)據(jù)庫表中的步驟。
其中,所述校驗(yàn)?zāi)K包括:
判斷單元,用于判斷所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量是否相同;
確定單元,用于當(dāng)所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同時(shí),確定所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整。
其中,所述判斷單元包括:
第一獲取子單元,用于獲取所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息;所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
第二獲取子單元,用于獲取所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息,所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息包括用于存儲(chǔ)所述源數(shù)據(jù)的列的總個(gè)數(shù),以及用于存儲(chǔ)所述源數(shù)據(jù)的列的列名;
第一判斷子單元,用于判斷所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息是否相同;
組成子單元,用于當(dāng)所述源數(shù)據(jù)庫表的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表的表結(jié)構(gòu)信息相同時(shí),將所述源數(shù)據(jù)庫表中的表結(jié)構(gòu)信息與所述目標(biāo)數(shù)據(jù)庫表中的表結(jié)構(gòu)信息中的相同的列名組成列名組;
統(tǒng)計(jì)子單元,用于對于每一個(gè)列名組,統(tǒng)計(jì)所述列名組中的第一個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第一個(gè)數(shù);以及統(tǒng)計(jì)所述列名組中的第二個(gè)列名對應(yīng)的列中的、用于存儲(chǔ)源數(shù)據(jù)的行的第二個(gè)數(shù);
確定子單元,用于對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同。
其中,所述判斷單元還包括:
第三獲取子單元,用于對于每一個(gè)列名組,當(dāng)統(tǒng)計(jì)出的所述第一個(gè)數(shù)與所述第二個(gè)數(shù)相同時(shí),從組成的列名組中獲取第一預(yù)設(shè)個(gè)數(shù)個(gè)列名組;
第四獲取子單元,用于對于每一個(gè)獲取的列名組,獲取所述列名組中的兩個(gè)列名對應(yīng)的列;
第五獲取子單元,用于從所述兩個(gè)列名對應(yīng)的列中分別獲取第二預(yù)設(shè)個(gè)數(shù)個(gè)、且行編號(hào)相同的行中存儲(chǔ)的數(shù)據(jù);
第二判斷子單元,用于判斷所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)是否相同;
所述確定子單元,用于當(dāng)所述兩個(gè)列名對應(yīng)的列中的、所述獲取的相同行編號(hào)的行中存儲(chǔ)的數(shù)據(jù)相同時(shí),執(zhí)行所述確定所述源數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量與所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)的數(shù)據(jù)總量相同的步驟。
進(jìn)一步地,所述裝置還包括:
刪除模塊,用于當(dāng)所述目標(biāo)數(shù)據(jù)庫表中的源數(shù)據(jù)完整時(shí),刪除所述源數(shù)據(jù)庫表中存儲(chǔ)的數(shù)據(jù)。
關(guān)于上述實(shí)施例中的裝置,其中各個(gè)模塊執(zhí)行操作的具體方式已經(jīng)在有關(guān)該方法的實(shí)施例中進(jìn)行了詳細(xì)描述,此處將不做詳細(xì)闡述說明。
本領(lǐng)域技術(shù)人員在考慮說明書及實(shí)踐這里公開的發(fā)明后,將容易想到本發(fā)明的其它實(shí)施方案。本申請旨在涵蓋本發(fā)明的任何變型、用途或者適應(yīng)性變化,這些變型、用途或者適應(yīng)性變化遵循本發(fā)明的一般性原理并包括本發(fā)明未公開的本技術(shù)領(lǐng)域中的公知常 識(shí)或慣用技術(shù)手段。說明書和實(shí)施例僅被視為示例性的,本發(fā)明的真正范圍和精神由下面的權(quán)利要求指出。
應(yīng)當(dāng)理解的是,本發(fā)明并不局限于上面已經(jīng)描述并在附圖中示出的精確結(jié)構(gòu),并且可以在不脫離其范圍進(jìn)行各種修改和改變。本發(fā)明的范圍僅由所附的權(quán)利要求來限制。