數據遷移方法及系統的制作方法
【專利摘要】本申請提供了一種數據遷移方法,包括以下步驟:攔截應用服務器所接收的數據遷移請求,并獲取數據遷移請求中所包含的數據遷移雙方的識別號;判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖;利用申請到的內存鎖鎖定對應識別號,將數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求;獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對數據遷移雙方識別號的鎖定,釋放內存鎖。本申請還提供了一種實現前述方法的數據遷移系統。本申請的數據遷移方法及系統,能夠對大量并發的連接請求進行處理,提高了系統和數據庫的穩定性。
【專利說明】數據遷移方法及系統【技術領域】
[0001]本申請涉及計算機數據處理【技術領域】,特別是涉及一種數據遷移方法及系統。
【背景技術】
[0002]隨著網絡技術的發展,網絡中存儲的數據通常因為網絡操作需要進行數據遷移。例如,從一個數據庫遷移到另一數據庫。在某些情況下,進行數據遷移時,遷移雙方的記錄需要對應修改,例如,某個數據從數據庫遷出后,該數據庫需要刪除該數據,或者修改該數據,而接收該數據的數據庫,則需要增加該數據或者修改該數據對應的原數據。為了避免出現錯誤,當某條記錄中的數據正在被使用時,需要對該記錄進行鎖定,只有當本次使用完成后,該記錄的數據才能被再次使用。
[0003]在某些網絡操作中,在短時間內某一記錄可能出現大量等待對其中數據進行遷移的操作,目前,業界常見的數據遷移管理主要是通過數據庫的數據庫鎖來實現。每次數據遷移進行之前,首先需要獲取數據庫連接,再通過鎖定語句鎖住數據遷移雙方的記錄中的數據。如果單條記錄在短時間內需要進行大量次數的數據遷移時,該記錄因為正在被使用而被鎖定,那么該記錄后續等待的數據遷移請求則會占用大量的數據庫連接,只有按照順序逐一完成該記錄所有的數據遷移請求后,才能釋放被占用的數據庫連接。因為單個記錄數據遷移次數過大,可能出現等待數據遷移的隊列越來越長,占用的數據庫的連接數也會不斷增加,如果整個過程持續時間較長,則可能出現可以使用的數據庫連接數越來越少,導致數據庫壓力過大而出現不穩定,最終出現系統崩潰等情況。
【發明內容】
[0004]本申請提供一種數據遷移方法及系統,能夠解決占用數據庫連接過多導致數據庫不穩定以及系統崩潰的問題。
[0005]為了解決上述問題,本 申請公開了一種數據遷移方法,包括以下步驟:
[0006]攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號;
[0007]判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖;
[0008]利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求;
[0009]獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
[0010]進一步地,所述分別為所述兩個識別號申請各自的內存鎖包括:
[0011]獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
[0012]進一步地,所述分別為所述兩個識別號申請各自的內存鎖還包括:[0013]統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。
[0014]進一步地,所述數據庫處理本次數據遷移請求包括:
[0015]獲取本次數據遷移請求中數據遷移雙方識別號的數據庫鎖;
[0016]采用數據庫鎖對所述數據遷移雙方識別號進行鎖定;
[0017]根據遷移數值對雙方識別號中的數據進行更改并保存;
[0018]解除數據庫鎖對數據遷移雙方識別號的鎖定。
[0019]進一步地,所述識別號與對應的內存鎖采用映射表的形式存儲在應用服務器內存中。
[0020]進一步地,所述分別為所述兩個識別號申請各自的內存鎖之后還包括:
[0021]判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過申請閾值,若是,則拒絕本次數據遷移請求反之,則繼續等待直到獲取內存鎖。
[0022]為了解決上述問題,本申請還公開了一種數據遷移系統,包括:
[0023]攔截模塊,用于攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號;
[0024]內存鎖獲取模塊,用于判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖;
[0025]鎖定模塊,用于利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求;
[0026]釋放模塊,用于獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
[0027]進一步地,所述內存鎖獲取模塊包括:
[0028]內存鎖使用狀態獲取單元,用于獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
[0029]進一步地,所述內存鎖獲取模塊還包括:
[0030]等待時間統計單元,用于統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。
[0031]進一步地,所述系統還包括:
[0032]映射表建立模塊,用于在應用服務器內存中建立映射表來存儲識別號與對應的內存鎖。
[0033]進一步地,所述系統還包括:
[0034]數據遷移請求數量統計模塊,用于判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過申請閾值,若是,則拒絕本次數據遷移請求。
[0035]與現有技術相比,本申請包括以下優點:
[0036]本申請的數據遷移方法及系統,通過設立的內存鎖來對同一識別號并發的數據遷移請求進行處理。因為該同一識別號的內存鎖每次只能供一個數據遷移請求使用,那么其余的并發數據遷移請求則需要等待前一數據遷移請求使用完后才能獲取。也即,每一個數據遷移請求都需要在內存中進行排列等待,逐個獲取內存鎖后,才能夠通過應用服務器建立與數據庫的連接。因此,即使有大量并發的數據遷移請求,也都需要在應用服務器內存中等待,逐一被放行,從而減少了對數據庫連接的占用量,提高了數據庫的穩定性。另外,即使出現大量并發的數據遷移請求導致應用服務器內存無法承受的時候,也可以通過增加應用服務器的數量的方式來解決,并不會對數據庫造成影響,從而大大提高了系統的穩定性,避免系統崩潰。
[0037]其次,除了采用增加應用服務器或者應用服務器內存的方式來提高對并發數據遷移請求的處理能力外,本申請還采用直接對應用服務器中的內存鎖進行配置的方式來提高系統處理能力。即設置每一個內存鎖所允許并發數據遷移請求的數量,如果超過設定值,則直接拒絕后續的數據遷移請求,直到等待的數據遷移請求小于設定值后才能再次接受新的數據遷移請求申請內存鎖。通過此種方式,無需增加應用服務器數量,或者應用服務器內存的容量,可以減少不必要的成本,同時可以保證數據庫的連接不被大量的并發數據遷移請求占用,提高數據庫以及系統的穩定性。
[0038]另外,對于內存鎖和識別號的關聯關系,采用映射表的形式存儲在應用服務器中,無論是獲取單個識別號的內存鎖,還是對內存鎖或者識別號進行修改、刪除等操作,都不會影響整個映射表。在每次數據遷移請求中,增加一個內存鎖,其所增加的額外處理時間的時長可以縮短到微秒級,這個時間對于整個數據遷移處理流程來說可以忽略不計。同時,在單個識別號并發數據遷移請求數量較多時,因為減少了對數據庫連接的占用,可以提高數據庫的響應速度,從而可以大大縮短整個數據遷移處理流程的時間,提高了系統的響應速度。
[0039]當然,實施本申請的任一產品不一定需要同時達到以上所述的所有優點。
【專利附圖】
【附圖說明】
[0040]圖1是本申請的數據遷移實現的系統架構圖;
[0041]圖2是本申請的數據遷移方法實施例一的流程圖;
[0042]圖3是本申請的數據遷移方法實施例二的流程圖;
[0043]圖4是本申請的數據遷移方法效果比較圖;
[0044]圖5是本申請的數據遷移系統實施例一的結構示意圖;
[0045]圖6是本申請的數據遷移系統實施例二的結構示意圖。
【具體實施方式】
[0046]為使本申請的上述目的、特征和優點能夠更加明顯易懂,下面結合附圖和【具體實施方式】對本申請作進一步詳細的說明。
[0047]本申請的數據遷移方法及系統用于對用戶通過客戶端向應用服務器提交的數據遷移請求進行處理,將大量并發的數據遷移請求通過內存鎖的方式攔截在應用服務器中,避免占用過多的數據庫連接,從而提高系統的響應速度以及穩定性。本申請的數據遷移系統可以設置在應用服務器內部,也可以作為獨立模塊,采用與應用服務器數據交互的方式實現數據遷移。
[0048]參照圖1,示出實現本申請的數據遷移的系統架構圖。數據遷移系統作為獨立模塊設置于應用服務器和數據庫之間,對并發的數據遷移請求進行處理。下面對本申請的數據遷移方法及系統進行詳細的說明。[0049]參照圖2,示出本申請的一種數據遷移方法實施例一,包括以下步驟:
[0050]步驟101,攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號。
[0051]當用戶通過客戶端提交數據遷移請求后,后臺應用服務器會接收該數據遷移請求,并通過與數據庫建立連接的方式訪問數據庫,在數據庫中實現數據遷移。其中,數據遷移請求中會包含數據遷移雙方的識別號、遷移數值等數據。本申請的數據遷移系統通過在應用服務器中對數據遷移請求進行攔截,從而可以獲取數據遷移雙方的識別號。
[0052]步驟102,判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖。
[0053]內存鎖是指在應用服務器內存中對數據遷移識別號進行鎖定的對象,每一識別號在一個應用服務器中唯一對應一個內存鎖,每個內存鎖每次只能被一個數據遷移請求使用。當獲取到一個識別號后,首先判斷內存中是否包含有該識別號唯一對應的內存鎖,若沒有,則需要利用內存鎖創建模塊為該識別號創建一個內存鎖,若有,則為該識別號申請其唯一對應的內存鎖。一般來說,如果一個識別號已經進行過數據遷移,那么應用服務器內存中則會有其唯一對應的內存鎖,如果一個識別號是初次進行數據遷移,那么應用服務器內存中則可能內有該識別號對應的內存鎖,此時,則需要為該識別號創建內存鎖。
[0054]因為同一個識別號可能會在同一時間被提交用于多次數據遷移(即單個識別號并發數據遷移請求數量較多),那么,就可能出現多個數據遷移請求中都包含有該識別號。因為內存鎖只有一個,此時,就需要多個數據遷移請求中的該識別號來爭搶內存鎖。即,需要對內存鎖進行申請。
[0055]具體的,申請過程可以采用隊列的形式,即根據數據遷移請求發生時間的先后順序逐一等待。具體的,可以設置內存鎖狀態,例如,使用和未使用兩個狀態,或者鎖定和未鎖定,具體的可以根據實際情況來設定,只要能夠表示內存鎖是否可用即可。為某一個識別號申請內存鎖的具體過程如下:
[0056]獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
[0057]可以理解,為了避免等待時間過長,而在客戶端沒有響應,優選地,可以設置等待時間閾值,統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。可以直接向客戶端返回錯誤或者提示客戶端響應超時等等。
[0058]另外,因為數據遷移請求中會包含數據遷移雙方的識別號,可能會出現一個識別號申請到內存鎖,而另外一個識別號未申請到內存鎖的情況。為了保證數據遷移操作的順利完成,需要兩個識別號都申請到內存鎖后才能進行后續操作。因此,若僅有一個識別號申請到內存鎖,另外一個識別號申請時等待時間過長,也可以采用前述的返回錯誤的方式進行處理,即,只要兩個識別號任何一個申請時的等待時間超過閾值,則返回錯誤。
[0059]步驟103,利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求。
[0060]在數據遷移請求中的雙方識別號都申請到內存鎖,并被內存鎖鎖定后,此時,可以按照正常流程,應用服務器向數據庫請求建立連接,等待數據庫處理本次數據遷移請求,即進行數據遷移操作。[0061]此時,如果數據庫連接正在被占用,則需要等待,如果沒有,則可以直接進行數據遷移操作。數據庫處理本次數據遷移請求的具體過程為:
[0062]獲取本次數據遷移請求中數據遷移雙方識別號的數據庫鎖;
[0063]采用數據庫鎖對數據遷移雙方的識別號進行鎖定;
[0064]然后根據遷移數值對雙方識別號中的數據進行更改并保存;
[0065]最后解除數據庫鎖對數據遷移雙方的識別號的鎖定。
[0066]至此,數據庫對本次數據遷移請求的處理完成。其中,數據庫鎖與內存鎖類似,與識別號一一對應,如果沒有,則創建后再使用。
[0067]例如,在實際處理過程,假設數據遷移請求是轉賬請求,識別號是指轉賬雙方的賬號,遷移數值是指轉賬金額,那么前述過程可以通過如下方式描述:
[0068]如果a賬號需要轉賬100元給b賬號,那么處理過程為:首先利用a賬號對應的數據庫鎖對a賬號進行鎖定,以及b賬號對應的數據庫鎖對b賬號進行鎖定;然后,在a賬號中的賬戶余額減去100元,在b賬號的賬戶余額中加上100元,并對修改后的數據進行保存;在對雙方賬號數據修改并保存后,數據庫會解除對數據庫鎖對a賬號和b賬號的鎖定,并釋放各自的數據庫鎖,若其他轉賬請求中包含有a賬號或b賬號,則可以在a賬號或b賬號對應的數據庫鎖被釋放后使用。
[0069]步驟104,在數據庫對本次數據遷移請求處理完成后,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
[0070]解除內存鎖對雙方識別號的鎖定后,可以修改內存鎖的使用狀態,即釋放內存鎖,從而將內存鎖分配給正在等待的數據遷移請求中的識別號。
[0071]可以理解,前述數據遷移方法中,通過設立的內存鎖來對同一識別號并發的數據遷移請求進行處理。因為該同一識別號的內存鎖每次只能供一個數據遷移請求使用,那么其余的并發數據遷移請求則需要等待前一數據遷移請求使用完后才能獲取。也即,每一個數據遷移請求都需要在內存中進行排列等待,逐個獲取內存鎖后,才能夠通過應用服務器建立與數據庫的連接。因此,即使有大量并發的數據遷移請求,也都需要在應用服務器內存中等待,逐一被放行,從而減少了對數據庫連接的占用量,提高了數據庫的穩定性。另外,即使出現大量并發的數據遷移請求導致應用服務器內存無法承受的時候,也可以通過增加應用服務器的數量的方式來解決,并不會對數據庫造成影響,從而大大提高了系統的穩定性,避免系統崩潰。
[0072]優選地,除了采用增加應用服務器或者應用服務器內存的方式來提高對并發數據遷移請求的處理能力外,還可以直接對應用服務器中的內存鎖進行配置,即設置每一個內存鎖所允許并發數據遷移請求的數量,如果超過設定值,則直接拒絕后續的數據遷移請求,直到等待的數據遷移請求小于設定值后才能再次接受新的數據遷移請求申請內存鎖。
[0073]參照圖3,示出本申請的數據遷移方法實施例二,在實施例一的步驟102和步驟103之間還可以包括以下步驟:
[0074]步驟301,判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過申請閾值,若是,則拒絕本次數據遷移請求,反之,則繼續等待直到獲取內存鎖。
[0075]通過此種方式,無需增加應用服務器數量,或者應用服務器內存的容量,可以減少不必要的成本,同時可以保證數據庫的連接不被大量的并發數據遷移請求占用,提高數據庫以及系統的穩定性。
[0076]優選地,對于前述的數據遷移方法實施例一和二,對于內存鎖和識別號的關聯關系,可以采用映射表的形式存儲,例如每個識別號的內存鎖使用支持并發的哈希映射來保存,這樣,無論是獲取單個識別號的內存鎖,還是對內存鎖或者識別號進行修改、刪除等操作,都不會影響整個映射表。映射表中可以只保存正在進行數據遷移處理的少量識別號即可。在每次數據遷移請求中,增加一個內存鎖,其所增加的額外處理時間的時長可以縮短到微秒級,這個時間對于整個數據遷移處理流程來說可以忽略不計。同時,在單個識別號并發數據遷移請求數量較多時,因為減少了對數據庫連接的占用,可以提高數據庫的響應速度,從而可以大大縮短整個數據遷移處理流程的時間,提高了系統的響應速度。
[0077]下面,結合具體實例對前述方法進行詳細說明。本實例中,數據遷移為轉賬操作,此處的識別號即為賬號。假設某一應用共有四個應用服務器和一個數據庫,通過應用服務器建立與數據庫的連接來將轉賬請求傳遞給數據庫,并由數據庫進行轉賬處理。
[0078]假設某個賬號(賬號c)同時有四十個并發轉賬請求,也即在很短時間內或者同時,共有四十個賬號都需要與賬號c進行轉賬操作。可以是別的賬號轉賬給賬號C,也可以是賬號C轉賬給別的賬號,或者二者兼有。本實例中,以四十個賬號同時提出了向賬號C進行轉賬請求為例進行說明。如果按照之前的轉賬處理方式,那么四個應用服務器則可能同時向數據庫提交建立連接的請求,并發送各自從客戶端接收到的轉賬請求。因為四十個轉賬請求中都包含有賬號C,而數據庫中對于賬號C只有一個數據庫鎖,也即每次只能處理一個轉賬請求,剩下的轉賬請求則需要逐一等待,這些等待的轉賬請求會占用數據庫連接。如果后續繼續出現包含有賬號C的并發轉賬請求,那么必然會出現大量占用數據庫連接的情況,從而可能導致數據庫壓力增大,甚至出現崩潰。
[0079]如果采用本申請的數據遷移方法,通過在各應用服務器內存中設置內存鎖,假設四十個轉賬請求通過負載均衡的方式平均分配到了四個應用服務器中,那么每個應用服務器中會接收十個轉賬請求。假設每個應用服務器中都已經包含了轉賬雙方的賬號的內存鎖。此時,每個應用服務器中的十個轉賬請求都會申請獲取轉賬雙方賬號的內存鎖,因為賬號C在每個應用服務器中只有一個內存鎖,在內存鎖未被使用的情況下,十個轉賬請求中只有一個能夠獲取到賬號C的內存鎖,其余九個則需要排隊等待。此時,每個應用服務器只能為一個轉賬請求建立與數據庫的連接,那么,占用的數據庫連接數最多為四個。可以看出,本申請的轉賬方法通過在應用服務器中設置內存鎖的方式,將排隊等待的過程轉移到了應用服務器內存中,從而大大減少了單個賬號并發請求時給數據庫帶來的壓力。利用應用服務器內存處理并發請求,即使內存無法承受并發請求帶來的壓力,也可以通過增加應用服務器內存或者增加應用服務器的方法,從而增加了系統的穩定性和抗壓能力。
[0080]參照圖4,示出了單個識別號并發數據遷移請求數量與系統平均響應時間的關系表,其中,縱坐標表示系統平均響應時間,單位為毫秒(ms),橫坐標表示單個識別號并發數據遷移請求數量,單位為個。實線表示采用內存鎖與數據庫鎖結合的數據,虛線表示只采用數據庫鎖的數據。可以看出,在單個識別號并發數據遷移請求數量較少時,采用內存鎖與數據庫鎖結合相較于只采用數據庫鎖來說,會增加系統的響應時間,但是二者的響應時間差值較小,因此可以認為影響不大。但是,隨著單個識別號并發數據遷移請求數量的增加,采用內存鎖與數據庫鎖結合的方式可以大大降低系統的響應時間,且并發數據遷移請求數量越多,其所能降低的系統響應時間越多。也即,本申請的數據遷移方法對于單個識別號并發數據遷移請求數量較多時,具有較為明顯的效果。
[0081]參照圖5,示出本申請的數據遷移系統實施例一,包括攔截模塊10、內存鎖獲取模塊20、鎖定模塊30和釋放模塊40。數據遷移系統可以設置在應用服務器內部,也可以作為獨立的模塊,采用與應用服務器進行數據交互的方式來實現數據遷移。
[0082]攔截模塊10,用于攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號。
[0083]內存鎖獲取模塊20,用于判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖。
[0084]優選地,內存鎖獲取模塊包括內存鎖使用狀態獲取單元,用于獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
[0085]可以理解,該內存鎖獲取模塊還可以包括等待時間統計單元,用于統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。
[0086]鎖定模塊30,用于利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求。
[0087]釋放模塊40,用于獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
[0088]優選地,該系統還包括映射表建立模塊,用于在應用服務器內存中建立映射表來存儲識別號與對應的內存鎖。
[0089]參照圖6,示出本申請的數據遷移系統實施例二,該系統還包括數據遷移請求數量統計模塊60,用于判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過申請閾值,若是,則拒絕本次數據遷移請求,反之,則繼續等待直到獲取內存鎖。
[0090]本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。對于系統實施例而言,由于其與方法實施例基本相似,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
[0091]本領域內的技術人員應明白,本申請的實施例可提供為方法、系統、或計算機程序產品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機可用程序代碼的計算機可用存儲介質(包括但不限于磁盤存儲器、CD-ROM、光學存儲器等)上實施的計算機程序產品的形式。
[0092]以上對本申請所提供的數據遷移方法及系統進行了詳細介紹,本文中應用了具體個例對本申請的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本申請的方法及其核心思想;同時,對于本領域的一般技術人員,依據本申請的思想,在【具體實施方式】及應用范圍上均會有改變之處,綜上所述,本說明書內容不應理解為對本申請的限制。
【權利要求】
1.一種數據遷移方法,其特征在于,包括以下步驟: 攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號; 判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖; 利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求; 獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
2.如權利要求1所述的數據遷移方法,其特征在于,所述分別為所述兩個識別號申請各自的內存鎖包括: 獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
3.如權利要求2所述的數據遷移方法,其特征在于,所述分別為所述兩個識別號申請各自的內存鎖還包括: 統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。
4.如權利要求1所述的數據遷移方法,其特征在于,所述數據庫處理本次數據遷移請求包括:` 獲取本次數據遷移請求中數據遷移雙方識別號的數據庫鎖; 采用數據庫鎖對所述數據遷移雙方識別號進行鎖定; 根據遷移數值對雙方識別號中的數據進行更改并保存; 解除數據庫鎖對數據遷移雙方識別號的鎖定。
5.如權利要求1所述的數據遷移方法,其特征在于,所述識別號與對應的內存鎖采用映射表的形式存儲在應用服務器內存中。
6.如權利要求1至5任一項所述的數據遷移方法,其特征在于,所述分別為所述兩個識別號申請各自的內存鎖之后還包括: 判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過申請閾值,若是,則拒絕本次數據遷移請求反之,則繼續等待直到獲取內存鎖。
7.一種數據遷移系統,其特征在于,包括: 攔截模塊,用于攔截應用服務器所接收的數據遷移請求,并獲取所述數據遷移請求中所包含的數據遷移雙方的識別號; 內存鎖獲取模塊,用于判斷應用服務器內存中是否包含所述數據遷移雙方識別號的內存鎖,若有,則分別為所述兩個識別號申請各自的內存鎖,反之,則創建所述兩個識別號的內存鎖; 鎖定模塊,用于利用申請到的內存鎖鎖定對應識別號,將所述數據遷移請求發送給數據庫,等待數據庫處理本次數據遷移請求; 釋放模塊,用于獲取數據庫對本次數據遷移請求處理完成的指令,解除內存鎖對所述數據遷移雙方識別號的鎖定,釋放內存鎖。
8.如權利要求7所述的數據遷移系統,其特征在于,所述內存鎖獲取模塊包括: 內存鎖使用狀態獲取單元,用于獲取所述識別號對應的內存鎖的當前使用狀態,若正在被使用,則等待,若未被使用,則申請獲取該內存鎖。
9.如權利要求8所述的數據遷移系統,其特征在于,所述內存鎖獲取模塊還包括: 等待時間統計單元,用于統計所述識別號申請對應的內存鎖的等待時間,若超過等待時間閾值,則拒絕本次數據遷移請求。
10.如權利要求7所述的數據遷移系統,其特征在于,所述系統還包括: 映射表建立模塊,用于在應用服務器內存中建立映射表來存儲識別號與對應的內存鎖。
11.如權利要求7至10任一項所述的數據遷移系統,其特征在于,所述系統還包括: 數據遷移請求數量統計模塊,用于判斷申請所述識別號對應的內存鎖并處于等待狀態的數據遷移請求數量是否超過`申請閾值,若是,則拒絕本次數據遷移請求。
【文檔編號】G06F17/30GK103514164SQ201210201198
【公開日】2014年1月15日 申請日期:2012年6月15日 優先權日:2012年6月15日
【發明者】李錚 申請人:阿里巴巴集團控股有限公司