两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種數(shù)據(jù)備份方法及裝置制造方法

文檔序號(hào):6503313閱讀:162來(lái)源:國(guó)知局
一種數(shù)據(jù)備份方法及裝置制造方法
【專利摘要】本申請(qǐng)公開了一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術(shù)中備份數(shù)據(jù)的速度較低、準(zhǔn)確性較低的問(wèn)題。該方法針對(duì)待處理事務(wù),確定該待處理事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷當(dāng)前是否存在與待處理事務(wù)沖突的已分配事務(wù),若存在,則將待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,否則,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將該待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。由于上述方法是通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù),而且一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可有效提高備庫(kù)的備份速度,還可保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔ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ù)通過(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ù)通過(guò)一個(gè)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ò)一個(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ù)開始標(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í)通過(guò)兩個(gè)SQL線程進(jìn)行并行的備份,一個(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ù)1,賬號(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]可見,第二種方法和第三種方法并不是一個(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ù)通過(guò)三個(gè)線程進(jìn)行數(shù)據(jù)備份,一個(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ù)通過(guò)三個(gè)線程進(jìn)行數(shù)據(jù)備份,一個(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ù)將relay日志中記錄的未處理的事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定所述待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí);并
[0036]根據(jù)所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù);
[0037]若是,則將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù);
[0038]否則,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
[0039]本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)備份裝置,包括:
[0040]確定模塊,用于將relay日志中記錄的未處理事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定所述待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí);
[0041]判斷模塊,用于根據(jù)所述確定模塊確定的所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù);
[0042]分配模塊,用于在所述判斷模塊的判斷結(jié)果為是時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù);當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
[0043]本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫(kù)針對(duì)待處理事務(wù),確定該待處理事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),并判斷當(dāng)前是否存在與該待處理事務(wù)沖突的已分配事務(wù),若存在,則將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,否則,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將該待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。由于上述方法是通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù),因此可以有效提高備庫(kù)的備份速度,并且,由于上述方法一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可以保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔ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ù)備份裝置結(jié)構(gòu)示意圖。

【具體實(shí)施方式】
[0047]本申請(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)確性。
[0048]下面結(jié)合說(shuō)明書附圖,對(duì)本申請(qǐng)實(shí)施例進(jìn)行詳細(xì)描述。
[0049]圖2為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份的過(guò)程,具體包括以下步驟:
[0050]S201:備庫(kù)將relay日志中記錄的未處理的事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定該待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)。
[0051]在本申請(qǐng)實(shí)施例中,備庫(kù)讀取主庫(kù)保存的binlog日志,并轉(zhuǎn)換成relay日志后,可通過(guò)一個(gè)relay線程依次讀取relay日志中記錄的每個(gè)事務(wù),將relay日志中記錄的當(dāng)前尚未處理的事務(wù)作為待處理事務(wù),針對(duì)待處理事務(wù),備庫(kù)先確定該待處理事務(wù)中包含的每個(gè)操作記錄對(duì)應(yīng)的數(shù)據(jù)所在的表的表標(biāo)識(shí),以及該表對(duì)應(yīng)的分庫(kù)的分庫(kù)標(biāo)識(shí),也即,該表所在的分庫(kù)的分庫(kù)標(biāo)識(shí)。
[0052]其中,主庫(kù)和備庫(kù)中的每個(gè)分庫(kù)都具有一個(gè)唯一的標(biāo)識(shí),即為分庫(kù)標(biāo)識(shí),主庫(kù)和備庫(kù)中的每個(gè)表也具有一個(gè)唯一的標(biāo)識(shí),即為表標(biāo)識(shí)。主庫(kù)(或備庫(kù))、分庫(kù)、表、數(shù)據(jù)的關(guān)系是:主庫(kù)(或備庫(kù))中包含若干個(gè)分庫(kù),分庫(kù)中包含若干個(gè)表,表中包含若干個(gè)數(shù)據(jù)。在relay日志中,每個(gè)事務(wù)中包含的操作記錄對(duì)應(yīng)的數(shù)據(jù)所在的表標(biāo)識(shí),以及該表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)是直接記錄在relay日志中的。
[0053]例如,relay日志中順序記錄了若干個(gè)事務(wù),前四個(gè)事務(wù)為:T1、T2、T3。
[0054]Tl包含的表標(biāo)識(shí)為tl,表標(biāo)識(shí)tl對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為dl,記為(dl,tl);
[0055]T2包含的表標(biāo)識(shí)為tl和t2,表標(biāo)識(shí)tl對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為dl,表標(biāo)識(shí)t2對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為 dl,記為(dl, tl), (dl, t2);
[0056]T3包含的表標(biāo)識(shí)為t3,表標(biāo)識(shí)t3對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為dl,記為(dl,t3);
[0057]T4包含的表標(biāo)識(shí)為t2和t3,表標(biāo)識(shí)t2對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為dl,表標(biāo)識(shí)t3對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)為 dl,記為(dl, t2), (dl, t3)。
[0058]則備庫(kù)先將Tl作為待分配事務(wù),確定Tl中包含的表標(biāo)識(shí)為tl,分庫(kù)標(biāo)識(shí)為dl。
[0059]S202:根據(jù)該待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與該待分配事務(wù)沖突的已分配事務(wù),若是,則執(zhí)行步驟S203,否則執(zhí)行步驟S204。
[0060]在本申請(qǐng)實(shí)施例中,備庫(kù)在判斷是否存在與該待分配事務(wù)沖突的已分配事務(wù)時(shí),可以在各已分配事務(wù)中,判斷是否存在包含的至少一個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),與該待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)相同的已分配事務(wù)。若是,則判定存在與該待分配事務(wù)沖突的已分配事務(wù),與該待分配事務(wù)沖突的已分配事務(wù)即為:包含至少一個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),與該待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)相同的已分配事務(wù)。否則,判定不存在與該待分配事務(wù)沖突的已分配事務(wù)。
[0061]也即,本申請(qǐng)實(shí)施例中,對(duì)于兩個(gè)事務(wù),如果這兩個(gè)事務(wù)中包含的數(shù)據(jù)所屬的表和分庫(kù)均相同,則認(rèn)為這兩個(gè)事務(wù)沖突,反之,如果這兩個(gè)事務(wù)中包含的數(shù)據(jù)所屬的表和分庫(kù)均不相同,則認(rèn)為這兩個(gè)事務(wù)不沖突。
[0062]繼續(xù)沿用上例,針對(duì)事務(wù)Tl,由于此時(shí)備庫(kù)尚未分配事務(wù)給任何一個(gè)線程進(jìn)行處理,也即,當(dāng)前并無(wú)已分配事務(wù),因此,備庫(kù)判定沒有與事務(wù)Tl沖突的已分配事務(wù),執(zhí)行后續(xù)的步驟S204。
[0063]S203:將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù)。
[0064]由于為了保證數(shù)據(jù)備份的準(zhǔn)確性,沖突的事務(wù)需要由一個(gè)線程串行的進(jìn)行處理,因此,當(dāng)通過(guò)上述步驟S202確定存在與該待分配事務(wù)沖突的已分配事務(wù)時(shí),則將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理。其中,備庫(kù)為每個(gè)線程(具體是SQL線程)都預(yù)設(shè)了一個(gè)等待隊(duì)列,對(duì)于一個(gè)SQL線程,該SQL線程可依次處理等待隊(duì)列中分配的各事務(wù)(即,已分配事務(wù))。
[0065]S204:在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將該待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
[0066]當(dāng)通過(guò)上述步驟S202確定不存在與該待分配事務(wù)沖突的已分配事務(wù)時(shí),說(shuō)明該待分配事務(wù)可被分配到任意一個(gè)線程進(jìn)行處理,因此,備庫(kù)可在各線程的等待隊(duì)列中任意選擇一個(gè)等待隊(duì)列,并將該待分配事務(wù)分配到選擇的該等待隊(duì)列中等待處理。
[0067]較佳的,為了均衡各SQL線程的負(fù)載,進(jìn)一步提高備庫(kù)的備份速度,在步驟S204中,備庫(kù)可在各線程的等待隊(duì)列中選擇分配的已分配事務(wù)的數(shù)量最少的等待隊(duì)列,并將該待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。或者,備庫(kù)也可以針對(duì)每個(gè)等待隊(duì)列,確定該等待隊(duì)列中各已分配事務(wù)中分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集,選擇確定出的包含元素的數(shù)量最少的并集對(duì)應(yīng)的等待隊(duì)列。
[0068]繼續(xù)沿用上例,假設(shè)當(dāng)前備庫(kù)有兩個(gè)SQL線程WO和W1,這兩個(gè)線程的等待隊(duì)列中都沒有分配事務(wù),則備庫(kù)可任選一個(gè)線程的等待隊(duì)列,將事務(wù)Tl分配到選擇的等待隊(duì)列中。假設(shè)選擇的是線程WO的等待隊(duì)列,則將Tl分配到WO的等待隊(duì)列中,等待WO處理。
[0069]另外,由于一個(gè)事務(wù)中可能包含多個(gè)不同的表標(biāo)識(shí)或分庫(kù)標(biāo)識(shí),因此,對(duì)于一個(gè)待分配事務(wù)來(lái)說(shuō),已分配事務(wù)中存在的與該待分配事務(wù)沖突的事務(wù)可能不止一個(gè),這些與待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列也可能不同,因此,在上述步驟S203中,當(dāng)存在與該待分配事務(wù)沖突的已分配事務(wù)時(shí),備庫(kù)將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理的方法具體為:當(dāng)與該待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將該待分配事務(wù)分配到與該待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中等待處理;當(dāng)與該待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為兩個(gè)以上時(shí),等待各線程處理各自等待隊(duì)列中的已分配事務(wù),直至與該待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
[0070]繼續(xù)沿用上例,將事務(wù)Tl分配到線程WO的等待隊(duì)列中等待處理后,備庫(kù)繼續(xù)通過(guò)relay線程讀取relay日志中的下一個(gè)事務(wù),即事務(wù)T2,將T2作為待分配事務(wù)。
[0071]由于T2中包含(dl,tl)和(dl,t2),而已分配事務(wù)Tl中也包含(dl,tl),因此已分配事務(wù)Tl與待分配事務(wù)T2沖突,并且與T2沖突的已分配事務(wù)(Tl)所在的等待隊(duì)列只有一個(gè),即為線程WO的等待隊(duì)列,因此,備庫(kù)將待分配事務(wù)T2也分配到WO的等待隊(duì)列中,等待WO的處理。
[0072]分配了 T2后,備庫(kù)繼續(xù)通過(guò)relay線程讀取relay日志中的下一個(gè)事務(wù),即事務(wù)T3,作為待分配事務(wù)。
[0073]由于T3中包含的(dl,t3)與已分配事務(wù)Tl中包含的(dl,tl)不同,與已分配事務(wù)T2中包含(dl,tl)和(dl,t2)也不同,因此,已分配事務(wù)中不存在與待分配事務(wù)T3沖突的事務(wù),而此時(shí)線程WO的等待隊(duì)列中已經(jīng)分配了兩個(gè)事務(wù)(Tl和T2),Wl的等待隊(duì)列中沒有事務(wù),因此,備庫(kù)在WO和Wl的等待隊(duì)列中選擇已分配事務(wù)的數(shù)量最少的等待隊(duì)列,即Wl的等待隊(duì)列,將待分配事務(wù)T3分配到Wl的等待隊(duì)列中,等待Wl進(jìn)行處理。當(dāng)然,也可以確定當(dāng)前WO的等待隊(duì)列中已分配的兩個(gè)事務(wù)Tl和T2分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集,即為[(dl,tl),(dl,t2)],包含2個(gè)元素,而當(dāng)前Wl的等待隊(duì)列中尚未分配任何事務(wù),因此Wl的等待隊(duì)列中已分配事務(wù)分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集為空集,包含O個(gè)元素,從而,備庫(kù)選擇包含元素的數(shù)量最少的并集對(duì)應(yīng)的等待隊(duì)列,S卩,選擇Wl的等待隊(duì)列,將待分配事務(wù)T3分配到Wl的等待隊(duì)列中,等待Wl進(jìn)行處理。
[0074]分配了 T3后,備庫(kù)繼續(xù)通過(guò)relay線程讀取relay日志中的下一個(gè)事務(wù),即事務(wù)T4,作為待分配事務(wù)。
[0075]由于T4中包含的(dl,t2)與已分配事務(wù)T2包含的(dl,t2)相同,因此,已分配事務(wù)T2與待分配事務(wù)T4相同,由于T4中包含的(dl,t3)與已分配事務(wù)T3包含的(dl,t3)相同,因此,已分配事務(wù)T3也與待分配事務(wù)T4沖突。而由于已分配事務(wù)T2所在的等待隊(duì)列為WO所在的等待隊(duì)列,已分配事務(wù)T3所在的等待隊(duì)列為Wl所在的等待隊(duì)列,因此與待分配事務(wù)T4沖突的已分配事務(wù)(T2和T3)所在的等待隊(duì)列為兩個(gè),因此,備庫(kù)等待線程m和Wl處理各自等待隊(duì)列中的已分配事務(wù),直至與待分配事務(wù)T4沖突的已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)為止。
[0076]由于此時(shí)WO的等待隊(duì)列中分配了兩個(gè)事務(wù),即Tl和T2,Wl的等待隊(duì)列中只分配了一個(gè)事務(wù)T3,因此,假設(shè)某一時(shí)刻線程WO處理了已分配事務(wù)Tl,線程Wl處理了已分配事務(wù)T3,則此時(shí)與待分配事務(wù)T4沖突的已分配事務(wù)(只剩事務(wù)T2是與T4沖突的)所在的等待隊(duì)列就只剩一個(gè),即為WO的等待隊(duì)列,因此,備庫(kù)將待分配事務(wù)T4分配到當(dāng)前與該待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中等待處理,即,將T4分配到當(dāng)前與其沖突的T2所在的WO的等待隊(duì)列中,等待WO的處理。
[0077]通過(guò)上述方法,備庫(kù)可通過(guò)多個(gè)SQL線程并行的處理互不沖突的多個(gè)事務(wù),因此可以有效提高備庫(kù)的備份速度,并且,由于上述方法一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可以保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔn)確性。
[0078]另外,現(xiàn)有技術(shù)中也存在基于數(shù)據(jù)的并行備份方法,S卩,如果兩個(gè)事務(wù)中包含的數(shù)據(jù)標(biāo)識(shí)均不相同,則認(rèn)為這兩個(gè)事務(wù)不沖突,可通過(guò)不同的線程進(jìn)行處理。
[0079]但是,由于relay日志中僅記錄了事務(wù)中包含的數(shù)據(jù)所屬的表的表標(biāo)識(shí)和所屬的分庫(kù)的分庫(kù)標(biāo)識(shí),而并未記錄數(shù)據(jù)標(biāo)識(shí),因此,采用這種基于數(shù)據(jù)的并行備份方法,備庫(kù)在通過(guò)relay線程讀取relay日志中的事務(wù)時(shí),需要通過(guò)該relay線程將讀取的該事務(wù)中的每個(gè)操作記錄都轉(zhuǎn)換成執(zhí)行語(yǔ)句,并通過(guò)假執(zhí)行的方式執(zhí)行轉(zhuǎn)換的執(zhí)行語(yǔ)句,以提取出該事務(wù)中的數(shù)據(jù)標(biāo)識(shí)。
[0080]然而,備庫(kù)在讀取relay日志中記錄的各事務(wù)時(shí),必須按照記錄的順序串行的進(jìn)行讀取,也即,relay線程只有一個(gè),而處理事務(wù)的SQL線程卻有多個(gè),由上述現(xiàn)有技術(shù)中基于數(shù)據(jù)的并行備份方法可以看出,這唯一的一個(gè)relay線程除了需要讀取事務(wù)以外,還需要轉(zhuǎn)換執(zhí)行語(yǔ)句并進(jìn)行假執(zhí)行,以確定出該事務(wù)中包含的數(shù)據(jù)標(biāo)識(shí),這樣,relay線程為各SQL線程分配事務(wù)的效率必然較低,導(dǎo)致備份速度較低,因此,現(xiàn)有技術(shù)中基于數(shù)據(jù)的并行備份方法僅適用于主庫(kù)(或備庫(kù))中的分庫(kù)和分表都比較少的場(chǎng)景。
[0081]而由于relay日志中已經(jīng)記錄了事務(wù)中包含的數(shù)據(jù)所屬的表的表標(biāo)識(shí)和所屬的分庫(kù)的分庫(kù)標(biāo)識(shí),因此,本申請(qǐng)實(shí)施例提供的上述如圖2所示的備份方法,備庫(kù)的relay線程只需直接讀取relay日志記錄的事務(wù)中的表標(biāo)識(shí)和分庫(kù)標(biāo)識(shí)即可,而無(wú)需轉(zhuǎn)換執(zhí)行語(yǔ)句并假執(zhí)行,因此,可提高為各SQL線程分配事務(wù)的效率,從而提高備份速度,尤其適用于分庫(kù)或分表較多的場(chǎng)景。
[0082]進(jìn)一步的,在本申請(qǐng)實(shí)施例中,當(dāng)將一個(gè)待分配事務(wù)分配到一個(gè)線程的等待隊(duì)列中時(shí),可建立該待分配事務(wù)中包含的每個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)與該線程的綁定關(guān)系,后續(xù)則可根據(jù)建立的綁定關(guān)系,以及待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),將該待分配事務(wù)分配到相應(yīng)線程的等待隊(duì)列中。后續(xù)針對(duì)某個(gè)待分配事務(wù),如果與其沖突的已分配事務(wù)所在的等待隊(duì)列的數(shù)量為兩個(gè)以上,則等待各線程處理各自等待隊(duì)列中的已分配事務(wù),當(dāng)與該待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中只有一個(gè)時(shí),可將該待分配事務(wù)分配到當(dāng)前沖突的已分配事務(wù)所在的等待隊(duì)列中,并根據(jù)該待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),更新保存的綁定關(guān)系。
[0083]繼續(xù)沿用上例,將Tl分配到WO的等待隊(duì)列中時(shí),則建立Tl中包含的(dl,tl)與WO的綁定關(guān)系。
[0084]在分配T2時(shí),由于還未建立(dl,t2)與某個(gè)線程的綁定關(guān)系,因此可確定與T2沖突的已分配事務(wù)所在的等待隊(duì)列只有一個(gè),從而,根據(jù)保存的(dl,tl)與WO的綁定關(guān)系,直接將T2分配到WO的等待隊(duì)列中,并建立(dl,t2 )與WO的綁定關(guān)系((dl,11)與WO的綁定關(guān)系已經(jīng)在分配Tl時(shí)建立)。
[0085]在分配T3時(shí),由于還未建立(dl,t3)與某個(gè)線程的綁定關(guān)系,因此可確定沒有與T3沖突的已分配事務(wù),從而,備庫(kù)選擇等待隊(duì)列中的已分配事務(wù)最少的等待隊(duì)列,或者,選擇建立綁定關(guān)系的數(shù)量最少的等待隊(duì)列,即線程Wl的等待隊(duì)列,將T3分配到Wl的等待隊(duì)列中,并建立(dl,t3)與Wl的綁定關(guān)系。
[0086]在分配T4時(shí),由于(dl,t2)已經(jīng)與WO建立了綁定關(guān)系,(dl,t3)已經(jīng)與Wl建立了綁定關(guān)系,因此,可確定與T4沖突的已分配事務(wù)所在的等待隊(duì)列可能有兩個(gè),從而,等待WO和Wl處理各自等待隊(duì)列中的事務(wù),并監(jiān)控WO和Wl的等待隊(duì)列,當(dāng)監(jiān)控到WO和Wl的等待隊(duì)列中只剩一個(gè)等待隊(duì)列存在事務(wù)時(shí),將T4分配到尚存在事務(wù)的等待隊(duì)列中,并更新綁定關(guān)系。進(jìn)一步的,由于WO的等待隊(duì)列中分配了 Tl和T2,W1的等待隊(duì)列中只分配了 T3,因此,在某一時(shí)刻,可監(jiān)控到WO處理了 Tl,Wl處理了 T3,此時(shí),只有WO的等待隊(duì)列中尚存在事務(wù)T2 (與T4沖突),因此,將T4分配到WO的等待隊(duì)列中,并建立T4中包含的(dl,t3)與WO的綁定關(guān)系((dl,t2)與WO的綁定關(guān)系已經(jīng)在分配T2時(shí)建立),刪除已建立的(dl,t3)與Wl的綁定關(guān)系。
[0087]此時(shí)的綁定關(guān)系為(dl,tl)、(dl, t2)、(dl, t3)均與WO綁定,Wl未與任何表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)綁定。后續(xù)可基于上述綁定關(guān)系繼續(xù)對(duì)待分配事務(wù)進(jìn)行分配,這里就不在一一贅述。
[0088]以上為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份方法,基于同樣的思路,本申請(qǐng)實(shí)施例還提供一種數(shù)據(jù)備份裝置,如圖3所示。
[0089]圖3為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)備份裝置結(jié)構(gòu)示意圖,具體包括:
[0090]確定模塊301,用于將relay日志中記錄的未處理事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定所述待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí);
[0091]判斷模塊302,用于根據(jù)所述確定模塊301確定的所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù);
[0092]分配模塊303,用于在所述判斷模塊302的判斷結(jié)果為是時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù);當(dāng)所述判斷模塊302的判斷結(jié)果為否時(shí),在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
[0093]所述判斷模塊302具體用于,在各已分配事務(wù)中,判斷是否存在包含的至少一個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),與所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)相同的已分配事務(wù);若存在,則判定存在與所述待分配事務(wù)沖突的已分配事務(wù);否則,判定不存在與所述待分配事務(wù)沖突的已分配事務(wù)。
[0094]所述分配模塊303具體用于,當(dāng)所述判斷模塊302的判斷結(jié)果為是,且與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到與所述待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
[0095]所述分配模塊303具體用于,當(dāng)所述判斷模塊302的判斷結(jié)果為是,且與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為兩個(gè)以上時(shí),等待各線程處理各自等待隊(duì)列中的已分配事務(wù),直至與所述待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
[0096]所述分配模塊303具體用于,當(dāng)所述判斷模塊302的判斷結(jié)果為否時(shí),在各線程的等待隊(duì)列中選擇分配的已分配事務(wù)的數(shù)量最少的等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理;或者,針對(duì)每個(gè)等待隊(duì)列,確定該等待隊(duì)列中各已分配事務(wù)中分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集,選擇確定出的包含元素的數(shù)量最少的并集對(duì)應(yīng)的等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
[0097]具體的上述數(shù)據(jù)備份裝置可以位于備庫(kù)中。
[0098]本申請(qǐng)實(shí)施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫(kù)針對(duì)待處理事務(wù),確定該待處理事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),并判斷當(dāng)前是否存在與該待處理事務(wù)沖突的已分配事務(wù),若存在,則將該待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,否則,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將該待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。由于上述方法是通過(guò)多個(gè)線程并行的處理互不沖突的多個(gè)事務(wù),因此可以有效提高備庫(kù)的備份速度,并且,由于上述方法一個(gè)線程處理一個(gè)事務(wù)中包含的所有操作記錄,因此可以保證對(duì)同一事務(wù)中包含的所有操作記錄處理的一致性,從而提高了備庫(kù)處理事務(wù)的準(zhǔn)確性。
[0099]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
[0100]在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
[0101]內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
[0102]計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
[0103]本申請(qǐng)是參照根據(jù)本申請(qǐng)實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來(lái)描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過(guò)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
[0104]這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
[0105]這些計(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è)方框中指定的功能的步驟。
[0106]盡管已描述了本申請(qǐng)的優(yōu)選實(shí)施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對(duì)這些實(shí)施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實(shí)施例以及落入本申請(qǐng)范圍的所有變更和修改。
[0107]顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本申請(qǐng)實(shí)施例進(jìn)行各種改動(dòng)和變型而不脫離本申請(qǐng)實(shí)施例的精神和范圍。這樣,倘若本申請(qǐng)實(shí)施例的這些修改和變型屬于本申請(qǐng)權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請(qǐng)也意圖包含這些改動(dòng)和變型在內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)備份方法,其特征在于,包括: 備庫(kù)將relay日志中記錄的未處理的事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定所述待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí);并 根據(jù)所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù); 若是,則將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù); 否則,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
2.如權(quán)利要求1所述的方法,其特征在于,判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù),具體包括: 在各已分配事務(wù)中,判斷是否存在包含的至少一個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),與所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)相同的已分配事務(wù); 若存在,則判定存在與所述待分配事務(wù)沖突的已分配事務(wù); 否則,判定不存在與所述待分配事務(wù)沖突的已分配事務(wù)。
3.如權(quán)利要求1所述的方法,其特征在于,將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,具體包括: 當(dāng)與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到與所述待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
4.如權(quán)利要求1所述的方法,其特征在于,將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,具體包括: 當(dāng)與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為兩個(gè)以上時(shí),等待各線程處理各自等待隊(duì)列中的已分配事務(wù),直至與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
5.如權(quán)利要求1所述的方法,其特征在于,在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,具體包括: 在各線程的等待隊(duì)列中選擇分配的已分配事務(wù)的數(shù)量最少的等待隊(duì)列;或者針對(duì)每個(gè)等待隊(duì)列,確定該等待隊(duì)列中各已分配事務(wù)中分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集,選擇確定出的包含元素的數(shù)量最少的并集對(duì)應(yīng)的等待隊(duì)列。
6.一種數(shù)據(jù)備份裝置,其特征在于,包括: 確定模塊,用于將relay日志中記錄的未處理事務(wù)作為待分配事務(wù),針對(duì)待分配事務(wù),確定所述待分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí); 判斷模塊,用于根據(jù)所述確定模塊確定的所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),以及各已分配事務(wù)中包含的表標(biāo)識(shí)以及表標(biāo)識(shí)對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),判斷是否存在與所述待分配事務(wù)沖突的已分配事務(wù); 分配模塊,用于在所述判斷模塊的判斷結(jié)果為是時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理,其中,已分配事務(wù)為已經(jīng)分配到線程的等待隊(duì)列中等待處理的事務(wù);當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),在各線程的等待隊(duì)列中選擇一個(gè)等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
7.如權(quán)利要求6所述的裝置,其特征在于,所述判斷模塊具體用于,在各已分配事務(wù)中,判斷是否存在包含的至少一個(gè)表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí),與所述待分配事務(wù)中包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)相同的已分配事務(wù);若存在,則判定存在與所述待分配事務(wù)沖突的已分配事務(wù);否則,判定不存在與所述待分配事務(wù)沖突的已分配事務(wù)。
8.如權(quán)利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當(dāng)所述判斷模塊的判斷結(jié)果為是,且與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到與所述待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
9.如權(quán)利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當(dāng)所述判斷模塊的判斷結(jié)果為是,且與所述待分配事務(wù)沖突的各已分配事務(wù)所在的等待隊(duì)列的數(shù)量為兩個(gè)以上時(shí),等待各線程處理各自等待隊(duì)列中的已分配事務(wù),直至與所述待分配事務(wù)沖突的已分配事務(wù)所在的等待隊(duì)列的數(shù)量為一個(gè)時(shí),將所述待分配事務(wù)分配到?jīng)_突的已分配事務(wù)所在的等待隊(duì)列中等待處理。
10.如權(quán)利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當(dāng)所述判斷模塊的判斷結(jié)果為否時(shí),在各線程的等待隊(duì)列中選擇分配的已分配事務(wù)的數(shù)量最少的等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理;或者,針對(duì)每個(gè)等待隊(duì)列,確定該等待隊(duì)列中各已分配事務(wù)中分別包含的表標(biāo)識(shí)及其對(duì)應(yīng)的分庫(kù)標(biāo)識(shí)的并集,選擇確定出的包含元素的數(shù)量最少的并集對(duì)應(yīng)的等待隊(duì)列,并將所述待分配事務(wù)分配到選擇的等待隊(duì)列中等待處理。
【文檔編號(hào)】G06F17/30GK104182295SQ201310201886
【公開日】2014年12月3日 申請(qǐng)日期:2013年5月27日 優(yōu)先權(quán)日:2013年5月27日
【發(fā)明者】劉輝, 翟衛(wèi)祥 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
海兴县| 秀山| 张家港市| 万盛区| 大新县| 阿拉善盟| 嘉禾县| 东乌珠穆沁旗| 濉溪县| 霍林郭勒市| 舟曲县| 定襄县| 蓝山县| 邯郸县| 廊坊市| 赣榆县| 淮滨县| 巴塘县| 柘城县| 鲜城| 阜阳市| 阿图什市| 伊金霍洛旗| 山东| 易门县| 德令哈市| 沙雅县| 新源县| 五寨县| 广东省| 高要市| 竹溪县| 建瓯市| 卢湾区| 读书| 卓尼县| 华安县| 平利县| 平乐县| 泰兴市| 承德市|