亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種數(shù)據(jù)處理的方法及裝置與流程

文檔序號:11620596閱讀:199來源:國知局
一種數(shù)據(jù)處理的方法及裝置與流程

本申請涉及信息技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)處理的方法及裝置。



背景技術(shù):

隨著信息技術(shù)的發(fā)展,應(yīng)用程序通過網(wǎng)絡(luò)執(zhí)行業(yè)務(wù)的需求不斷增長,執(zhí)行業(yè)務(wù)而產(chǎn)生的業(yè)務(wù)數(shù)據(jù)也不斷增加。這些業(yè)務(wù)數(shù)據(jù)通常采用數(shù)據(jù)庫予以存儲。在存儲業(yè)務(wù)數(shù)據(jù)時,為保證數(shù)據(jù)存儲的一致性,防止出現(xiàn)“臟數(shù)據(jù)”,通常采用關(guān)系型數(shù)據(jù)庫存儲各業(yè)務(wù)數(shù)據(jù)。

通常,由于不同應(yīng)用程序使用的關(guān)系型數(shù)據(jù)庫的結(jié)構(gòu)不完全一致,應(yīng)用對應(yīng)的應(yīng)用服務(wù)器需要為一個應(yīng)用配置與其需求或性能相匹配的關(guān)系型數(shù)據(jù)(這里稱為原有數(shù)據(jù)庫)。但是,隨著時間的推移,該原有數(shù)據(jù)庫可能不再適應(yīng)該應(yīng)用程序的需求或性能,這就需要使用性能更為優(yōu)越的其他數(shù)據(jù)庫(這里稱為替換數(shù)據(jù)庫)來替換該原有數(shù)據(jù)庫。

在現(xiàn)有技術(shù)中,替換原有數(shù)據(jù)庫的做法通常是:將該原有數(shù)據(jù)庫在預(yù)定時間點(diǎn)后一段時間內(nèi)產(chǎn)生的業(yè)務(wù)數(shù)據(jù),通過“異步雙寫”的數(shù)據(jù)處理方式備份至該替換數(shù)據(jù)庫(即先寫到原關(guān)系型數(shù)據(jù)庫,再寫入替換數(shù)據(jù)庫),從而實現(xiàn)原有數(shù)據(jù)庫中的數(shù)據(jù)到替換數(shù)據(jù)庫的數(shù)據(jù)“遷移”。

但是,由于這種“異步雙寫”的過程僅僅在數(shù)據(jù)庫層面進(jìn)行,而與應(yīng)用程序以及應(yīng)用服務(wù)器沒有特別的關(guān)系,可能導(dǎo)致數(shù)據(jù)遷移后的替換數(shù)據(jù)庫不能支持應(yīng)用程序的正常運(yùn)行。為防止這種情形的出現(xiàn),在該應(yīng)用或應(yīng)用服務(wù)器使用該替換數(shù)據(jù)庫內(nèi)的數(shù)據(jù)之前,必須對該替換數(shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗證,但目前的各種驗證方法不具有通用性,需要進(jìn)行驗證方法、驗證工具、驗證環(huán)境等的專門設(shè)計,導(dǎo)致驗證過程相當(dāng)繁復(fù),耗時較長,從而大大增加了關(guān)系數(shù)據(jù)庫的替換成本。



技術(shù)實現(xiàn)要素:

本申請實施例提供一種數(shù)據(jù)處理方法,用于解決現(xiàn)有技術(shù)中,在更換數(shù)據(jù)庫進(jìn)行數(shù)據(jù)處理后,還需要對數(shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗證,驗證時間長,耗費(fèi)資源多,導(dǎo)致替換成本高的問題。

本申請實施例提供一種數(shù)據(jù)處理裝置,用于解決現(xiàn)有技術(shù)中,在更換數(shù)據(jù)庫進(jìn)行數(shù)據(jù)處理后,還需要對數(shù)據(jù)庫中數(shù)據(jù)的準(zhǔn)確性進(jìn)行驗證,驗證時間長,耗費(fèi)資源多,導(dǎo)致替換成本高的問題。

本申請實施例采用下述技術(shù)方案:

一種數(shù)據(jù)處理方法,包括:

接收對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求;

根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第一轉(zhuǎn)換規(guī)則,生成所述業(yè)務(wù)請求對應(yīng)的第一sql語句,以及根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第二轉(zhuǎn)換規(guī)則,生成第二sql語句;

通過所述第一sql語句對第一關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作,以及通過第二sql語句對第二關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作。

一種數(shù)據(jù)處理裝置,包括:

接收模塊,接收對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求;

生成模塊,根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第一轉(zhuǎn)換規(guī)則,生成所述業(yè)務(wù)請求對應(yīng)的第一sql語句,以及根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第二轉(zhuǎn)換規(guī)則,生成第二sql語句;

執(zhí)行模塊,通過所述第一sql語句對第一關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作,以及通過第二sql語句對第二關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作。

本申請實施例采用的上述至少一個技術(shù)方案能夠達(dá)到以下有益效果:

由于預(yù)先配置有第一轉(zhuǎn)換規(guī)則以及第二轉(zhuǎn)換規(guī)則,所以在接收到業(yè)務(wù)請求后,可先通過該業(yè)務(wù)請求以及該第一轉(zhuǎn)換規(guī)則生成對第一數(shù)據(jù)庫進(jìn)行操作的第一sql語句,之后再根據(jù)該第二轉(zhuǎn)換規(guī)則以及該業(yè)務(wù)請求生成對第二數(shù)據(jù)庫進(jìn)行操作的第二sql語句,并通過該第一以及第二sql語句分別執(zhí)行對應(yīng)的操作,其中,該第一數(shù)據(jù)庫為原有數(shù)據(jù)庫,該第二數(shù)據(jù)庫為替換數(shù)據(jù)庫??梢?,通過本申請?zhí)峁┑姆椒?,可根?jù)業(yè)務(wù)請求對該第一以及第二數(shù)據(jù)庫進(jìn)行操作,使得該第二數(shù)據(jù)庫中的數(shù)據(jù)實際上是根據(jù)執(zhí)行該應(yīng)用的業(yè)務(wù)請求生成的,進(jìn)而使得無需在數(shù)據(jù)庫層面將該第一數(shù)據(jù)庫中的數(shù)據(jù)備份至該第二數(shù)據(jù)庫中,避免了后續(xù)需要對該第二數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行驗證的過程,降低了數(shù)據(jù)庫替換的成本。

附圖說明

此處所說明的附圖用來提供對本申請的進(jìn)一步理解,構(gòu)成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構(gòu)成對本申請的不當(dāng)限定。在附圖中:

圖1是本申請實施例提供一種數(shù)據(jù)處理過程;

圖2為本申請實施例提供的應(yīng)用服務(wù)器、該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的結(jié)構(gòu)關(guān)系示意圖;

圖3為本申請實施例提供的應(yīng)用服務(wù)器、該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的詳細(xì)結(jié)構(gòu)關(guān)系示意圖。

圖4為本申請實施例提供的在該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫中分別執(zhí)行該第一sql語句以及該第二sql語句過程的示意圖;

圖5是本申請實施例提供一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖。

具體實施方式

為使本申請的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本申請具體實施例及相應(yīng)的附圖對本申請技術(shù)方案進(jìn)行清楚、完整地描述。顯然,所描述的實施例僅是本申請一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本申請保護(hù)的范圍。

在本申請實施例中提供的數(shù)據(jù)處理過程為,需要對應(yīng)用程序使用的第一數(shù)據(jù)庫替換為第二數(shù)據(jù)庫時,將該第一數(shù)據(jù)庫在預(yù)定時點(diǎn)后一段時間內(nèi)執(zhí)行業(yè)務(wù)請求時產(chǎn)生的業(yè)務(wù)數(shù)據(jù)“遷移”至該第二數(shù)據(jù)庫中的過程。其中,該第一數(shù)據(jù)庫為該應(yīng)用程序使用的原有數(shù)據(jù)庫,該第二數(shù)據(jù)庫為替換該原有數(shù)據(jù)庫的替換數(shù)據(jù)庫。

通常,該預(yù)定時間點(diǎn)可為工作人員確定的時間點(diǎn),該預(yù)定時間點(diǎn)后一段時間所對應(yīng)的時長也可由工作人員確定,即,該“遷移”過程的結(jié)束時間也可由工作人員確定。并且,由于該預(yù)定時間點(diǎn)以及該一段時間的時長與本申請的數(shù)據(jù)處理過程沒有關(guān)系,所以本申請對此并不做具體限定。也就是說,本申請所述的數(shù)據(jù)處理過程為在該預(yù)定時間點(diǎn)之后直至該一段時間的時長結(jié)束時,該應(yīng)用執(zhí)行業(yè)務(wù)請求時的數(shù)據(jù)處理方法,并不涉及該數(shù)據(jù)處理方法何時開始以及何時結(jié)束。

以下結(jié)合附圖,詳細(xì)說明本申請各實施例提供的技術(shù)方案。

圖1為本申請實施例提供的數(shù)據(jù)處理過程,具體包括以下步驟:

s101:接收對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求。

在現(xiàn)有技術(shù)中,一個業(yè)務(wù)在執(zhí)行的過程中,通常可由應(yīng)用服務(wù)器接收該業(yè)務(wù)對應(yīng)的業(yè)務(wù)請求,并由該應(yīng)用服務(wù)器根據(jù)該業(yè)務(wù)請求,確定后續(xù)步驟的操作。

同理,在本申請實施例中,也可由應(yīng)用服務(wù)器接收業(yè)務(wù)請求,其中,由于本申請對應(yīng)的是對數(shù)據(jù)庫中數(shù)據(jù)如何進(jìn)行數(shù)據(jù)處理的過程,所以該業(yè)務(wù)請求還可以是針對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求。又由于該數(shù)據(jù)處理過程為對該第一數(shù)據(jù)庫中的數(shù)據(jù)“遷移”至該第二數(shù)據(jù)庫中的過程,所以該應(yīng)用服務(wù)器可對應(yīng)該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫,并且,該第一數(shù)據(jù)庫為該應(yīng)用服務(wù)器使用的原有數(shù)據(jù)庫,該第二數(shù)據(jù)庫為該應(yīng)用服務(wù)器預(yù)計在該“遷移”過程結(jié)束后,使用的替換該第一數(shù)據(jù)庫的替換數(shù)據(jù)庫,該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫均可為關(guān)系型數(shù)據(jù)庫,可如圖2所示。

圖2為本申請實施例提供的應(yīng)用服務(wù)器、該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的結(jié)構(gòu)關(guān)系示意圖。可見,該應(yīng)用服務(wù)器與該第一數(shù)據(jù)庫和該第二數(shù)據(jù)庫對應(yīng)。

其中,該應(yīng)用服務(wù)器可以是單獨(dú)的一臺設(shè)備,也可以是由多臺設(shè)備組成的系統(tǒng)(即,分布式應(yīng)用服務(wù)器),該第一數(shù)據(jù)庫與該第二數(shù)據(jù)庫均可以是單獨(dú)的一臺設(shè)備,也可以是由多臺設(shè)備組成的系統(tǒng)(即,分布式數(shù)據(jù)庫),本申請對此并不做限定。

另外,由于應(yīng)用程序通常執(zhí)行的是面對對象的語言(如,java語言),所以該應(yīng)用服務(wù)器接收到的該業(yè)務(wù)請求通常也是由該面對對象的語言生成的,但是若該業(yè)務(wù)請求涉及到對該應(yīng)用服務(wù)器對應(yīng)的數(shù)據(jù)庫中數(shù)據(jù)的增加、查詢、更改、刪除(create、retrieve、update、delete,crud)操作,則因為對關(guān)系型數(shù)據(jù)庫進(jìn)行操作的語言為結(jié)構(gòu)化查詢語言(structuredquerylanguage,sql),與該面對對象的語言并不一致,所以在本申請實施例中,該應(yīng)用服務(wù)器在接收到該對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求時,還可通過預(yù)先配置的對象關(guān)系映射(objectrelationmapping,orm)框架,將該業(yè)務(wù)請求轉(zhuǎn)換為可以對關(guān)系型數(shù)據(jù)庫進(jìn)行操作的sql語句,以便后續(xù)對該關(guān)系型數(shù)據(jù)庫進(jìn)行操作,其中,該應(yīng)用服務(wù)器可該orm框架,使用數(shù)據(jù)層中間件對該關(guān)系型數(shù)據(jù)庫進(jìn)行操作,該orm框架具體可以是ibatis。

則圖2可以繼續(xù)細(xì)化為圖3。圖3為本申請實施例提供的應(yīng)用服務(wù)器、該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的詳細(xì)結(jié)構(gòu)關(guān)系示意圖。可見,該應(yīng)用服務(wù)器通過orm框架生成sql語句,使用數(shù)據(jù)層中間件操作該第一以及該第二數(shù)據(jù)庫。

并且,由于該應(yīng)用服務(wù)器對應(yīng)有該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫,并且,該第一和第二數(shù)據(jù)庫的數(shù)據(jù)庫種類以及數(shù)據(jù)庫大小都有可能不同,所以在該應(yīng)用服務(wù)器中可以預(yù)先配置有用于將該業(yè)務(wù)請求轉(zhuǎn)換為可對該第一數(shù)據(jù)庫進(jìn)行操作的sql語句的第一轉(zhuǎn)換規(guī)則,以及將該業(yè)務(wù)請求轉(zhuǎn)換為可對該第二數(shù)據(jù)庫進(jìn)行操作的sql語句的第二轉(zhuǎn)換規(guī)則,其中,由于該轉(zhuǎn)換規(guī)則通常也被稱為sqlmap,所以在后續(xù)描述中將該第一轉(zhuǎn)換規(guī)則稱為第一sqlmap,將該第二轉(zhuǎn)換規(guī)則稱為第二sqlmap。

例如,假設(shè)應(yīng)用服務(wù)器a對應(yīng)有第一數(shù)據(jù)庫b以及第二數(shù)據(jù)庫c,其中,該第一數(shù)據(jù)庫b和該第二數(shù)據(jù)庫c均為關(guān)系型數(shù)據(jù)庫,該應(yīng)用服務(wù)器a對應(yīng)的應(yīng)用程序使用的是java語言,進(jìn)一步假設(shè)該第一數(shù)據(jù)庫b為mysql,該第二數(shù)據(jù)庫c為oracle,則該應(yīng)用服務(wù)器a中還預(yù)先配置有將java語言轉(zhuǎn)換為mysql數(shù)據(jù)庫對應(yīng)的第一sql語句的第一sqlmap,以將java語言轉(zhuǎn)換為oracle數(shù)據(jù)庫對應(yīng)的第二sql語句的第二sqlmap,該第一sqlmap以及該第二sqlmap均配置在該應(yīng)用服務(wù)器的orm框架中,并且該應(yīng)用服務(wù)器a接收到對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求d。

s102:根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第一轉(zhuǎn)換規(guī)則,生成所述業(yè)務(wù)請求對應(yīng)的第一sql語句,以及根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第二轉(zhuǎn)換規(guī)則,生成第二sql語句。

在本申請實施例中,當(dāng)該應(yīng)用服務(wù)器接收到對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求后,便可確定一個空閑線程,并通過該線程執(zhí)行該業(yè)務(wù)請求,其中,該線程首先可將該業(yè)務(wù)請求轉(zhuǎn)換為對該第一數(shù)據(jù)庫執(zhí)行對應(yīng)操作的第一sql語句,再轉(zhuǎn)換為對該第二數(shù)據(jù)庫執(zhí)行對應(yīng)操作的第二sql語句。

具體的,該應(yīng)用服務(wù)器可先確定一個空閑線程,并使該線程通過該應(yīng)用服務(wù)器的orm框架中預(yù)先配置的該第一sqlmap,根據(jù)該業(yè)務(wù)請求生成該第一sql語句,并且由于該orm框架中還預(yù)先配置有該第二sqlmap,所以該線程還可根據(jù)該業(yè)務(wù)請求生成為該第二sql語句,以便該應(yīng)用服務(wù)器可通過該第一sql語句以及該第二sql語句執(zhí)行分別對該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)執(zhí)行對應(yīng)的操作。

另外,由于在本申請實施例中,該第二數(shù)據(jù)庫作為替換數(shù)據(jù)庫,存儲的數(shù)據(jù)量相對于該第一數(shù)據(jù)庫存儲的數(shù)據(jù)量較少,可支持該應(yīng)用服務(wù)器正常運(yùn)行的幾率較低,所以若是任何對該關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求均分別生成該第一sql語句以及該第二sql語句,則可能造成該第二sql語句執(zhí)行失敗的幾率增加。并且,在本申請所述的數(shù)據(jù)處理過程中,僅需使該業(yè)務(wù)請求導(dǎo)致的該第一數(shù)據(jù)庫中數(shù)據(jù)的變化同樣出現(xiàn)在該第二服務(wù)器中即可,即,保證在該預(yù)設(shè)的時間點(diǎn)之后,該第二數(shù)據(jù)庫中的數(shù)據(jù)的值與該第一數(shù)據(jù)庫中數(shù)據(jù)出現(xiàn)變更后的數(shù)據(jù)的值一致即可,所以在本申請實施例中,對該數(shù)據(jù)處理過程可以僅針對對數(shù)據(jù)的增、刪、改的操作,而無需對查詢操作進(jìn)行本申請所述的數(shù)據(jù)處理過程(查詢操作不會改變該第一數(shù)據(jù)庫中存儲數(shù)據(jù)的值)。

由于工作人員可以確定該應(yīng)用程序的何種業(yè)務(wù)請求是需要對該第一數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行增、刪、改的操作的,所以在本申請中,該應(yīng)用服務(wù)器中還可以預(yù)先存儲有由工作人員確定的業(yè)務(wù)標(biāo)識列表,其中,該業(yè)務(wù)表示列表中的各業(yè)務(wù)標(biāo)識,均為需要對該第一數(shù)據(jù)庫進(jìn)行增、刪、改的操作的業(yè)務(wù)請求的業(yè)務(wù)標(biāo)識,則該應(yīng)用服務(wù)器還可以通過該業(yè)務(wù)請求對應(yīng)的業(yè)務(wù)標(biāo)識,確定是否生成該第二sql語句。

具體的,在步驟s101中該應(yīng)用服務(wù)器接收的該業(yè)務(wù)請求中可攜帶有該業(yè)務(wù)請求對應(yīng)的業(yè)務(wù)標(biāo)識,于是,首先,當(dāng)該應(yīng)用服務(wù)器將根據(jù)該業(yè)務(wù)請求調(diào)用空閑線程時,可將該業(yè)務(wù)標(biāo)識寫入該線程的線程變量中。其次,在該線程根據(jù)該第一sqlmap生成該第一sql語句之后,可以使用該數(shù)據(jù)層中間件執(zhí)行該第一sql語句對該第一數(shù)據(jù)庫進(jìn)行操作,則該數(shù)據(jù)層中間件可以通過該線程的線程變量,確定該業(yè)務(wù)標(biāo)識。之后,該數(shù)據(jù)層中間件可根據(jù)預(yù)先存儲的該業(yè)務(wù)標(biāo)識列表,判斷該業(yè)務(wù)標(biāo)識是否與該業(yè)務(wù)標(biāo)識列表中的任一業(yè)務(wù)標(biāo)識相同,若相同,則確定需要生成該第二sql語句,則該線程還可通過該第二sqlmap生成該第二sql語句,后續(xù)執(zhí)行該第一以及該第二sql語句,若不同,則確定無需生成該第二sql語句,該線程可繼續(xù)執(zhí)行后續(xù)操作(如,根據(jù)該第一sql語句對該第一數(shù)據(jù)庫執(zhí)行對應(yīng)的操作)。

繼續(xù)沿用上例,假設(shè)該應(yīng)用服務(wù)器a確定空閑的線程x執(zhí)行該業(yè)務(wù)請求,則該應(yīng)用服務(wù)器可將該業(yè)務(wù)請求的業(yè)務(wù)標(biāo)識y寫入該線程x的線程變量中,則該線程x通過該orm框架中預(yù)先配置的該第一sqlmap生成第一sql語句后,使用該數(shù)據(jù)層中間件執(zhí)行該第一sql語句時,可通過該線程x的線程變量確定該業(yè)務(wù)標(biāo)識y,進(jìn)一步假設(shè)該應(yīng)用服務(wù)器a中預(yù)先存儲的業(yè)務(wù)標(biāo)識列表中包含業(yè)務(wù)標(biāo)識y,則該數(shù)據(jù)層中間件在執(zhí)行該第一sql語句時,可進(jìn)一步確定需要生成第二sql語句,則該線程x還可通過該第二sqlmap生成第二sql語句,則該線程x可使用該數(shù)據(jù)層中間件執(zhí)行該第一sql語句以及該第二sql語句。

s103:通過所述第一sql語句對第一關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作,以及通過第二sql語句對第二關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作。

在本申請實施例中,當(dāng)生成該第一以及該第二sql語句之后,該應(yīng)用服務(wù)器便可通過該線程使用該數(shù)據(jù)層中間件,對該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫執(zhí)行對應(yīng)的操作。

并且,由于該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫為兩個獨(dú)立的數(shù)據(jù)庫,所以可為該第一sql語句以及該第二sql語句分別建立對應(yīng)的事務(wù),進(jìn)一步地,為了保證該第二數(shù)據(jù)庫中的數(shù)據(jù)能夠與該第一數(shù)據(jù)庫中的更改后的數(shù)據(jù)保持一致,所以在本申請中可只有當(dāng)該第一和第二sql語句均執(zhí)行成功時才提交該第一sql語句以及該第二sql語句分別對應(yīng)的事務(wù)。

具體的,該線程使用該數(shù)據(jù)層中間件,首先,建立在該第一數(shù)據(jù)庫中執(zhí)行該第一sql語句的第一事務(wù),其次,建立在該第二數(shù)據(jù)庫中執(zhí)行該第二sql語句的第二事務(wù),之后,根據(jù)該第一sql語句在該第一數(shù)據(jù)庫中執(zhí)行該第一sql語句對應(yīng)的操作,然后,根據(jù)該第二sql語句在該第二數(shù)據(jù)庫中執(zhí)行該第二sql語句對應(yīng)的操作,并且,當(dāng)該第一sql語句以及該第二sql語句,均分別執(zhí)行成功時,提交該第一事務(wù)以及該第二事務(wù),而若,該第一事務(wù)建立失敗或者該第二事務(wù)建立失敗或者該第一sql語句執(zhí)行失敗或者該第二sql語句執(zhí)行失敗,則該線程返回錯誤信息(也稱拋出錯誤),并執(zhí)行回滾操作,使該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫中的數(shù)據(jù)恢復(fù)到執(zhí)行步驟s103之前的狀態(tài),如圖4所示。

圖4為本申請實施例提供的在該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫中分別執(zhí)行該第一sql語句以及該第二sql語句過程的示意圖。

可見,通過該第一sql語句對第一數(shù)據(jù)庫執(zhí)行對應(yīng)的操作以及通過第二sql語句對該第二數(shù)據(jù)庫執(zhí)行對應(yīng)的操作的過程中,只要任一步驟出現(xiàn)錯誤或者失敗,該線程均會拋出錯誤并執(zhí)行回滾操作,當(dāng)該第一事務(wù)以及該第二事務(wù)均遞交成功之后對應(yīng)該業(yè)務(wù)請求的操作執(zhí)行結(jié)束。

通過如圖4所示的步驟可以保證對于該業(yè)務(wù)請求對應(yīng)的操作,該第一數(shù)據(jù)庫與該第二數(shù)據(jù)庫中數(shù)據(jù)的改變是相同的,不會出現(xiàn)其中一個數(shù)據(jù)庫執(zhí)行成功而另一個執(zhí)行失敗,導(dǎo)致數(shù)據(jù)不一致的情況出現(xiàn)。

需要說明的是,如前所述,該應(yīng)用服務(wù)器可以是單獨(dú)的一臺設(shè)備也可以是由多臺設(shè)備組成的系統(tǒng),所以如圖1所示的本申請實施例所提供方法的各步驟的執(zhí)行主體均可以是同一設(shè)備,或者,該方法也可由不同設(shè)備作為執(zhí)行主體。比如,步驟s101和步驟s102的執(zhí)行主體可以為設(shè)備1,步驟s103的執(zhí)行主體可以為設(shè)備2;又比如,步驟s101的執(zhí)行主體可以為設(shè)備1,步驟s102和步驟s103的執(zhí)行主體可以為設(shè)備2;等等。

通過如圖1所示的數(shù)據(jù)處理方法,可根據(jù)該應(yīng)用服務(wù)接收到的對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求,生成分別對該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的執(zhí)行的操作的該第一以及第二sql語句,使得該業(yè)務(wù)請求可以通過該第二sql語句在該第二數(shù)據(jù)庫中執(zhí)行對應(yīng)的操作,使得該第二數(shù)據(jù)庫中的數(shù)據(jù),不再僅僅是通過數(shù)據(jù)庫層面的“異步雙寫”的數(shù)據(jù)處理過程而得到的,而是通過應(yīng)用的業(yè)務(wù)請求得到的,并且,在本申請中,只有當(dāng)該第一sql語句以及該第二sql語句均執(zhí)行成功時,分別對應(yīng)的該第一事務(wù)以及該第二事務(wù)才會提交,使該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫產(chǎn)生實際的數(shù)據(jù)變化,所以通過本申請?zhí)峁┑臄?shù)據(jù)處理過程,不但可以是的對該第二數(shù)據(jù)庫的操作與應(yīng)用產(chǎn)生實際的聯(lián)系,并且可以保證該第一和第二數(shù)據(jù)庫中數(shù)據(jù)的一致性(具體為該預(yù)設(shè)時間點(diǎn)后數(shù)據(jù)的變化一致),使得該第二數(shù)據(jù)庫在該一段時間的時長結(jié)束時,可以直接支持該應(yīng)用的運(yùn)行,避免了后續(xù)需要對該第二數(shù)據(jù)庫中數(shù)據(jù)進(jìn)行驗證的過程,降低了數(shù)據(jù)庫替換的成本。

另外,在本申請中,由于在該第二sql語句生成之前,該應(yīng)用服務(wù)器中已經(jīng)生成了該第一sql語句,所以該第二sqlmap也可為,根據(jù)該第一sql語句生成對該第二數(shù)據(jù)庫進(jìn)行操作的第二sql語句的規(guī)則,則該線程在確定需要生成該第二sql語句時,可以根據(jù)該第一sql語句以及該第二sqlmap生成該第二sql語句。

進(jìn)一步地,由于對于該應(yīng)用程序而言,可無需關(guān)心該應(yīng)用服務(wù)器是否要根據(jù)該業(yè)務(wù)請求,對該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫分別進(jìn)行對應(yīng)的操作,所以該業(yè)務(wù)請求的內(nèi)容可以是僅針對該第一數(shù)據(jù)庫的,而該應(yīng)用服務(wù)器可以根據(jù)該應(yīng)用請求實現(xiàn)后續(xù)步驟s102以及s103的操作。

另外,在本申請實施例的上述說明過程中,是以該應(yīng)用服務(wù)器為執(zhí)行主體進(jìn)行說明的,即,該應(yīng)用服務(wù)器中運(yùn)行的應(yīng)用程序中包含了數(shù)據(jù)層中間件,但是,該數(shù)據(jù)層中間件也可作為單獨(dú)的一個程序或者系統(tǒng)存在,所以在本申請實施例中,也可由該數(shù)據(jù)層中間件執(zhí)行上述步驟s102中的一部分和步驟s103。

具體的,當(dāng)該數(shù)據(jù)層中間件作為單獨(dú)的一個程序時,該應(yīng)用服務(wù)器中還可運(yùn)行面對用戶的應(yīng)用程序(為以示區(qū)別,后續(xù)稱之為表層應(yīng)用),該表層應(yīng)用于接受用戶的操作,確定業(yè)務(wù)請求,并根據(jù)預(yù)先配置的第一sqlmap生成該第一sql語句,并將該第一sql語句發(fā)送至該數(shù)據(jù)層中間件中,以使的該數(shù)據(jù)層中間件執(zhí)行后續(xù)操作。

在本申請實施例中,該應(yīng)用服務(wù)器根據(jù)預(yù)先存儲的業(yè)務(wù)標(biāo)識列表以及該業(yè)務(wù)請求中攜帶的該業(yè)務(wù)標(biāo)識,確定需要生成對該第二關(guān)系型數(shù)據(jù)庫進(jìn)行操作的該第二sql語句,具體可以是:

該表層應(yīng)用在接收到該業(yè)務(wù)請求后,可根據(jù)該第一sqlmap生成該第一sql語句,并將該業(yè)務(wù)請求對應(yīng)的業(yè)務(wù)標(biāo)識寫入執(zhí)行該第一sql語句的線程中,并發(fā)送至該數(shù)據(jù)層中間件。則該數(shù)據(jù)層中間件可以通過運(yùn)行該線程,確定該線程變量中寫入的該業(yè)務(wù)標(biāo)識,并通過預(yù)先存儲的業(yè)務(wù)標(biāo)識列表,確定是否要生成第二sql語句,若需要,則跟據(jù)該預(yù)先配置的該第二sqlmap,生成該第二sql語句。并且,后續(xù)可由該數(shù)據(jù)層中間件執(zhí)行步驟s103的全部過程,具體可如圖4所示的過程一致。

進(jìn)一步地,由于該應(yīng)用服務(wù)器中可分為該表層應(yīng)用以及該數(shù)據(jù)層中間件,并且上述兩個程序可以使相互獨(dú)立的,所以該預(yù)先配置的第一以及第二sqlmap可以是該表層應(yīng)用以及該數(shù)據(jù)層中間件均可訪問的。

更進(jìn)一步地,由于該表層應(yīng)用于該數(shù)據(jù)層中間件可互相獨(dú)立,則該表層應(yīng)用可與該數(shù)據(jù)層中間件通過應(yīng)用程序編程接口(applicationprogramminginterface,api)進(jìn)行數(shù)據(jù)交互,則當(dāng)該表層應(yīng)用第一次與該數(shù)據(jù)層中間件連通時,可通過工作人員預(yù)先在該表層應(yīng)用中配置的聲明文件,向該數(shù)據(jù)層中間件聲明該表層應(yīng)用對應(yīng)該第一以及該第二數(shù)據(jù)庫,其中該聲明文件中包含該第一以及該第二數(shù)據(jù)庫分別對應(yīng)的數(shù)據(jù)庫地址、數(shù)據(jù)庫配置等數(shù)據(jù)庫信息。

當(dāng)然,該表層應(yīng)用與該數(shù)據(jù)層中間件也可以位于同一個應(yīng)用程序中,本申請對此并不做特別限定,當(dāng)該數(shù)據(jù)層中間件為一獨(dú)立的程序時,則該數(shù)據(jù)層中間件也可位于獨(dú)立的一個或多個設(shè)備中,并且該數(shù)據(jù)層中間件也可與多個表層應(yīng)用相連接,并對多個數(shù)據(jù)庫分別進(jìn)行操作。并且,由于本申請涉及數(shù)據(jù)庫中數(shù)據(jù)的“遷移”過程,所以僅對存在該第一以及第二數(shù)據(jù)庫的情況進(jìn)行了說明,但是本申請所述的方法并不限定與該應(yīng)用服務(wù)器只對應(yīng)于兩個數(shù)據(jù)庫,該應(yīng)用服務(wù)器還可對應(yīng)多個數(shù)據(jù)庫,只要該應(yīng)用服務(wù)器中預(yù)先配置有對應(yīng)的sqlmap即可。

另外,由于該數(shù)據(jù)層中間件可以直接調(diào)用預(yù)先配置的該第一以及第二sqlmap,所以在本申請中,也可由該數(shù)據(jù)層中間件對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求,并生成該第一以及第二sql語句,最后執(zhí)行該第一以及第二sql語句,需要說明的是,該數(shù)據(jù)層中間件接收的該業(yè)務(wù)請求與前述的業(yè)務(wù)請求可以不同,(為以示區(qū)別,后續(xù)稱為數(shù)據(jù)請求)具體可以是由該表層應(yīng)用經(jīng)過處理之后發(fā)送至該數(shù)據(jù)層中間件的業(yè)務(wù)請求,具體的,該表層應(yīng)用可以根據(jù)接收到的業(yè)務(wù)請求,根據(jù)業(yè)務(wù)邏輯,確定需要對數(shù)據(jù)執(zhí)行的操作,并將該操作作為數(shù)據(jù)請求發(fā)送至該數(shù)據(jù)層中間件,以使得該數(shù)據(jù)層中間件執(zhí)行后續(xù)操作。

需要說明的是,該應(yīng)用程序使用的語言除了在圖1中所述的java語言以外,還可以是c語言,c++語言等等其他語言,該orm框架除了該ibatis以外,還可以是entityejb、hibernate、toplink、ojb等等,該第一數(shù)據(jù)庫以及該第二數(shù)據(jù)庫的類型可以是oracle、db2、microsoftsqlserver等等,本申請對于該應(yīng)用程序使用的語言、該應(yīng)用服務(wù)器使用的orm框架以及該第一和第二數(shù)據(jù)庫的類型并不做具體限定。

基于圖1所示的數(shù)據(jù)處理過程,本申請實施例還對應(yīng)提供一種數(shù)據(jù)處理裝置,如圖5所示。

圖5是本申請實施例提供一種數(shù)據(jù)處理裝置的結(jié)構(gòu)示意圖,包括:

接收模塊201,接收對關(guān)系型數(shù)據(jù)庫的業(yè)務(wù)請求;

生成模塊202,根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第一轉(zhuǎn)換規(guī)則,生成所述業(yè)務(wù)請求對應(yīng)的第一sql語句,以及根據(jù)所述業(yè)務(wù)請求以及預(yù)先配置的第二轉(zhuǎn)換規(guī)則,生成第二sql語句;

執(zhí)行模塊203,通過所述第一sql語句對第一關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作,以及通過第二sql語句對第二關(guān)系型數(shù)據(jù)庫執(zhí)行對應(yīng)的操作。

所述業(yè)務(wù)請求中攜帶有業(yè)務(wù)標(biāo)識;

所述生成模塊202,根據(jù)預(yù)先存儲的業(yè)務(wù)標(biāo)識列表以及所述業(yè)務(wù)請求中攜帶的所述業(yè)務(wù)標(biāo)識,確定需要生成對所述第二關(guān)系型數(shù)據(jù)庫進(jìn)行操作的所述第二sql語句。

所述接收模塊201,將所述業(yè)務(wù)標(biāo)識寫入執(zhí)行所述第一sql語句的線程的線程變量中;

所述生成模塊202,在通過所述線程執(zhí)行所述第一sql語句時,根據(jù)所述線程變量確定所述業(yè)務(wù)標(biāo)識,根據(jù)預(yù)先存儲的業(yè)務(wù)標(biāo)識列表以及所述業(yè)務(wù)標(biāo)識,確定需要生成對所述第二關(guān)系型數(shù)據(jù)庫進(jìn)行操作的所述第二sql語句。

所述執(zhí)行模塊203,建立在所述第一關(guān)系型數(shù)據(jù)庫中執(zhí)行所述第一sql語句的第一事務(wù),建立在所述第二關(guān)系型數(shù)據(jù)庫中執(zhí)行所述第二sql語句的第二事務(wù),根據(jù)所述第一sql語句在所述第一關(guān)系型數(shù)據(jù)庫中執(zhí)行對應(yīng)的操作,根據(jù)所述第二sql語句在所述第二關(guān)系型數(shù)據(jù)庫中執(zhí)行對應(yīng)的操作,當(dāng)所述第一sql語句以及所述第二sql語句均執(zhí)行成功時,提交所述第一事務(wù)以及所述第二事務(wù),當(dāng)所述第一sql語句和/或所述第二sql語句執(zhí)行失敗時,返回錯誤信息,并執(zhí)行回滾操作。

所述第一關(guān)系型數(shù)據(jù)庫為原有數(shù)據(jù)庫,所述第二關(guān)系型數(shù)據(jù)庫為替換數(shù)據(jù)庫,所述對應(yīng)的操作包括增加、刪除、更改中的至少一種。

具體的,上述如圖4所示的數(shù)據(jù)處理裝置可以位于應(yīng)用服務(wù)器中,該應(yīng)用服務(wù)器可以是一臺設(shè)備,也可以是由多臺設(shè)備組成的系統(tǒng)。

本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。

本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合。可提供這些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。

這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。

這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。

在一個典型的配置中,計算設(shè)備包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。

內(nèi)存可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機(jī)可讀介質(zhì)的示例。

計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。

還需要說明的是,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、商品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、商品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、商品或者設(shè)備中還存在另外的相同要素。

本領(lǐng)域技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)或計算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、cd-rom、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。

以上所述僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1