跨庫事務處理方法及裝置的制造方法
【專利說明】跨庫事務處理方法及裝置 【技術領域】
[0001] 本發明涉及數據庫技術領域,尤其涉及一種跨庫事務處理方法及裝置。 【【背景技術】】
[0002] 數據庫拆分是一種提升系統容量的有效方式,主要是把在一個數據庫中處理的數 據按照某種規則分拆到多個數據庫中,降低單個數據庫的壓力。目前數據庫拆分包括垂直 拆分和水平拆分。其中,垂直拆分是按照功能劃分,把不同功能的數據分別放到不同的數據 庫中;水平拆分是將一張表的數據拆分到多張同樣的表中,一般采用哈希化ash)散列等方 式保證拆分結果的均勻性。
[0003] 在上述分庫的應用場景中,有可能涉及到跨庫事務,即需要在不同數據庫之間進 行操作的事務。跨庫事務要求滿足一致性,即對不同數據庫的操作結果要么都成功要么都 失敗,否則就會出現錯誤。由于在現有垂直拆分或水平拆分方式下很少出現跨庫事務,所W 現有技術中尚不存在處理跨庫事務的成熟方案。 【
【發明內容】
】
[0004] 本發明的多個方面提供一種跨庫事務處理方法及裝置,用W實現跨庫事務的處 理。
[0005] 本發明的一方面,提供一種跨庫事務處理方法,包括:
[0006] 接收業務請求,所述業務請求包括業務交易涉及的交易信息;
[0007] 根據所述交易信息,分別記錄所述業務交易涉及的多個數據庫參與所述業務交易 的行為信息,并將所述業務交易的處理狀態標記為待提交狀態,所述待提交狀態是指所有 數據庫均滿足參與所述業務交易的條件后可W對每個數據庫進行操作的業務處理狀態;
[0008] 在所述待提交狀態下,根據每個數據庫參與所述業務交易的行為信息對每個數據 庫進行至少一次操作,直到所有數據庫參與所述業務交易的行為結果達到一致為止。
[0009] 本發明的另一方面,提供一種跨庫事務處理裝置,包括:
[0010] 接收模塊,用于接收業務請求,所述業務請求包括業務交易涉及的交易信息;
[0011] 第一處理模塊,用于根據所述交易信息,分別記錄所述業務交易涉及的多個數據 庫參與所述業務交易的行為信息,并將所述業務交易的處理狀態標記為待提交狀態,所述 待提交狀態是指所有數據庫均滿足參與所述業務交易的條件后可W對每個數據庫進行操 作的業務處理狀態;
[0012] 第二處理模塊,用于在所述待提交狀態下,根據每個數據庫參與所述業務交易的 行為信息對每個數據庫進行至少一次操作,直到所有數據庫參與所述業務交易的行為結果 達到一致為止。
[0013] 在本發明技術方案中,接收業務請求后,根據業務請求包括的交易信息,分別記錄 業務交易涉及的多個數據庫參與該業務交易的行為信息,并將該業務交易的處理狀態標記 為待提交狀態,在待提交狀態下,根據上述記錄的行為信息分別對每個數據庫進行至少一 次操作,直到所有數據庫參與業務交易的行為結果達到一致。通過記錄每個數據庫參與業 務交易的行為信息,并對業務交易的處理狀態進行標記,可W保證多次執行每個數據庫參 與業務交易的行為直到所有數據庫參與業務交易的行為結果達到一致,因此,不會出現某 些數據庫的提交結果成功某些數據庫的提交結果不成功的情況,保證了事務提交結果的一 致性。 【【附圖說明】】
[0014] 為了更清楚地說明本發明實施例中的技術方案,下面將對實施例或現有技術描述 中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實 施例,對于本領域普通技術人員來講,在不付出創造性勞動性的前提下,還可W根據送些附 圖獲得其他的附圖。
[0015] 圖1為本發明一實施例提供的跨庫事務處理方法的流程示意圖;
[0016] 圖2為本發明另一實施例提供的跨庫事務處理方法的流程示意圖;
[0017] 圖3為本發明又一實施例提供的跨庫事務處理方法的流程示意圖;
[0018] 圖4為本發明又一實施例提供的跨庫事務處理方法的流程示意圖;
[0019] 圖5為本發明一實施例提供的跨庫事務處理裝置的結構示意圖;
[0020] 圖6為本發明另一實施例提供的跨庫事務處理裝置的結構示意圖。 【【具體實施方式】】
[0021] 為使本發明實施例的目的、技術方案和優點更加清楚,下面將結合本發明實施例 中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是 本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員 在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0022] 在單數據庫的應用場景中,當數據庫的容量達到瓶頸后,通常是將數據庫中的數 據拆分到多個數據庫中,W應對更高容量的服務需求。拆分方法包括垂直拆分和水平拆分。 對于賬務業務來說,由于業務模型非常簡單,主要提供做賬服務及賬務信息查詢服務。其中 做賬服務包括存入(如銀行的現金存入,或其他銀行向本行的跨行打款)、提現(如銀行的 現金提款,或向他行匯款)W及轉賬(如銀行內部客戶間的資金劃撥)。因此,對于賬務業 務來說無法做到業務的垂直剝離,所W不適合采用垂直拆分的方式。為達到將賬務服務的 事務熱點及存儲熱點均勻分散到各分庫上,對于賬務數據可W采用水平拆分的方式。本實 施例針對賬務數據提供了一種新的水平拆分方法,即按照賬號編號做拆分。
[0023] 假設賬號編號的生成規則為;6位業務前綴+10位遞增編號,則賬號編號生成范例 如下表1不:
[0024] 表 1
[00 巧]
[0026] 后10位遞增編號的生成方式為每產生一個新的賬號編號,在上一個賬號編號的 基礎上加1遞增。
[0027] 基于上述,若期望將數據庫由1個拆成100個,則用賬號編號按100取模,得到的 結果作為數據庫水平拆分的依據,通過送種方式就可W將根據賬號編號將賬務數據平均拆 分到100個數據庫中。若容量要求進一步提升,亦可考慮進一步對賬號編號按1000取模, 送樣就可W按照賬號編號將賬務數據由1個數據庫拆分到1000個數據庫中。值的說明的 是,具體按多大數值對賬號編號取模,可根據實際業務規模對容量的要求評估決定。
[0028] 舉例說明,假設活期賬號對應的賬務數據需要由原來的1個庫拆分到100個庫中。 對賬號編號Μ :1000010009988012,賬號編號N :1000010239168099分別進行100取模,則賬 號編號Μ的取模運算結果為:1000010009988012% 100 = 12 ;賬號編號N的取模運算結果 為:1000010239168099% 100 = 99。則根據運算結果,我們需要將賬號編號Μ的賬務數據置 入編號為12的數據庫,庫名可設為ACC0UNT_12 ;賬號編號Ν的賬務數據置入編號為99的 數據庫,庫名可設為ACC0UNT_99。
[0029] 無論是對上述賬務業務進行分庫后,還是對現有技術中的分庫場景,都會出現跨 庫事務,對于賬務業務分庫后出現跨庫事務的場景更多。例如,對于兩個客戶的賬戶資金劃 撥來說,賬號編號Μ轉賬100元給賬號編號N,賬號編號Μ和賬號編號N的賬務數據在不同 的數據庫中,于是出現了跨庫事務。
[0030] 對于賬號編號Μ和賬號編號Ν發生的一筆轉賬,必須做出如下保證:
[0031] 賬號編號Μ扣款成功,賬號編號Ν加款成功,對外返回轉賬成功結果;
[0032] 賬號編號Μ扣款失敗,賬號編號Ν未加款,對外返回轉賬失敗結果;
[0033] 而如下情況則禁止出現:
[0034] 賬號編號Μ扣款成功,賬號編號Ν未加款;
[0035] 賬號編號Μ未扣款,賬號編號Ν加款成功;
[0036] 也就是說,轉賬過程中賬號編號Μ扣款及賬號編號Ν加款送件事必須滿足一致性, 要么同時成功,要么同時失敗,否則會出現資金處理出錯。由于現有技術不存在解決上述問 題的技術方案,本發明實施例提供一種跨庫事務處理方法。
[0037] 圖1為本發明一實施例提供的跨庫事務處理方法的流程示意圖。如圖1所示,該 方法包括:
[0038] 101、接收業務請求,該業務請求包括業務交易涉及的交易信息。
[0039] 102、根據上述交易信息,分別記錄上述