一種數(shù)據(jù)備份方法及裝置制造方法
【專利摘要】本申請公開了一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術中備份數(shù)據(jù)的速度較低、準確性較低的問題。該方法針對待處理事務,確定該待處理事務中包含的表標識及其對應的分庫標識,判斷當前是否存在與待處理事務沖突的已分配事務,若存在,則將待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,否則,在各線程的等待隊列中選擇一個等待隊列,并將該待分配事務分配到選擇的等待隊列中等待處理。由于上述方法是通過多個線程并行的處理互不沖突的多個事務,而且一個線程處理一個事務中包含的所有操作記錄,因此可有效提高備庫的備份速度,還可保證對同一事務中包含的所有操作記錄處理的一致性,從而提高了備庫處理事務的準確性。
【專利說明】一種數(shù)據(jù)備份方法及裝置
【技術領域】
[0001]本申請涉及通信【技術領域】,尤其涉及一種數(shù)據(jù)備份方法及裝置。
【背景技術】
[0002]MySQL是一種小型關系型數(shù)據(jù)庫管理系統(tǒng)。一般的,MySQL包括主庫和備庫,主庫用于提供數(shù)據(jù)管理和數(shù)據(jù)查詢等功能,備庫用于備份主庫中的數(shù)據(jù),用以在主庫發(fā)生故障時代替主庫提供相應的功能。
[0003]圖1為現(xiàn)有技術中MySQL中的主庫將自身的數(shù)據(jù)備份到備庫的過程,具體包括以下步驟:
[0004]SlOl:主庫在對自身的數(shù)據(jù)進行操作時,生成對應的操作記錄并記錄在二進制日志(binlog)中。
[0005]其中,主庫對自身的數(shù)據(jù)的操作包括:更新操作、插入操作、刪除操作。
[0006]例如,主庫將自身的數(shù)據(jù)A更新為數(shù)據(jù)B時,生成將該數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,并記錄在binlog日志中。
[0007]S102:備庫通過I/O線程讀取主庫保存的binlog日志。
[0008]S103:備庫將讀取到的binlog日志轉換成中繼日志(relay)。
[0009]其中,主庫保存的binlog日志中記錄的操作記錄,與備庫轉換的relay日志中記錄的操作記錄相同,只是binlog日志與relay日志的格式不同。
[0010]繼續(xù)沿用上例,由于主庫的binlog日志中記錄有將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此備庫轉換的relay日志中也包含將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0011]S104:備庫通過一個SQL線程依次讀取relay日志中記錄的每個操作記錄。
[0012]繼續(xù)沿用上例,備庫讀取到的操作記錄即為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄。
[0013]S105:備庫根據(jù)讀取到的操作記錄,將該操作記錄對應的數(shù)據(jù)讀取到內存中,并根據(jù)該操作記錄對內存中的該數(shù)據(jù)進行相應操作。
[0014]繼續(xù)沿用上例,由于讀取到的操作記錄為將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄,因此該操作記錄對應的數(shù)據(jù)即為備庫中保存的數(shù)據(jù)A。備庫則將該數(shù)據(jù)A讀取到內存中,再將該操作記錄(將數(shù)據(jù)A更新為數(shù)據(jù)B的操作記錄)解析為相應的執(zhí)行語句并執(zhí)行,用以將內存中的該數(shù)據(jù)A更新為數(shù)據(jù)B,完成對主庫數(shù)據(jù)的備份。
[0015]由上述圖1所示的過程可以看出,備庫在備份主庫中的數(shù)據(jù)時,是通過一個SQL線程依次讀取relay日志中的操作記錄進行操作的,也即備庫是通過一個SQL線程串行的執(zhí)行relay日志中各操作記錄對應的執(zhí)行語句,實現(xiàn)數(shù)據(jù)的備份的。而在實際應用中,主庫通常是通過多個線程并行的對保存的各數(shù)據(jù)進行操作的,例如主庫可以同時通過幾十個線程并行的對相應數(shù)量的數(shù)據(jù)進行操作,而備庫在備份這些數(shù)據(jù)時,只能通過一個線程串行的備份這些數(shù)據(jù),這就會導致備庫對主庫數(shù)據(jù)的備份速度遠遠落后于主庫對自身保存的數(shù)據(jù)進行操作的速度。
[0016]為了提高備庫對主庫數(shù)據(jù)進行備份的速度,現(xiàn)有技術中主要有以下三種方法。
[0017]第一種,對于relay日志中任意兩個事務,如果一個事務中包含的操作記錄對應的數(shù)據(jù)在主庫中所屬的分庫,不同于另一個事務中包含的操作記錄對應的數(shù)據(jù)在主庫中所屬的分庫,則備庫通過兩個線程并行的對這兩個事務中包含的操作記錄進行處理,以備份主庫中這兩個事務中包含的操作記錄對應的數(shù)據(jù)。如果一個事務中包含的操作記錄對應的數(shù)據(jù)在主庫中所屬的分庫,與另一個事務中包含的操作記錄對應的數(shù)據(jù)在主庫中所屬的分庫相同,則備庫仍然通過一個線程串行的對這兩個事務中包含的操作記錄進行處理,以備份主庫中這些操作記錄對應的數(shù)據(jù)。
[0018]其中,binlog日志和relay日志均是以事務的形式對操作記錄進行記錄的,一個事務中包含若干個操作記錄,這若干個操作記錄一般是用戶在進行一個業(yè)務操作時,數(shù)據(jù)庫根據(jù)這個業(yè)務操作對自身保存的數(shù)據(jù)所要做出的若干個操作所對應的若干個操作記錄。并且,在binlog日志和relay日志中,每個事務均具有一個事務開始標記和事務結束標記。
[0019]例如,某用戶有四個賬號,分別為賬號A、賬號B、賬號C、賬號D,這四個賬號中均有10000元,現(xiàn)該用戶從賬號A向賬號B轉入1000元,再從賬號C向賬號D轉入1000元,那么主庫中的binlog日志和備庫中的relay日志則均會記錄有兩個事務。
[0020]第一個事務是從賬號A向賬號B轉入1000元的事務,該第一個事務中包含的操作記錄即為:將賬號A的余額由10000元更新為9000元的操作記錄,以及,將賬號B的余額由10000元更新為11000元的操作記錄,共2個操作記錄。第二個事務是從賬號C向賬號D轉入1000元的事務,該第二個事務中包含的操作記錄即為:將賬號C的余額由10000元更新為9000元的操作記錄,以及,將賬號D的余額由10000元更新為11000元的操作記錄,也是2個操作記錄。這兩個事務在binlog日志和relay日志中分別具有各自的事務起始標記和事務結束標記,以區(qū)分不同事務中包含的操作記錄。
[0021]如果上例中賬號A的余額數(shù)據(jù)和賬號B的余額數(shù)據(jù)屬于主庫中的分庫1,賬號C的余額數(shù)據(jù)和賬號D的余額數(shù)據(jù)屬于主庫中的分庫2,則備庫在備份這4個數(shù)據(jù)時通過兩個SQL線程進行并行的備份,一個線程用于根據(jù)第一個事務中包含的2個操作記錄備份賬號A的余額數(shù)據(jù)和賬號B的余額數(shù)據(jù),另一個線程用于根據(jù)第二個事務中包含的2個操作記錄備份賬號C的余額數(shù)據(jù)和賬號D的余額數(shù)據(jù)。相反的,如果上例中賬號A的余額數(shù)據(jù)和賬號B的余額數(shù)據(jù)屬于主庫中的分庫1,賬號C的余額數(shù)據(jù)和賬號D的余額數(shù)據(jù)也屬于主庫中的分庫1,則備庫仍然通過一個SQL線程串行的對這兩個事務中包含的操作記錄進行處理,以備份這4個數(shù)據(jù)。
[0022]但是,采用第一種方法時,由于主庫中的分庫的數(shù)量往往較少,一般只有2?3個,而第一種方法備庫可以采用的并行線程的數(shù)量最多就是主庫中的分庫的數(shù)量,因此第一種方法并不能有效的提高備庫對主庫數(shù)據(jù)進行備份的速度。
[0023]第二種,對于relay日志中的任意兩個操作記錄,如果這兩個操作記錄對應的數(shù)據(jù)在主庫中所屬的數(shù)據(jù)表不同,則備庫通過兩個線程并行的對這兩個操作記錄進行處理。如果這兩個操作記錄對應的數(shù)據(jù)在主庫中所屬的數(shù)據(jù)表相同,則備庫仍然通過一個線程串行的對這兩個操作記錄進行處理。
[0024]其中,主庫中包含若干個數(shù)據(jù)表,每個數(shù)據(jù)表中包含若干個數(shù)據(jù)。
[0025]第三種,對于relay日志中任意兩個操作記錄,如果這兩個操作記錄對應的數(shù)據(jù)不同,則備庫通過兩個線程并行的對這兩個操作記錄進行處理。如果這兩個操作記錄對應的數(shù)據(jù)相同,則備庫仍然通過一個線程串行的對這兩個操作記錄進行處理。
[0026]可見,第二種方法和第三種方法并不是一個線程處理一個事務中包含的所有操作記錄,而是可能通過兩個或多個線程分別處理一個事務中包含的操作記錄。
[0027]例如,某用戶有三個賬號,分別為賬號A、賬號B、賬號C,這三個賬號中均有10000元,現(xiàn)該用戶從賬號A向賬號B轉入1000元,再從賬號A向賬號C轉入1000元,那么主庫中的binlog日志和備庫中的relay日志則均會記錄有兩個事務。
[0028]第一個事務是從賬號A向賬號B轉入1000元的事務,該第一個事務中包含的操作記錄即為:將賬號A的余額由10000元更新為9000元的操作記錄,以及,將賬號B的余額由10000元更新為11000元的操作記錄,共2個操作記錄。第二個事務是從賬號A向賬號C轉入1000元的事務,該第二個事務中包含的操作記錄即為:將賬號A的余額由9000元更新為8000元的操作記錄,以及,將賬號C的余額由10000元更新為11000元的操作記錄,也是2個操作記錄。
[0029]按照第二種方法,假設賬號A的余額數(shù)據(jù)、賬號B的余額數(shù)據(jù)、賬號C的余額數(shù)據(jù)在主庫中所屬的數(shù)據(jù)表各不相同,則備庫通過三個線程進行數(shù)據(jù)備份,一個線程用于串行的處理第一個事務中賬號A的余額由10000元更新為9000元的操作記錄,以及第二個事務中賬號A的余額由9000元更新為8000元的操作記錄,另外兩個線程分別用于處理第一個事務中賬號B的余額由10000元更新為11000元的操作記錄,以及,第二個事務中賬號C的余額由10000元更新為11000元的操作記錄。并且,這三個線程是并行處理各自的操作記錄的。
[0030]按照第三種方法,由于賬號A的余額數(shù)據(jù)、賬號B的余額數(shù)據(jù)、賬號C的余額數(shù)據(jù)各不相同,因此備庫通過三個線程進行數(shù)據(jù)備份,一個線程用于串行的處理第一個事務中賬號A的余額由10000元更新為9000元的操作記錄,以及第二個事務中賬號A的余額由9000元更新為8000元的操作記錄,另外兩個線程分別用于處理第一個事務中賬號B的余額由10000元更新為11000元的操作記錄,以及,第二個事務中賬號C的余額由10000元更新為11000元的操作記錄。并且,這三個線程是并行處理各自的操作記錄的。
[0031]然而,采用第二種或第三種方法時,由于備庫的一個線程并不處理一個事務中包含的所有操作記錄,因此當某個線程出現(xiàn)故障時,備庫不能保證對同一事務中包含的所有操作記錄進行處理的一致性。
[0032]如:在上例中,用于備份賬號B的余額數(shù)據(jù)的線程如果出現(xiàn)故障,則會導致處理第一個事務中的操作記錄時,將賬號A的余額由10000元更新為9000元,但是賬號B的余額并未由10000元更新為11000元。顯然,對于第一個事務中包含的兩個操作記錄而言,一個被成功的處理,而另一個未被成功的處理,導致了備庫對該第一個事務中包含的兩個操作記錄處理缺乏一致性,直觀的來講,由賬號A轉入賬號B的1000元丟失了。由于保證對同一事務中包含的所有操作記錄處理的一致性是保證數(shù)據(jù)庫正確處理事務的基本要素之一,因此采用第二種方法和第三種方法時,無法保證備庫處理事務的準確性。
【發(fā)明內容】
[0033]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,用以解決現(xiàn)有技術中備庫進行數(shù)據(jù)備份的速度較低,處理事務的準確性較低的問題。
[0034]本申請實施例提供的一種數(shù)據(jù)備份方法,包括:
[0035]備庫將relay日志中記錄的未處理的事務作為待分配事務,針對待分配事務,確定所述待分配事務中包含的表標識以及表標識對應的分庫標識;并
[0036]根據(jù)所述待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與所述待分配事務沖突的已分配事務;
[0037]若是,則將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務;
[0038]否則,在各線程的等待隊列中選擇一個等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
[0039]本申請實施例提供的一種數(shù)據(jù)備份裝置,包括:
[0040]確定模塊,用于將relay日志中記錄的未處理事務作為待分配事務,針對待分配事務,確定所述待分配事務中包含的表標識以及表標識對應的分庫標識;
[0041]判斷模塊,用于根據(jù)所述確定模塊確定的所述待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與所述待分配事務沖突的已分配事務;
[0042]分配模塊,用于在所述判斷模塊的判斷結果為是時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務;當所述判斷模塊的判斷結果為否時,在各線程的等待隊列中選擇一個等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
[0043]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫針對待處理事務,確定該待處理事務中包含的表標識以及表標識對應的分庫標識,并判斷當前是否存在與該待處理事務沖突的已分配事務,若存在,則將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,否則,在各線程的等待隊列中選擇一個等待隊列,并將該待分配事務分配到選擇的等待隊列中等待處理。由于上述方法是通過多個線程并行的處理互不沖突的多個事務,因此可以有效提高備庫的備份速度,并且,由于上述方法一個線程處理一個事務中包含的所有操作記錄,因此可以保證對同一事務中包含的所有操作記錄處理的一致性,從而提高了備庫處理事務的準確性。
【專利附圖】
【附圖說明】
[0044]圖1為現(xiàn)有技術中MySQL中的主庫將自身的數(shù)據(jù)備份到備庫的過程;
[0045]圖2為本申請實施例提供的數(shù)據(jù)備份的過程;
[0046]圖3為本申請實施例提供的數(shù)據(jù)備份裝置結構示意圖。
【具體實施方式】
[0047]本申請實施例為了提高備庫對主庫數(shù)據(jù)進行備份的速度,采用多個線程并行的處理relay日志中的多個事務中包含的操作記錄,并且,為了保證對同一事務中包含的所有操作記錄處理的一致性,一個事務中包含的所有操作記錄只由一個線程進行處理,使備庫在提高備份速度的同時,保證處理事務的準確性。
[0048]下面結合說明書附圖,對本申請實施例進行詳細描述。
[0049]圖2為本申請實施例提供的數(shù)據(jù)備份的過程,具體包括以下步驟:
[0050]S201:備庫將relay日志中記錄的未處理的事務作為待分配事務,針對待分配事務,確定該待分配事務中包含的表標識以及表標識對應的分庫標識。
[0051]在本申請實施例中,備庫讀取主庫保存的binlog日志,并轉換成relay日志后,可通過一個relay線程依次讀取relay日志中記錄的每個事務,將relay日志中記錄的當前尚未處理的事務作為待處理事務,針對待處理事務,備庫先確定該待處理事務中包含的每個操作記錄對應的數(shù)據(jù)所在的表的表標識,以及該表對應的分庫的分庫標識,也即,該表所在的分庫的分庫標識。
[0052]其中,主庫和備庫中的每個分庫都具有一個唯一的標識,即為分庫標識,主庫和備庫中的每個表也具有一個唯一的標識,即為表標識。主庫(或備庫)、分庫、表、數(shù)據(jù)的關系是:主庫(或備庫)中包含若干個分庫,分庫中包含若干個表,表中包含若干個數(shù)據(jù)。在relay日志中,每個事務中包含的操作記錄對應的數(shù)據(jù)所在的表標識,以及該表標識對應的分庫標識是直接記錄在relay日志中的。
[0053]例如,relay日志中順序記錄了若干個事務,前四個事務為:T1、T2、T3。
[0054]Tl包含的表標識為tl,表標識tl對應的分庫標識為dl,記為(dl,tl);
[0055]T2包含的表標識為tl和t2,表標識tl對應的分庫標識為dl,表標識t2對應的分庫標識為 dl,記為(dl, tl), (dl, t2);
[0056]T3包含的表標識為t3,表標識t3對應的分庫標識為dl,記為(dl,t3);
[0057]T4包含的表標識為t2和t3,表標識t2對應的分庫標識為dl,表標識t3對應的分庫標識為 dl,記為(dl, t2), (dl, t3)。
[0058]則備庫先將Tl作為待分配事務,確定Tl中包含的表標識為tl,分庫標識為dl。
[0059]S202:根據(jù)該待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與該待分配事務沖突的已分配事務,若是,則執(zhí)行步驟S203,否則執(zhí)行步驟S204。
[0060]在本申請實施例中,備庫在判斷是否存在與該待分配事務沖突的已分配事務時,可以在各已分配事務中,判斷是否存在包含的至少一個表標識及其對應的分庫標識,與該待分配事務中包含的表標識及其對應的分庫標識相同的已分配事務。若是,則判定存在與該待分配事務沖突的已分配事務,與該待分配事務沖突的已分配事務即為:包含至少一個表標識及其對應的分庫標識,與該待分配事務中包含的表標識及其對應的分庫標識相同的已分配事務。否則,判定不存在與該待分配事務沖突的已分配事務。
[0061]也即,本申請實施例中,對于兩個事務,如果這兩個事務中包含的數(shù)據(jù)所屬的表和分庫均相同,則認為這兩個事務沖突,反之,如果這兩個事務中包含的數(shù)據(jù)所屬的表和分庫均不相同,則認為這兩個事務不沖突。
[0062]繼續(xù)沿用上例,針對事務Tl,由于此時備庫尚未分配事務給任何一個線程進行處理,也即,當前并無已分配事務,因此,備庫判定沒有與事務Tl沖突的已分配事務,執(zhí)行后續(xù)的步驟S204。
[0063]S203:將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務。
[0064]由于為了保證數(shù)據(jù)備份的準確性,沖突的事務需要由一個線程串行的進行處理,因此,當通過上述步驟S202確定存在與該待分配事務沖突的已分配事務時,則將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理。其中,備庫為每個線程(具體是SQL線程)都預設了一個等待隊列,對于一個SQL線程,該SQL線程可依次處理等待隊列中分配的各事務(即,已分配事務)。
[0065]S204:在各線程的等待隊列中選擇一個等待隊列,并將該待分配事務分配到選擇的等待隊列中等待處理。
[0066]當通過上述步驟S202確定不存在與該待分配事務沖突的已分配事務時,說明該待分配事務可被分配到任意一個線程進行處理,因此,備庫可在各線程的等待隊列中任意選擇一個等待隊列,并將該待分配事務分配到選擇的該等待隊列中等待處理。
[0067]較佳的,為了均衡各SQL線程的負載,進一步提高備庫的備份速度,在步驟S204中,備庫可在各線程的等待隊列中選擇分配的已分配事務的數(shù)量最少的等待隊列,并將該待分配事務分配到選擇的等待隊列中等待處理?;蛘撸瑐鋷煲部梢葬槍γ總€等待隊列,確定該等待隊列中各已分配事務中分別包含的表標識及其對應的分庫標識的并集,選擇確定出的包含元素的數(shù)量最少的并集對應的等待隊列。
[0068]繼續(xù)沿用上例,假設當前備庫有兩個SQL線程WO和W1,這兩個線程的等待隊列中都沒有分配事務,則備庫可任選一個線程的等待隊列,將事務Tl分配到選擇的等待隊列中。假設選擇的是線程WO的等待隊列,則將Tl分配到WO的等待隊列中,等待WO處理。
[0069]另外,由于一個事務中可能包含多個不同的表標識或分庫標識,因此,對于一個待分配事務來說,已分配事務中存在的與該待分配事務沖突的事務可能不止一個,這些與待分配事務沖突的已分配事務所在的等待隊列也可能不同,因此,在上述步驟S203中,當存在與該待分配事務沖突的已分配事務時,備庫將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理的方法具體為:當與該待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將該待分配事務分配到與該待分配事務沖突的已分配事務所在的等待隊列中等待處理;當與該待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為兩個以上時,等待各線程處理各自等待隊列中的已分配事務,直至與該待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理。
[0070]繼續(xù)沿用上例,將事務Tl分配到線程WO的等待隊列中等待處理后,備庫繼續(xù)通過relay線程讀取relay日志中的下一個事務,即事務T2,將T2作為待分配事務。
[0071]由于T2中包含(dl,tl)和(dl,t2),而已分配事務Tl中也包含(dl,tl),因此已分配事務Tl與待分配事務T2沖突,并且與T2沖突的已分配事務(Tl)所在的等待隊列只有一個,即為線程WO的等待隊列,因此,備庫將待分配事務T2也分配到WO的等待隊列中,等待WO的處理。
[0072]分配了 T2后,備庫繼續(xù)通過relay線程讀取relay日志中的下一個事務,即事務T3,作為待分配事務。
[0073]由于T3中包含的(dl,t3)與已分配事務Tl中包含的(dl,tl)不同,與已分配事務T2中包含(dl,tl)和(dl,t2)也不同,因此,已分配事務中不存在與待分配事務T3沖突的事務,而此時線程WO的等待隊列中已經分配了兩個事務(Tl和T2),Wl的等待隊列中沒有事務,因此,備庫在WO和Wl的等待隊列中選擇已分配事務的數(shù)量最少的等待隊列,即Wl的等待隊列,將待分配事務T3分配到Wl的等待隊列中,等待Wl進行處理。當然,也可以確定當前WO的等待隊列中已分配的兩個事務Tl和T2分別包含的表標識及其對應的分庫標識的并集,即為[(dl,tl),(dl,t2)],包含2個元素,而當前Wl的等待隊列中尚未分配任何事務,因此Wl的等待隊列中已分配事務分別包含的表標識及其對應的分庫標識的并集為空集,包含O個元素,從而,備庫選擇包含元素的數(shù)量最少的并集對應的等待隊列,S卩,選擇Wl的等待隊列,將待分配事務T3分配到Wl的等待隊列中,等待Wl進行處理。
[0074]分配了 T3后,備庫繼續(xù)通過relay線程讀取relay日志中的下一個事務,即事務T4,作為待分配事務。
[0075]由于T4中包含的(dl,t2)與已分配事務T2包含的(dl,t2)相同,因此,已分配事務T2與待分配事務T4相同,由于T4中包含的(dl,t3)與已分配事務T3包含的(dl,t3)相同,因此,已分配事務T3也與待分配事務T4沖突。而由于已分配事務T2所在的等待隊列為WO所在的等待隊列,已分配事務T3所在的等待隊列為Wl所在的等待隊列,因此與待分配事務T4沖突的已分配事務(T2和T3)所在的等待隊列為兩個,因此,備庫等待線程m和Wl處理各自等待隊列中的已分配事務,直至與待分配事務T4沖突的已分配事務所在的等待隊列的數(shù)量為一個為止。
[0076]由于此時WO的等待隊列中分配了兩個事務,即Tl和T2,Wl的等待隊列中只分配了一個事務T3,因此,假設某一時刻線程WO處理了已分配事務Tl,線程Wl處理了已分配事務T3,則此時與待分配事務T4沖突的已分配事務(只剩事務T2是與T4沖突的)所在的等待隊列就只剩一個,即為WO的等待隊列,因此,備庫將待分配事務T4分配到當前與該待分配事務沖突的已分配事務所在的等待隊列中等待處理,即,將T4分配到當前與其沖突的T2所在的WO的等待隊列中,等待WO的處理。
[0077]通過上述方法,備庫可通過多個SQL線程并行的處理互不沖突的多個事務,因此可以有效提高備庫的備份速度,并且,由于上述方法一個線程處理一個事務中包含的所有操作記錄,因此可以保證對同一事務中包含的所有操作記錄處理的一致性,從而提高了備庫處理事務的準確性。
[0078]另外,現(xiàn)有技術中也存在基于數(shù)據(jù)的并行備份方法,S卩,如果兩個事務中包含的數(shù)據(jù)標識均不相同,則認為這兩個事務不沖突,可通過不同的線程進行處理。
[0079]但是,由于relay日志中僅記錄了事務中包含的數(shù)據(jù)所屬的表的表標識和所屬的分庫的分庫標識,而并未記錄數(shù)據(jù)標識,因此,采用這種基于數(shù)據(jù)的并行備份方法,備庫在通過relay線程讀取relay日志中的事務時,需要通過該relay線程將讀取的該事務中的每個操作記錄都轉換成執(zhí)行語句,并通過假執(zhí)行的方式執(zhí)行轉換的執(zhí)行語句,以提取出該事務中的數(shù)據(jù)標識。
[0080]然而,備庫在讀取relay日志中記錄的各事務時,必須按照記錄的順序串行的進行讀取,也即,relay線程只有一個,而處理事務的SQL線程卻有多個,由上述現(xiàn)有技術中基于數(shù)據(jù)的并行備份方法可以看出,這唯一的一個relay線程除了需要讀取事務以外,還需要轉換執(zhí)行語句并進行假執(zhí)行,以確定出該事務中包含的數(shù)據(jù)標識,這樣,relay線程為各SQL線程分配事務的效率必然較低,導致備份速度較低,因此,現(xiàn)有技術中基于數(shù)據(jù)的并行備份方法僅適用于主庫(或備庫)中的分庫和分表都比較少的場景。
[0081]而由于relay日志中已經記錄了事務中包含的數(shù)據(jù)所屬的表的表標識和所屬的分庫的分庫標識,因此,本申請實施例提供的上述如圖2所示的備份方法,備庫的relay線程只需直接讀取relay日志記錄的事務中的表標識和分庫標識即可,而無需轉換執(zhí)行語句并假執(zhí)行,因此,可提高為各SQL線程分配事務的效率,從而提高備份速度,尤其適用于分庫或分表較多的場景。
[0082]進一步的,在本申請實施例中,當將一個待分配事務分配到一個線程的等待隊列中時,可建立該待分配事務中包含的每個表標識及其對應的分庫標識與該線程的綁定關系,后續(xù)則可根據(jù)建立的綁定關系,以及待分配事務中包含的表標識及其對應的分庫標識,將該待分配事務分配到相應線程的等待隊列中。后續(xù)針對某個待分配事務,如果與其沖突的已分配事務所在的等待隊列的數(shù)量為兩個以上,則等待各線程處理各自等待隊列中的已分配事務,當與該待分配事務沖突的已分配事務所在的等待隊列中只有一個時,可將該待分配事務分配到當前沖突的已分配事務所在的等待隊列中,并根據(jù)該待分配事務中包含的表標識及其對應的分庫標識,更新保存的綁定關系。
[0083]繼續(xù)沿用上例,將Tl分配到WO的等待隊列中時,則建立Tl中包含的(dl,tl)與WO的綁定關系。
[0084]在分配T2時,由于還未建立(dl,t2)與某個線程的綁定關系,因此可確定與T2沖突的已分配事務所在的等待隊列只有一個,從而,根據(jù)保存的(dl,tl)與WO的綁定關系,直接將T2分配到WO的等待隊列中,并建立(dl,t2 )與WO的綁定關系((dl,11)與WO的綁定關系已經在分配Tl時建立)。
[0085]在分配T3時,由于還未建立(dl,t3)與某個線程的綁定關系,因此可確定沒有與T3沖突的已分配事務,從而,備庫選擇等待隊列中的已分配事務最少的等待隊列,或者,選擇建立綁定關系的數(shù)量最少的等待隊列,即線程Wl的等待隊列,將T3分配到Wl的等待隊列中,并建立(dl,t3)與Wl的綁定關系。
[0086]在分配T4時,由于(dl,t2)已經與WO建立了綁定關系,(dl,t3)已經與Wl建立了綁定關系,因此,可確定與T4沖突的已分配事務所在的等待隊列可能有兩個,從而,等待WO和Wl處理各自等待隊列中的事務,并監(jiān)控WO和Wl的等待隊列,當監(jiān)控到WO和Wl的等待隊列中只剩一個等待隊列存在事務時,將T4分配到尚存在事務的等待隊列中,并更新綁定關系。進一步的,由于WO的等待隊列中分配了 Tl和T2,W1的等待隊列中只分配了 T3,因此,在某一時刻,可監(jiān)控到WO處理了 Tl,Wl處理了 T3,此時,只有WO的等待隊列中尚存在事務T2 (與T4沖突),因此,將T4分配到WO的等待隊列中,并建立T4中包含的(dl,t3)與WO的綁定關系((dl,t2)與WO的綁定關系已經在分配T2時建立),刪除已建立的(dl,t3)與Wl的綁定關系。
[0087]此時的綁定關系為(dl,tl)、(dl, t2)、(dl, t3)均與WO綁定,Wl未與任何表標識及其對應的分庫標識綁定。后續(xù)可基于上述綁定關系繼續(xù)對待分配事務進行分配,這里就不在一一贅述。
[0088]以上為本申請實施例提供的數(shù)據(jù)備份方法,基于同樣的思路,本申請實施例還提供一種數(shù)據(jù)備份裝置,如圖3所示。
[0089]圖3為本申請實施例提供的數(shù)據(jù)備份裝置結構示意圖,具體包括:
[0090]確定模塊301,用于將relay日志中記錄的未處理事務作為待分配事務,針對待分配事務,確定所述待分配事務中包含的表標識以及表標識對應的分庫標識;
[0091]判斷模塊302,用于根據(jù)所述確定模塊301確定的所述待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與所述待分配事務沖突的已分配事務;
[0092]分配模塊303,用于在所述判斷模塊302的判斷結果為是時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務;當所述判斷模塊302的判斷結果為否時,在各線程的等待隊列中選擇一個等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
[0093]所述判斷模塊302具體用于,在各已分配事務中,判斷是否存在包含的至少一個表標識及其對應的分庫標識,與所述待分配事務中包含的表標識及其對應的分庫標識相同的已分配事務;若存在,則判定存在與所述待分配事務沖突的已分配事務;否則,判定不存在與所述待分配事務沖突的已分配事務。
[0094]所述分配模塊303具體用于,當所述判斷模塊302的判斷結果為是,且與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到與所述待分配事務沖突的已分配事務所在的等待隊列中等待處理。
[0095]所述分配模塊303具體用于,當所述判斷模塊302的判斷結果為是,且與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為兩個以上時,等待各線程處理各自等待隊列中的已分配事務,直至與所述待分配事務沖突的已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理。
[0096]所述分配模塊303具體用于,當所述判斷模塊302的判斷結果為否時,在各線程的等待隊列中選擇分配的已分配事務的數(shù)量最少的等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理;或者,針對每個等待隊列,確定該等待隊列中各已分配事務中分別包含的表標識及其對應的分庫標識的并集,選擇確定出的包含元素的數(shù)量最少的并集對應的等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
[0097]具體的上述數(shù)據(jù)備份裝置可以位于備庫中。
[0098]本申請實施例提供一種數(shù)據(jù)備份方法及裝置,該方法備庫針對待處理事務,確定該待處理事務中包含的表標識以及表標識對應的分庫標識,并判斷當前是否存在與該待處理事務沖突的已分配事務,若存在,則將該待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,否則,在各線程的等待隊列中選擇一個等待隊列,并將該待分配事務分配到選擇的等待隊列中等待處理。由于上述方法是通過多個線程并行的處理互不沖突的多個事務,因此可以有效提高備庫的備份速度,并且,由于上述方法一個線程處理一個事務中包含的所有操作記錄,因此可以保證對同一事務中包含的所有操作記錄處理的一致性,從而提高了備庫處理事務的準確性。
[0099]本領域內的技術人員應明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0100]在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。
[0101]內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質的示例。
[0102]計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現(xiàn)信息存儲。信息可以是計算機可讀指令、數(shù)據(jù)結構、程序的模塊或其他數(shù)據(jù)。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括非暫存電腦可讀媒體(transitory media),如調制的數(shù)據(jù)信號和載波。
[0103]本申請是參照根據(jù)本申請實施例的方法、設備(系統(tǒng))、和計算機程序產品的流程圖和/或方框圖來描述的。應理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設備的處理器以產生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設備的處理器執(zhí)行的指令產生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0104]這些計算機程序指令也可存儲在能引導計算機或其他可編程數(shù)據(jù)處理設備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0105]這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設備上,使得在計算機或其他可編程設備上執(zhí)行一系列操作步驟以產生計算機實現(xiàn)的處理,從而在計算機或其他可編程設備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0106]盡管已描述了本申請的優(yōu)選實施例,但本領域內的技術人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權利要求意欲解釋為包括優(yōu)選實施例以及落入本申請范圍的所有變更和修改。
[0107]顯然,本領域的技術人員可以對本申請實施例進行各種改動和變型而不脫離本申請實施例的精神和范圍。這樣,倘若本申請實施例的這些修改和變型屬于本申請權利要求及其等同技術的范圍之內,則本申請也意圖包含這些改動和變型在內。
【權利要求】
1.一種數(shù)據(jù)備份方法,其特征在于,包括: 備庫將relay日志中記錄的未處理的事務作為待分配事務,針對待分配事務,確定所述待分配事務中包含的表標識以及表標識對應的分庫標識;并 根據(jù)所述待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與所述待分配事務沖突的已分配事務; 若是,則將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務; 否則,在各線程的等待隊列中選擇一個等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
2.如權利要求1所述的方法,其特征在于,判斷是否存在與所述待分配事務沖突的已分配事務,具體包括: 在各已分配事務中,判斷是否存在包含的至少一個表標識及其對應的分庫標識,與所述待分配事務中包含的表標識及其對應的分庫標識相同的已分配事務; 若存在,則判定存在與所述待分配事務沖突的已分配事務; 否則,判定不存在與所述待分配事務沖突的已分配事務。
3.如權利要求1所述的方法,其特征在于,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,具體包括: 當與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到與所述待分配事務沖突的已分配事務所在的等待隊列中等待處理。
4.如權利要求1所述的方法,其特征在于,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,具體包括: 當與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為兩個以上時,等待各線程處理各自等待隊列中的已分配事務,直至與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理。
5.如權利要求1所述的方法,其特征在于,在各線程的等待隊列中選擇一個等待隊列,具體包括: 在各線程的等待隊列中選擇分配的已分配事務的數(shù)量最少的等待隊列;或者針對每個等待隊列,確定該等待隊列中各已分配事務中分別包含的表標識及其對應的分庫標識的并集,選擇確定出的包含元素的數(shù)量最少的并集對應的等待隊列。
6.一種數(shù)據(jù)備份裝置,其特征在于,包括: 確定模塊,用于將relay日志中記錄的未處理事務作為待分配事務,針對待分配事務,確定所述待分配事務中包含的表標識以及表標識對應的分庫標識; 判斷模塊,用于根據(jù)所述確定模塊確定的所述待分配事務中包含的表標識及其對應的分庫標識,以及各已分配事務中包含的表標識以及表標識對應的分庫標識,判斷是否存在與所述待分配事務沖突的已分配事務; 分配模塊,用于在所述判斷模塊的判斷結果為是時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理,其中,已分配事務為已經分配到線程的等待隊列中等待處理的事務;當所述判斷模塊的判斷結果為否時,在各線程的等待隊列中選擇一個等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
7.如權利要求6所述的裝置,其特征在于,所述判斷模塊具體用于,在各已分配事務中,判斷是否存在包含的至少一個表標識及其對應的分庫標識,與所述待分配事務中包含的表標識及其對應的分庫標識相同的已分配事務;若存在,則判定存在與所述待分配事務沖突的已分配事務;否則,判定不存在與所述待分配事務沖突的已分配事務。
8.如權利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當所述判斷模塊的判斷結果為是,且與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到與所述待分配事務沖突的已分配事務所在的等待隊列中等待處理。
9.如權利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當所述判斷模塊的判斷結果為是,且與所述待分配事務沖突的各已分配事務所在的等待隊列的數(shù)量為兩個以上時,等待各線程處理各自等待隊列中的已分配事務,直至與所述待分配事務沖突的已分配事務所在的等待隊列的數(shù)量為一個時,將所述待分配事務分配到沖突的已分配事務所在的等待隊列中等待處理。
10.如權利要求6所述的裝置,其特征在于,所述分配模塊具體用于,當所述判斷模塊的判斷結果為否時,在各線程的等待隊列中選擇分配的已分配事務的數(shù)量最少的等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理;或者,針對每個等待隊列,確定該等待隊列中各已分配事務中分別包含的表標識及其對應的分庫標識的并集,選擇確定出的包含元素的數(shù)量最少的并集對應的等待隊列,并將所述待分配事務分配到選擇的等待隊列中等待處理。
【文檔編號】G06F17/30GK104182295SQ201310201886
【公開日】2014年12月3日 申請日期:2013年5月27日 優(yōu)先權日:2013年5月27日
【發(fā)明者】劉輝, 翟衛(wèi)祥 申請人:阿里巴巴集團控股有限公司