一種基于狀態的無鎖分布式acid一致性實現方法
【專利摘要】本發明涉及網絡技術領域,特別是一種基于狀態的無鎖分布式ACID一致性實現方法,包括以下步驟,步驟S101:創建事務記錄,當客戶端請求寫入數據時,寫入進程會創建一個事務記錄;步驟S102:暫存寫入意圖;步驟S103:讀取寫入意圖;步驟S104:提交事務;步驟S105:清除寫入意圖,在事務完成后,系統會盡快清除暫存值。采用上述方法后,本發明的一種基于狀態的無鎖分布式ACID事務實現方法在具備分布式數據庫的高可用、高擴展的情況下,提供數據的高一致性。
【專利說明】
_種基于狀態的無鎖分布式AG ID—致性實現方法
技術領域
[0001]本發明涉及網絡技術領域,特別是一種基于狀態的無鎖分布式ACID—致性實現方法。【背景技術】
[0002]ACID是RDBMS的理論基石;
[0003]A原子(Atomicity)事務原子性,指對一個事務要么完全提交要么完全回滾,保證提交成功的給數據庫的和外部反應的一致。或者提交不成功,完全回滾,數據庫完全沒反應于外部;
[0004]C事務一致性(Consistency),一個事務執行前和執行后在數據庫必須保證一致狀〇
[0005]I隔離性(1slat1n)事務獨立,封閉,隔離性強度;數據庫為了防止出現數據庫讀取不一致,可設置不同等級的事務的隔離性;
[0006] D持久性(Durabilty)數據永存,在事務完成以后,數據持久的保存在數據庫之中, 并不會被回滾。
[0007]在CAP理論下,大部分N0SQL數據庫會犧牲ACID事務特性,同時會在C、A之間做選擇;一般情況下,數據一致性均選取最終一致性。但是對于CAP有一個誤解,那就是可能創建一個具有ACID事務能力的分布式數據庫。
【發明內容】
[0008]本發明需要解決的技術問題提供一種在分布式環境下基于狀態的無鎖分布式 ACID事務實現方法。
[0009]為解決上述的技術問題,本發明一種基于狀態的無鎖分布式ACID事務實現方法, 包括以下步驟,
[0010]步驟S101:創建事務記錄,當客戶端請求寫入數據時,寫入進程會創建一個事務記錄;
[0011]步驟S102:暫存寫入意圖;[〇〇12]步驟S103:讀取寫入意圖;
[0013]步驟S104:提交事務;[〇〇14]步驟S105:清除寫入意圖,在事務完成后,系統會盡快清除暫存值。[0〇15]進一步的,所述步驟S101中,所述事務記錄包括事務UUID和事務的當前狀態,所述事務的當前狀態包括初始狀態PENDING、終止狀態ABORT或COMMIT,事務記錄的PENDING或 ABORT狀態對應開關的“OFF"狀態,COMMIT對應“0N”。
[0016]更進一步的,所述步驟S103為在讀取時檢查事務開關的狀態;如果開關狀態為為 “OFF",則返回該鍵的原值;如果開關狀態為“0N”,則返回暫存值。
[0017]進一步的,所述步驟S102中寫過程中準備多個數據庫變更,將一個事務中的變更對應一個名為寫入意圖的結構。
[0018]更進一步的,所述步驟S102中一個值作為一個事務的一部分寫入到一個鍵,生成一個寫入意圖;寫入意圖結構中包括知識事務記錄存儲位置的鍵。
[0019]采用上述方法后,本發明的一種基于狀態的無鎖分布式ACID事務實現方法在具備分布式數據庫的高可用、高擴展的情況下,提供數據的高一致性。【附圖說明】
[0020]下面將結合附圖和【具體實施方式】對本發明作進一步詳細的說明。
[0021]圖1為本發明基于狀態的無鎖分布式ACID事務實現方法的流程圖。[〇〇22]圖2為本發明數據寫入的流程圖。[〇〇23]圖3為本發明數據讀取的流程圖。【具體實施方式】[〇〇24]如圖1所示,本發明的一種基于狀態的無鎖分布式ACID—致性實現方法,包括以下步驟,[〇〇25] 步驟S101:創建事務記錄,當客戶端請求寫入數據時,寫入進程會創建一個事務記錄;當客戶端請求寫入數據時,寫入進程會創建一個事務記錄。事務記錄包括事務UUID、事務的當前狀態(PENDING為初始狀態,ABORT或COMMIT為終止狀態)。其中事務記錄或事物開關,需按照順序進行讀/寫操作,事務記錄的PENDING或ABORT狀態對應開關的“OFF”狀態, COMMIT 對應 “0N”。[〇〇26]步驟S102:暫存寫入意圖,寫進程會準備好多個數據庫變更,但并不會覆蓋任何現有值。為了暫存一個事務中的變更,本專利描述的方法使用了一個名為寫入意圖的結構。任何時候,一個值作為一個事務的一部分寫入到一個鍵,它都會生成一個寫入意圖。寫入意圖結構中還包含指示事務記錄存儲位置的鍵。同時,就是任何鍵都有且僅有一個寫入意圖。 [〇〇27]步驟S103:讀取寫入意圖;如圖3所示,對于任何有暫存值的鍵,在讀取時都必須檢查事務開關的狀態。如果開關狀態為“OFF,則返回該鍵的原值;如果開關狀態為“0N”,則返回暫存值。具體步驟如下:[〇〇28](1)、如果現有寫入意圖對應的事務記錄仍然處于PENDING狀態,則將其置為ABORT狀態;[〇〇29](2)、清除現有的寫入意圖;[〇〇3〇] (3)、如果之前的事務已經COMMIT,那么清除操作會將暫存值升級為普通值;否者,返回該鍵的原值。
[0031]步驟S104:提交事務,如圖3所示,當寫進程準備好事務中的所有變更后,它會打開開關(即將事務記錄更新成COMMIT,開關狀態置為“0N”)。事務生成的所有寫入意圖都會立即生效;之后發生的任何讀取操作在看到事務已經提交后都會返回寫入意圖中的暫存值。 另外,將事務記錄的狀態置為ABORT可以終止事務,之后發生的讀取操作將忽略這個事務生成的寫入意圖。[〇〇32]步驟S105:清除寫入意圖,在事務完成后,系統會盡快清除暫存值。在事務完成后, 系統會盡快清除暫存值。如果事務成功,那么暫存值會取代原值;如果失敗,那么暫存值會被丟棄。總之,如果一個鍵沒有寫入意圖,,那么讀取操作就無需過濾,也就可以以適當的分布式方式完成。
[0033]雖然以上描述了本發明的【具體實施方式】,但是本領域熟練技術人員應當理解,這些僅是舉例說明,可以對本實施方式作出多種變更或修改,而不背離發明的原理和實質,本發明的保護范圍僅由所附權利要求書限定。
【主權項】
1.一種基于狀態的無鎖分布式ACID—致性實現方法,其特征在于,包括以下步驟,步驟S101:創建事務記錄,當客戶端請求寫入數據時,寫入進程會創建一個事務記錄;步驟S102:暫存寫入意圖;步驟S103:讀取寫入意圖;步驟S104:提交事務;步驟S105:清除寫入意圖,在事務完成后,系統會盡快清除暫存值。2.按照權利要求1所述的一種基于狀態的無鎖分布式ACID—致性實現方法,其特征在 于:所述步驟S101中,所述事務記錄包括事務UUID和事務的當前狀態,所述事務的當前狀態 包括初始狀態PENDING、終止狀態ABORT或COMMIT,事務記錄的PENDING或ABORT狀態對應開 關的“OFF"狀態,COMMIT對應“ON”。3.按照權利要求2所述的一種基于狀態的無鎖分布式ACID—致性實現方法,其特征在 于:所述步驟S103為在讀取時檢查事務開關的狀態;如果開關狀態為為“OFF”,則返回該鍵 的原值;如果開關狀態為“ON”,則返回暫存值。4.按照權利要求1所述的一種基于狀態的無鎖分布式ACID—致性實現方法,其特征在 于:所述步驟S102中寫過程中準備多個數據庫變更,將一個事務中的變更對應一個名為寫 入意圖的結構。5.按照權利要求4所述的一種基于狀態的無鎖分布式ACID—致性實現方法,其特征在 于:所述步驟S102中一個值作為一個事務的一部分寫入到一個鍵,生成一個寫入意圖;寫入 意圖結構中包括知識事務記錄存儲位置的鍵。
【文檔編號】G06F17/30GK106021277SQ201610277709
【公開日】2016年10月12日
【申請日】2016年4月27日
【發明人】賀偉平, 黃三偉
【申請人】湖南蟻坊軟件有限公司