一種數(shù)據(jù)備份方法及裝置制造方法
【專(zhuān)利摘要】本申請(qǐng)公開(kāi)了一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術(shù)中備庫(kù)備份數(shù)據(jù)的速度較低,處理事務(wù)的準(zhǔn)確性較低的問(wèn)題。該方法備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定待處理事務(wù)中包含的各操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),并判斷當(dāng)前正在處理的各事務(wù)中,是否存在與待處理事務(wù)沖突的事務(wù),當(dāng)不存在時(shí),選擇一個(gè)空閑的線程處理待處理事務(wù)中包含的各操作記錄,其中,與待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù)。上述方法通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù),并且一個(gè)線程處理一個(gè)事務(wù)中的所有操作記錄,因此可以有效的提高備庫(kù)備份數(shù)據(jù)的速度,并提高備庫(kù)處理事務(wù)的準(zhǔn)確性。
【專(zhuān)利說(shuō)明】一種數(shù)據(jù)備份方法及裝置
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及通信【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)備份方法及裝置。
【背景技術(shù)】
[0002]MySQL是一種小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)。一般的,MySQL包括主庫(kù)和備庫(kù),主庫(kù)用于提供數(shù)據(jù)管理和數(shù)據(jù)查詢等功能,備庫(kù)用于備份主庫(kù)中的數(shù)據(jù),用以在主庫(kù)發(fā)生故障時(shí)代替主庫(kù)提供相應(yīng)的功能。
[0003]圖1為現(xiàn)有技術(shù)中MySQL中的主庫(kù)將自身的數(shù)據(jù)備份到備庫(kù)的過(guò)程,具體包括以下步驟:
[0004]SlOl:主庫(kù)在對(duì)自身的數(shù)據(jù)進(jìn)行操作時(shí),生成對(duì)應(yīng)的操作記錄并記錄在二進(jìn)制日志(binlog)中。
[0005]其中,主庫(kù)對(duì)自身的數(shù)據(jù)的操作包括:更新操作、插入操作、刪除操作。
[0006]例如,主庫(kù)將自身的數(shù)據(jù)A更新為數(shù)據(jù)B時(shí),生成將該數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,并記錄在binlog日志中。
[0007]S102:備庫(kù)創(chuàng)建一個(gè)I/O線程,通過(guò)該I/O線程讀取主庫(kù)保存的binlog日志。
[0008]S103:備庫(kù)將讀取到的binlog日志轉(zhuǎn)換成中繼日志(relay)。
[0009]其中,主庫(kù)保存的binlog日志中記錄的操作記錄,與備庫(kù)轉(zhuǎn)換的relay日志中記錄的操作記錄相同,只是binlog日志與relay日志的格式不同。
[0010]繼續(xù)沿用上例,由于主庫(kù)的binlog日志中記錄有將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此備庫(kù)轉(zhuǎn)換的relay日志中也包含將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0011]S104:備庫(kù)創(chuàng)建一個(gè)SQL線程,通過(guò)創(chuàng)建的SQL線程依次讀取relay日志中記錄的每個(gè)操作記錄。
[0012]繼續(xù)沿用上例,備庫(kù)讀取到的操作記錄即為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0013]S105:備庫(kù)根據(jù)讀取到的操作記錄,將該操作記錄對(duì)應(yīng)的數(shù)據(jù)讀取到內(nèi)存中,并根據(jù)該操作記錄對(duì)內(nèi)存中的該數(shù)據(jù)進(jìn)行相應(yīng)操作。
[0014]繼續(xù)沿用上例,由于讀取到的操作記錄為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此該操作記錄對(duì)應(yīng)的數(shù)據(jù)即為備庫(kù)中保存的數(shù)據(jù)A。備庫(kù)則將該數(shù)據(jù)A讀取到內(nèi)存中,再將該操作記錄(將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄)解析為相應(yīng)的執(zhí)行語(yǔ)句并執(zhí)行,用以將內(nèi)存中的該數(shù)據(jù)A更新為數(shù)據(jù)B,完成對(duì)主庫(kù)數(shù)據(jù)的備份。
[0015]由上述圖1所示的過(guò)程可以看出,備庫(kù)在備份主庫(kù)中的數(shù)據(jù)時(shí),是通過(guò)創(chuàng)建的一個(gè)SQL線程依次讀取relay日志中的操作記錄進(jìn)行操作的,也即備庫(kù)是通過(guò)一個(gè)SQL線程串行的執(zhí)行relay日志中各操作記錄對(duì)應(yīng)的執(zhí)行語(yǔ)句,實(shí)現(xiàn)數(shù)據(jù)的備份的。而在實(shí)際應(yīng)用中,主庫(kù)通常是通過(guò)多個(gè)線程并行的對(duì)保存的各數(shù)據(jù)進(jìn)行操作的,例如主庫(kù)可以同時(shí)通過(guò)幾十個(gè)線程并行的對(duì)相應(yīng)數(shù)量的數(shù)據(jù)進(jìn)行操作,而備庫(kù)在備份這些數(shù)據(jù)時(shí),只能通過(guò)一個(gè)線程串行的備份這些數(shù)據(jù),這就會(huì)導(dǎo)致備庫(kù)對(duì)主庫(kù)數(shù)據(jù)的備份速度遠(yuǎn)遠(yuǎn)落后于主庫(kù)對(duì)自身保存的數(shù)據(jù)進(jìn)行操作的速度。[0016]為了提高備庫(kù)對(duì)主庫(kù)數(shù)據(jù)進(jìn)行備份的速度,現(xiàn)有技術(shù)中主要有以下三種方法。
[0017]第一種,對(duì)于relay日志中任意兩個(gè)事務(wù),如果一個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的分庫(kù),不同于另一個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的分庫(kù),則備庫(kù)分別通過(guò)兩個(gè)空閑的線程并行的對(duì)這兩個(gè)事務(wù)中包含的操作記錄進(jìn)行處理,以備份主庫(kù)中這兩個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)。如果一個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的分庫(kù),與另一個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的分庫(kù)相同,則備庫(kù)仍然通過(guò)一個(gè)線程串行的對(duì)這兩個(gè)事務(wù)中包含的操作記錄進(jìn)行處理,以備份主庫(kù)中這些操作記錄對(duì)應(yīng)的數(shù)據(jù)。
[0018]其中,binlog日志和relay日志均是以事務(wù)的形式對(duì)操作記錄進(jìn)行記錄的,一個(gè)事務(wù)中包含若干個(gè)操作記錄,這若干個(gè)操作記錄一般是用戶在進(jìn)行一個(gè)業(yè)務(wù)操作時(shí),數(shù)據(jù)庫(kù)根據(jù)這個(gè)業(yè)務(wù)操作對(duì)自身保存的數(shù)據(jù)所要做出的若干個(gè)操作所對(duì)應(yīng)的若干個(gè)操作記錄。并且,在binlog日志和relay日志中,每個(gè)事務(wù)均具有一個(gè)事務(wù)開(kāi)始標(biāo)記和事務(wù)結(jié)束標(biāo)記。
[0019]例如,某用戶有四個(gè)賬號(hào),分別為賬號(hào)A、賬號(hào)B、賬號(hào)C、賬號(hào)D,這四個(gè)賬號(hào)中均有10000元,現(xiàn)該用戶從賬號(hào)A向賬號(hào)B轉(zhuǎn)入1000元,再?gòu)馁~號(hào)C向賬號(hào)D轉(zhuǎn)入1000元,那么主庫(kù)中的binlog日志和備庫(kù)中的relay日志則均會(huì)記錄有兩個(gè)事務(wù)。
[0020]第一個(gè)事務(wù)是從賬號(hào)A向賬號(hào)B轉(zhuǎn)入1000元的事務(wù),該第一個(gè)事務(wù)中包含的操作記錄即為:將賬號(hào)A的余額由10000元更新為9000元的操作記錄,以及,將賬號(hào)B的余額由10000元更新為11000元的操作記錄,共2個(gè)操作記錄。第二個(gè)事務(wù)是從賬號(hào)C向賬號(hào)D轉(zhuǎn)入1000元的事務(wù),該第二個(gè)事務(wù)中包含的操作記錄即為:將賬號(hào)C的余額由10000元更新為9000元的操作記錄,以及,將賬號(hào)D的余額由10000元更新為11000元的操作記錄,也是2個(gè)操作記錄。這兩個(gè)事務(wù)在binlog日志和relay日志中分別具有各自的事務(wù)起始標(biāo)記和事務(wù)結(jié)束標(biāo)記,以區(qū)分不同事務(wù)中包含的操作記錄。
[0021]如果上例中賬號(hào)A的余額數(shù)據(jù)和賬號(hào)B的余額數(shù)據(jù)屬于主庫(kù)中的分庫(kù)1,賬號(hào)C的余額數(shù)據(jù)和賬號(hào)D的余額數(shù)據(jù)屬于主庫(kù)中的分庫(kù)2,則備庫(kù)在備份這4個(gè)數(shù)據(jù)時(shí),在預(yù)先創(chuàng)建的線程中,選擇兩個(gè)空閑的SQL線程,一個(gè)線程用于根據(jù)第一個(gè)事務(wù)中包含的2個(gè)操作記錄備份賬號(hào)A的余額數(shù)據(jù)和賬號(hào)B的余額數(shù)據(jù),另一個(gè)線程用于根據(jù)第二個(gè)事務(wù)中包含的2個(gè)操作記錄備份賬號(hào)C的余額數(shù)據(jù)和賬號(hào)D的余額數(shù)據(jù)。相反的,如果上例中賬號(hào)A的余額數(shù)據(jù)和賬號(hào)B的余額數(shù)據(jù)屬于主庫(kù)中的分庫(kù)I,賬號(hào)C的余額數(shù)據(jù)和賬號(hào)D的余額數(shù)據(jù)也屬于主庫(kù)中的分庫(kù)1,則備庫(kù)仍然通過(guò)一個(gè)SQL線程串行的對(duì)這兩個(gè)事務(wù)中包含的操作記錄進(jìn)行處理,以備份這4個(gè)數(shù)據(jù)。
[0022]但是,采用第一種方法時(shí),由于主庫(kù)中的分庫(kù)的數(shù)量往往較少,一般只有2?3個(gè),而第一種方法備庫(kù)可以采用的并行線程的數(shù)量最多就是主庫(kù)中的分庫(kù)的數(shù)量,因此第一種方法并不能有效的提高備庫(kù)對(duì)主庫(kù)數(shù)據(jù)進(jìn)行備份的速度。
[0023]第二種,對(duì)于relay日志中的任意兩個(gè)操作記錄,如果這兩個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的數(shù)據(jù)表不同,則備庫(kù)分別通過(guò)兩個(gè)空閑的線程并行的對(duì)這兩個(gè)操作記錄進(jìn)行處理。如果這兩個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)在主庫(kù)中所屬的數(shù)據(jù)表相同,則備庫(kù)仍然通過(guò)一個(gè)線程串行的對(duì)這兩個(gè)操作記錄進(jìn)行處理。
[0024]其中,主庫(kù)中包含若干個(gè)數(shù)據(jù)表,每個(gè)數(shù)據(jù)表中包含若干個(gè)數(shù)據(jù)。
[0025]第三種,對(duì)于relay日志中任意兩個(gè)操作記錄,如果這兩個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)不同,則備庫(kù)分別通過(guò)兩個(gè)空閑的線程并行的對(duì)這兩個(gè)操作記錄進(jìn)行處理。如果這兩個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)相同,則備庫(kù)仍然通過(guò)一個(gè)線程串行的對(duì)這兩個(gè)操作記錄進(jìn)行處理。
[0026]可見(jiàn),第二種方法和第三種方法并不是一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,而是可能通過(guò)兩個(gè)或多個(gè)線程分別處理一個(gè)事務(wù)中包含的操作記錄。
[0027]例如,某用戶有三個(gè)賬號(hào),分別為賬號(hào)A、賬號(hào)B、賬號(hào)C,這三個(gè)賬號(hào)中均有10000元,現(xiàn)該用戶從賬號(hào)A向賬號(hào)B轉(zhuǎn)入1000元,再?gòu)馁~號(hào)A向賬號(hào)C轉(zhuǎn)入1000元,那么主庫(kù)中的binlog日志和備庫(kù)中的relay日志則均會(huì)記錄有兩個(gè)事務(wù)。
[0028]第一個(gè)事務(wù)是從賬號(hào)A向賬號(hào)B轉(zhuǎn)入1000元的事務(wù),該第一個(gè)事務(wù)中包含的操作記錄即為:將賬號(hào)A的余額由10000元更新為9000元的操作記錄,以及,將賬號(hào)B的余額由10000元更新為11000元的操作記錄,共2個(gè)操作記錄。第二個(gè)事務(wù)是從賬號(hào)A向賬號(hào)C轉(zhuǎn)入1000元的事務(wù),該第二個(gè)事務(wù)中包含的操作記錄即為:將賬號(hào)A的余額由9000元更新為8000元的操作記錄,以及,將賬號(hào)C的余額由10000元更新為11000元的操作記錄,也是2個(gè)操作記錄。
[0029]按照第二種方法,假設(shè)賬號(hào)A的余額數(shù)據(jù)、賬號(hào)B的余額數(shù)據(jù)、賬號(hào)C的余額數(shù)據(jù)在主庫(kù)中所屬的數(shù)據(jù)表各不相同,則備庫(kù)在預(yù)先創(chuàng)建的線程中,選擇三個(gè)空閑的SQL線程,一個(gè)線程用于串行的處理第一個(gè)事務(wù)中賬號(hào)A的余額由10000元更新為9000元的操作記錄,以及第二個(gè)事務(wù)中賬號(hào)A的余額由9000元更新為8000元的操作記錄,另外兩個(gè)線程分別用于處理第一個(gè)事務(wù)中賬號(hào)B的余額由10000元更新為11000元的操作記錄,以及,第二個(gè)事務(wù)中賬號(hào)C的余額由10000元更新為11000元的操作記錄。并且,這三個(gè)線程是并行處理各自的操作記錄的。
[0030]按照第三種方法,由于賬號(hào)A的余額數(shù)據(jù)、賬號(hào)B的余額數(shù)據(jù)、賬號(hào)C的余額數(shù)據(jù)各不相同,因此備庫(kù)在預(yù)先創(chuàng)建的線程中,選擇三個(gè)空閑的SQL線程,一個(gè)線程用于串行的處理第一個(gè)事務(wù)中賬號(hào)A的余額由10000元更新為9000元的操作記錄,以及第二個(gè)事務(wù)中賬號(hào)A的余額由9000元更新為8000元的操作記錄,另外兩個(gè)線程分別用于處理第一個(gè)事務(wù)中賬號(hào)B的余額由10000元更新為11000元的操作記錄,以及,第二個(gè)事務(wù)中賬號(hào)C的余額由10000元更新為11000元的操作記錄。并且,這三個(gè)線程是并行處理各自的操作記錄的。
[0031]然而,采用第二種或第三種方法時(shí),由于備庫(kù)的一個(gè)線程并不處理一個(gè)事務(wù)中包含的所有操作記錄,因此當(dāng)某個(gè)線程出現(xiàn)故障時(shí),備庫(kù)不能保證對(duì)同一事務(wù)中包含的所有操作記錄進(jìn)行處理的一致性。
[0032]如:在上例中,用于備份賬號(hào)B的余額數(shù)據(jù)的線程如果出現(xiàn)故障,則會(huì)導(dǎo)致處理第一個(gè)事務(wù)中的操作記錄時(shí),將賬號(hào)A的余額由10000元更新為9000元,但是賬號(hào)B的余額并未由10000元更新為11000元。顯然,對(duì)于第一個(gè)事務(wù)中包含的兩個(gè)操作記錄而言,一個(gè)被成功的處理,而另一個(gè)未被成功的處理,導(dǎo)致了備庫(kù)對(duì)該第一個(gè)事務(wù)中包含的兩個(gè)操作記錄處理缺乏一致性,直觀的來(lái)講,由賬號(hào)A轉(zhuǎn)入賬號(hào)B的1000元丟失了。由于保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性是保證數(shù)據(jù)庫(kù)正確處理事務(wù)的基本要素之一,因此采用第二種方法和第三種方法時(shí),無(wú)法保證備庫(kù)處理事務(wù)的準(zhǔn)確性。
【發(fā)明內(nèi)容】
[0033]本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術(shù)中備庫(kù)進(jìn)行數(shù)據(jù)備份的速度較低,處理事務(wù)的準(zhǔn)確性較低的問(wèn)題。
[0034]本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)備份方法,包括:
[0035]備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí);并
[0036]根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),其中,與所述待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù);
[0037]若是,則在設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)處理;
[0038]否則,在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理所述待處理事務(wù)中包含的各操作記錄。
[0039]本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)備份裝置,包括:
[0040]確定模塊,用于針對(duì)relay日志中記錄的待處理事務(wù),確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí);
[0041]判斷模塊,用于根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),其中,與所述待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù);當(dāng)判斷結(jié)果為是時(shí),在設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù);
[0042]處理模塊,用于當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理所述待處理事務(wù)中包含的各操作記錄。
[0043]本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),并判斷當(dāng)前正在處理的各事務(wù)中,是否存在與該待處理事務(wù)沖突的事務(wù),當(dāng)不存在時(shí),選擇一個(gè)空閑的線程處理該待處理事務(wù)中包含的各操作記錄,其中,與該待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù)。由于上述方法是通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù)中包含的操作記錄,因此可以有效的提高備庫(kù)對(duì)主庫(kù)數(shù)據(jù)進(jìn)行備份的速度,并且,由于上述方法一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可以保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔn)確性。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0044]圖1為現(xiàn)有技術(shù)中MySQL中的主庫(kù)將自身的數(shù)據(jù)備份到備庫(kù)的過(guò)程;
[0045]圖2為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份的過(guò)程;
[0046]圖3為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份的詳細(xì)過(guò)程;
[0047]圖4為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】[0048]本申請(qǐng)實(shí)施例為了提高備庫(kù)對(duì)主庫(kù)數(shù)據(jù)進(jìn)行備份的速度,采用多個(gè)線程并行的處理relay日志中的多個(gè)事務(wù)中包含的操作記錄,并且,為了保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,一個(gè)事務(wù)中包含的所有操作記錄只由一個(gè)線程進(jìn)行處理,使備庫(kù)在提高備份速度的同時(shí),保證處理事務(wù)的準(zhǔn)確性。
[0049]下面結(jié)合說(shuō)明書(shū)附圖,對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)描述。
[0050]圖2為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份的過(guò)程,具體包括以下步驟:
[0051]S201:備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
[0052]其中,主庫(kù)和備庫(kù)中保存的每個(gè)數(shù)據(jù)都具有一個(gè)唯一的數(shù)據(jù)標(biāo)識(shí)。例如,當(dāng)一個(gè)數(shù)據(jù)是某個(gè)用戶的賬號(hào)余額數(shù)據(jù)時(shí),則該數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)可以是該賬號(hào)、該用戶的用戶名、該用戶的地址、該用戶的聯(lián)系方式等信息中的一種或幾種的組合,只要保證該數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)是唯一的數(shù)據(jù)標(biāo)識(shí)即可。
[0053]在本申請(qǐng)實(shí)施例中,備庫(kù)讀取主庫(kù)保存的binlog日志,并轉(zhuǎn)換成relay日志后,將relay日志中記錄的當(dāng)前尚未處理的事務(wù)作為待處理事務(wù),針對(duì)待處理事務(wù),備庫(kù)先確定該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
[0054]S202:根據(jù)確定的每個(gè)數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與該待處理事務(wù)沖突的事務(wù),若是,則執(zhí)行步驟S203,否則執(zhí)行步驟S204。
[0055]其中,與該待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與該待處理事務(wù)中包含的至少一個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)相同的事務(wù)。
[0056]例如,備庫(kù)當(dāng)前正在處理事務(wù)A和事務(wù)B,relay日志中的待處理事務(wù)為事務(wù)C,則分別通過(guò)下述兩種情況進(jìn)行詳細(xì)描述。
[0057]情況一、事務(wù)A中包含操作記錄al和操作記錄a2,操作記錄al對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)dl,操作記錄a2對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d2 ;事務(wù)B中包含操作記錄bl,操作記錄bl對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d3 ;事務(wù)C中包含操作記錄Cl和操作記錄c2,操作記錄Cl對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)dl,操作記錄c2對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d4。
[0058]在情況一中,由于待處理事務(wù)(事務(wù)C)中包含的操作記錄Cl對(duì)應(yīng)的數(shù)據(jù)dl,與當(dāng)前正在處理的事務(wù)A中包含的操作記錄al對(duì)應(yīng)的數(shù)據(jù)dl相同,因此事務(wù)C中包含的操作記錄Cl對(duì)應(yīng)的數(shù)據(jù)dl的數(shù)據(jù)標(biāo)識(shí),與事務(wù)A中包含的操作記錄al對(duì)應(yīng)的數(shù)據(jù)dl的數(shù)據(jù)標(biāo)識(shí)也相同,從而,備庫(kù)確定當(dāng)前正在處理的事務(wù)中存在與該待處理事務(wù)沖突的事務(wù),與該待處理事務(wù)(事務(wù)C)沖突的事務(wù)即為事務(wù)A。
[0059]情況二、事務(wù)A中包含操作記錄al和操作記錄a2,操作記錄al對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)dl,操作記錄a2對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d2 ;事務(wù)B中包含操作記錄bl,操作記錄bl對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d3 ;事務(wù)C中包含操作記錄Cl和操作記錄c2,操作記錄Cl對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d5,操作記錄c2對(duì)應(yīng)的數(shù)據(jù)為數(shù)據(jù)d4。
[0060]在情況二中,由于備庫(kù)當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)(數(shù)據(jù)dl、數(shù)據(jù)d2、數(shù)據(jù)d3)與該待處理事務(wù)(事務(wù)C)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)(數(shù)據(jù)d5、數(shù)據(jù)d4)各不相同,因此備庫(kù)當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),與事務(wù)C中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)也各不相同,從而,備庫(kù)確定當(dāng)前正在處理的事務(wù)中不存在與該待處理事務(wù)沖突的事務(wù)。[0061]S203:等待設(shè)定時(shí)間間隔之后,返回步驟S202。
[0062]也即,當(dāng)備庫(kù)確定當(dāng)前正在處理的各事務(wù)中存在與待處理事務(wù)沖突的事務(wù)時(shí),則在等待設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中是否存在與該待處理事務(wù)沖突的事務(wù),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)處理。其中,該設(shè)定時(shí)間間隔可以根據(jù)需要進(jìn)行設(shè)定,例如設(shè)定為2秒。
[0063]以上述情況一為例進(jìn)行說(shuō)明,由于備庫(kù)判斷當(dāng)前正在處理的事務(wù)A與待處理事務(wù)(事務(wù)C)沖突,因此先暫時(shí)不處理事務(wù)C,等待設(shè)定時(shí)間間隔之后,再次判斷當(dāng)前正在處理的事務(wù)中是否存在與事務(wù)C沖突的事務(wù),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)處理。
[0064]S204:在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理該待處理事務(wù)中包含的各操作記錄。
[0065]其中,備庫(kù)預(yù)先創(chuàng)建了若干個(gè)線程。當(dāng)備庫(kù)確定當(dāng)前正在處理的各事務(wù)中不存在與待處理事務(wù)沖突的事務(wù)時(shí),則在預(yù)先創(chuàng)建的若干個(gè)SQL線程中,選擇一個(gè)空閑的SQL線程,并通過(guò)選擇的SQL該線程處理該待處理事務(wù)中包含的所有操作記錄,實(shí)現(xiàn)對(duì)主庫(kù)中相應(yīng)數(shù)據(jù)的備份。
[0066]以上述情況二為例進(jìn)行說(shuō)明,由于備庫(kù)判斷當(dāng)前正在處理的各事務(wù)中,不存在與待處理事務(wù)(事務(wù)C)沖突的事務(wù),因此在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的SQL線程處理事務(wù)C中包含的所有操作記錄(操作記錄Cl和操作記錄c2),也即備庫(kù)采用三個(gè)SQL線程并行的處理事務(wù)A、事務(wù)B和事務(wù)C中包含的操作記錄,并且,一個(gè)事務(wù)中包含的所有操作記錄只由一個(gè)線程進(jìn)行處理。
[0067]由圖2所示的過(guò)程可見(jiàn),在本申請(qǐng)實(shí)施例中,對(duì)于互不沖突的多個(gè)事務(wù),備庫(kù)則分別采用多個(gè)線程多個(gè)事務(wù)進(jìn)行并行處理,由于relay日志中通常存在數(shù)量較多的互不沖突的事務(wù),因此,相比于現(xiàn)有技術(shù)的第一種方法(僅對(duì)屬于不同分庫(kù)的多個(gè)事務(wù)進(jìn)行并行處理的方法),如圖2所示的并行處理多個(gè)互不沖突的事務(wù)的方法,可以有效提高備庫(kù)進(jìn)行數(shù)據(jù)備份的速度。
[0068]并且,在本申請(qǐng)實(shí)施例中。一個(gè)事務(wù)中包含的所有操作記錄只由一個(gè)線程進(jìn)行處理,也可以保證對(duì)同一個(gè)事務(wù)中包含的所有操作記錄處理的一致性。也即,對(duì)于同一個(gè)事務(wù)中包含的所有操作記錄來(lái)講,或者所有的操作記錄全部處理成功,或者所有的操作記錄全部處理失敗,而不存在一部分操作記錄處理成功,另一部分操作記錄處理失敗的情況。從而,相比于現(xiàn)有技術(shù)中第二種方法和第三種方法(將對(duì)應(yīng)的數(shù)據(jù)不同的多個(gè)操作記錄進(jìn)行并行處理的方法),如圖2所示的方法保證了備庫(kù)處理事務(wù)的準(zhǔn)確性。
[0069]繼續(xù)以上例中的情況二為例進(jìn)行說(shuō)明,對(duì)于事務(wù)C中包含的操作記錄Cl和操作記錄c2來(lái)講,備庫(kù)只通過(guò)一個(gè)SQL線程處理操作記錄Cl和操作記錄c2,因此可以保證操作記錄Cl和操作記錄c2或者全部處理成功,或者全部處理失敗,而不會(huì)存在其中一個(gè)處理成功,而另一個(gè)處理失敗的情況,從而保證了備庫(kù)處理事務(wù)C中包含的操作記錄的一致性,進(jìn)而保證了備庫(kù)處理事務(wù)C的準(zhǔn)確性。另外,對(duì)于沖突的多個(gè)事務(wù),則仍然采用串行處理的方法進(jìn)行處理。
[0070]在圖2所示的步驟S201中,備庫(kù)確定待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的方法具體可以為:針對(duì)該待處理事務(wù)中包含的每個(gè)操作記錄,將該操作記錄解析為執(zhí)行語(yǔ)句并執(zhí)行,當(dāng)備庫(kù)在執(zhí)行該執(zhí)行語(yǔ)句的過(guò)程中提取出數(shù)據(jù)標(biāo)識(shí)時(shí),停止執(zhí)行該執(zhí)行語(yǔ)句,并將提取出的數(shù)據(jù)標(biāo)識(shí)確定為該操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
[0071]也即,備庫(kù)在確定待處理事務(wù)中包含的某個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)時(shí),先將該操作記錄解析成執(zhí)行語(yǔ)句,并通過(guò)假執(zhí)行的方式執(zhí)行該執(zhí)行語(yǔ)句,其中,通過(guò)假執(zhí)行的方式執(zhí)行該執(zhí)行語(yǔ)句時(shí),只要在執(zhí)行該執(zhí)行語(yǔ)句的過(guò)程中提取出數(shù)據(jù)標(biāo)識(shí),就停止執(zhí)行該執(zhí)行語(yǔ)句,此時(shí)提取出的數(shù)據(jù)標(biāo)識(shí)就是該操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。具體的,可以在將該操作記錄解析成執(zhí)行語(yǔ)句之后,將該執(zhí)行語(yǔ)句中的fake標(biāo)志位設(shè)置為1,當(dāng)執(zhí)行該執(zhí)行語(yǔ)句時(shí),備庫(kù)識(shí)別出該執(zhí)行語(yǔ)句中的fake標(biāo)識(shí)位為1,則會(huì)通過(guò)假執(zhí)行的方式執(zhí)行該執(zhí)行語(yǔ)句。
[0072]在圖2所示的步驟S202中,為了提高備庫(kù)判斷當(dāng)前正在處理的各事務(wù)中是否存在與待處理事務(wù)沖突的事務(wù)的速度,以進(jìn)一步提高備庫(kù)進(jìn)行數(shù)據(jù)備份的速度,可以通過(guò)哈希(hash)查表的方式進(jìn)行判斷。具體的,備庫(kù)根據(jù)確定的待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),確定每個(gè)數(shù)據(jù)標(biāo)識(shí)的hash值,判斷事務(wù)記錄表中當(dāng)前是否記錄了確定的至少一個(gè)hash值,若是,則確定當(dāng)前正在處理的各事務(wù)中存在與該待處理事務(wù)沖突的事務(wù),否則,確定當(dāng)前正在處理的各事務(wù)中不存在與該待處理事務(wù)沖突的事務(wù)。其中,備庫(kù)需要預(yù)先維護(hù)一個(gè)事務(wù)記錄表,該事務(wù)記錄表中記錄了當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
[0073]也即,如果備庫(kù)確定事務(wù)記錄表中當(dāng)前記錄了待處理事務(wù)中包含的至少一個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值,則確定當(dāng)前正在處理的各事務(wù)中存在與該待處理事務(wù)沖突的事務(wù),否則,確定當(dāng)前正在處理的各事務(wù)中不存在與該待處理事務(wù)沖突的事務(wù)。
[0074]進(jìn)一步的,當(dāng)備庫(kù)采用上述方法判斷當(dāng)前正在處理的各事務(wù)中是否存在與待處理事務(wù)沖突的事務(wù)時(shí),如果確定當(dāng)前正在處理的各事務(wù)中不存在與該待處理事務(wù)沖突的事務(wù),則通過(guò)選擇的空閑SQL線程處理該待處理事務(wù)中的所有操作記錄的同時(shí),還要將確定的該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值記錄在該事務(wù)記錄表中。
[0075]相應(yīng)的,當(dāng)備庫(kù)通過(guò)選擇的線程處理該待處理事務(wù)中包含的所有操作記錄之后,也要?jiǎng)h除事務(wù)記錄表中記錄的該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
[0076]圖3為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份的詳細(xì)過(guò)程,具體包括以下步驟:
[0077]S301:備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
[0078]S302:根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),確定每個(gè)數(shù)據(jù)標(biāo)識(shí)的hash值。
[0079]S303:判斷事務(wù)記錄表中當(dāng)前是否記錄了至少一個(gè)確定的hash值,若是,則執(zhí)行步驟S304,否則執(zhí)行步驟S305。
[0080]其中,事務(wù)記錄表中記錄了當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
[0081]S304:在等待設(shè)定時(shí)間間隔之后,返回步驟S303。
[0082]S305:在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理該待處理事務(wù)中包含的所有操作記錄,將確定的該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值記錄在事務(wù)記錄表中。[0083]S306:通過(guò)選擇的線程處理該待處理事務(wù)中包含的所有操作記錄之后,刪除事務(wù)記錄表中記錄的該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
[0084]另外,在本申請(qǐng)實(shí)施例中,當(dāng)備庫(kù)確定當(dāng)前正在處理的各事務(wù)中存在與待處理事務(wù)沖突的事務(wù)時(shí),也可以進(jìn)一步確定出當(dāng)前正在處理的、且與該待處理事務(wù)沖突的事務(wù),并在處理與該待處理事務(wù)沖突的事務(wù)完畢之后,通過(guò)一個(gè)空閑的線程處理該待處理事務(wù)。通過(guò)該方法,當(dāng)備庫(kù)確定當(dāng)前正在處理的各事務(wù)中存在與待處理事務(wù)沖突的事務(wù)時(shí),則無(wú)需按照設(shè)定時(shí)間間隔進(jìn)行重復(fù)的多次判斷,只需在與待處理事務(wù)沖突的事務(wù)被處理完畢之后,再通過(guò)一個(gè)空閑線程處理該待處理事務(wù)即可,可以盡量節(jié)省處理資源。
[0085]圖4為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份裝置結(jié)構(gòu)示意圖,具體包括:
[0086]確定模塊401,用于針對(duì)relay日志中記錄的待處理事務(wù),確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí);
[0087]判斷模塊402,用于根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),其中,與所述待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù);當(dāng)判斷結(jié)果為是時(shí),在設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù);
[0088]處理模塊403,用于當(dāng)所述判斷模塊402的判斷結(jié)果為否時(shí),在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理所述待處理事務(wù)中包含的各操作記錄。
[0089]所述確定模塊401具體用于,針對(duì)所述待處理事務(wù)中包含的每個(gè)操作記錄,將該操作記錄解析為執(zhí)行語(yǔ)句并執(zhí)行,當(dāng)在執(zhí)行所述執(zhí)行語(yǔ)句的過(guò)程中提取出數(shù)據(jù)標(biāo)識(shí)時(shí),停止執(zhí)行所述執(zhí)行語(yǔ)句,并將提取出的數(shù)據(jù)標(biāo)識(shí)確定為該操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
[0090]所述判斷模塊402具體用于,根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),確定每個(gè)數(shù)據(jù)標(biāo)識(shí)的哈希hash值;判斷事務(wù)記錄表中當(dāng)前是否記錄了至少一個(gè)確定的hash值,其中,所述事務(wù)記錄表中記錄了當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值;若是,則確定當(dāng)前正在處理的各事務(wù)中,存在與所述待處理事務(wù)沖突的事務(wù);否則,確定當(dāng)前正在處理的各事務(wù)中,不存在與所述待處理事務(wù)沖突的事務(wù)。
[0091]所述處理模塊403還用于,當(dāng)所述判斷模塊402的判斷結(jié)果為否時(shí),將確定的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值記錄在所述事務(wù)記錄表中。
[0092]所述處理模塊403還用于,通過(guò)選擇的線程處理所述待處理事務(wù)中包含的所有操作記錄之后,刪除所述事務(wù)記錄表中記錄的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
[0093]本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫(kù)針對(duì)re lay日志中記錄的待處理事務(wù),確定該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),并判斷當(dāng)前正在處理的各事務(wù)中,是否存在與該待處理事務(wù)沖突的事務(wù),當(dāng)不存在時(shí),選擇一個(gè)空閑的線程處理該待處理事務(wù)中包含的各操作記錄,其中,與該待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù)。由于上述方法是通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù)中包含的操作記錄,因此可以有效的提高備庫(kù)對(duì)主庫(kù)數(shù)據(jù)進(jìn)行備份的速度,并且,由于上述方法一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可以保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔn)確性。
[0094] 顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)的精神和范圍。這樣,倘若本申請(qǐng)的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)備份方法,其特征在于,包括: 備庫(kù)針對(duì)relay日志中記錄的待處理事務(wù),確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí);并 根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),其中,與所述待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù); 若是,則在設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),并根據(jù)判斷結(jié)果進(jìn)行相應(yīng)處理; 否則,在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理所述待處理事務(wù)中包含的各操作記錄。
2.如權(quán)利要求1所述的方法,其特征在于,確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí),具體包括: 針對(duì)所述待處理事務(wù)中包含的每個(gè)操作記錄,將該操作記錄解析為執(zhí)行語(yǔ)句并執(zhí)行;當(dāng)所述備庫(kù)在執(zhí)行所述執(zhí)行語(yǔ)句的過(guò)程中提取出數(shù)據(jù)標(biāo)識(shí)時(shí),停止執(zhí)行所述執(zhí)行語(yǔ)句,并將提取出的數(shù)據(jù)標(biāo)識(shí)確定為該操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
3.如權(quán)利要求1所述的方法,其特征在于,根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),具體包括: 根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),確定每個(gè)數(shù)據(jù)標(biāo)識(shí)的哈希hash值; 判斷事務(wù)記錄表中當(dāng)前是否記錄了至少一個(gè)確定的hash值,其中,所述事務(wù)記錄表中記錄了當(dāng)前正在處理的事務(wù)中 包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值; 若是,則確定當(dāng)前正在處理的各事務(wù)中,存在與所述待處理事務(wù)沖突的事務(wù); 否則,確定當(dāng)前正在處理的各事務(wù)中,不存在與所述待處理事務(wù)沖突的事務(wù)。
4.如權(quán)利要求3所述的方法,其特征在于,當(dāng)確定當(dāng)前正在處理的各事務(wù)中,不存在與所述待處理事務(wù)沖突的事務(wù)時(shí),所述方法還包括: 將確定的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值記錄在所述事務(wù)記錄表中。
5.如權(quán)利要求5所述的方法,其特征在于,所述方法還包括: 通過(guò)選擇的線程處理所述待處理事務(wù)中包含的所有操作記錄之后,刪除所述事務(wù)記錄表中記錄的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
6.一種數(shù)據(jù)備份裝置,其特征在于,包括: 確定模塊,用于針對(duì)relay日志中記錄的待處理事務(wù),確定所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí); 判斷模塊,用于根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù),其中,與所述待處理事務(wù)沖突的事務(wù)為:包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)與確定的至少一個(gè)數(shù)據(jù)標(biāo)識(shí)相同的事務(wù);當(dāng)判斷結(jié)果為是時(shí),在設(shè)定時(shí)間間隔之后,繼續(xù)判斷當(dāng)前正在處理的各事務(wù)中,是否存在與所述待處理事務(wù)沖突的事務(wù); 處理模塊,用于當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),在預(yù)先創(chuàng)建的線程中,選擇一個(gè)空閑的線程處理所述待處理事務(wù)中包含的各操作記錄。
7.如權(quán)利要求6所述的裝置,其特征在于,所述確定模塊具體用于,針對(duì)所述待處理事務(wù)中包含的每個(gè)操作記錄,將該操作記錄解析為執(zhí)行語(yǔ)句并執(zhí)行,當(dāng)在執(zhí)行所述執(zhí)行語(yǔ)句的過(guò)程中提取出數(shù)據(jù)標(biāo)識(shí)時(shí),停止執(zhí)行所述執(zhí)行語(yǔ)句,并將提取出的數(shù)據(jù)標(biāo)識(shí)確定為該操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)。
8.如權(quán)利要求6所述的裝置,其特征在于,所述判斷模塊具體用于,根據(jù)確定的每個(gè)數(shù)據(jù)標(biāo)識(shí),確定每個(gè)數(shù)據(jù)標(biāo)識(shí)的哈希hash值;判斷事務(wù)記錄表中當(dāng)前是否記錄了至少一個(gè)確定的hash值,其中,所述事務(wù)記錄表中記錄了當(dāng)前正在處理的事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值;若是,則確定當(dāng)前正在處理的各事務(wù)中,存在與所述待處理事務(wù)沖突的事務(wù);否則,確定當(dāng)前正在處理的各事務(wù)中,不存在與所述待處理事務(wù)沖突的事務(wù)。
9.如權(quán)利要求8所述的裝置,其特征在于,所述處理模塊還用于,當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),將確定的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值記錄在所述事務(wù)記錄表中。
10.如權(quán)利要求9所述的裝置,其特征在于,所述處理模塊還用于,通過(guò)選擇的線程處理所述待處理事務(wù)中包含的所有操作記錄之后,刪除所述事務(wù)記錄表中記錄的所述待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng) 的數(shù)據(jù)的數(shù)據(jù)標(biāo)識(shí)的hash值。
【文檔編號(hào)】G06F11/14GK103593257SQ201210291403
【公開(kāi)日】2014年2月19日 申請(qǐng)日期:2012年8月15日 優(yōu)先權(quán)日:2012年8月15日
【發(fā)明者】劉輝, 翟衛(wèi)祥 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司