專利名稱::一種鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及ー種鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,屬于計(jì)算機(jī)數(shù)據(jù)庫(kù)管理
技術(shù)領(lǐng)域:
。
背景技術(shù):
:近年來,在線交互式服務(wù)平臺(tái)發(fā)展迅速,如社交網(wǎng)絡(luò)、電子郵件等領(lǐng)域。廣大用戶群的存在及海量用戶生成內(nèi)容(User-GeneratedContent)的形成催生了對(duì)系統(tǒng)平臺(tái)高可擴(kuò)展性和高并發(fā)的要求。不僅如此,互聯(lián)網(wǎng)應(yīng)用對(duì)在線服務(wù)的無間斷服務(wù)要求,使得系統(tǒng)平臺(tái)不得不提供具有高可用性和容錯(cuò)性的服務(wù)?!霸朴?jì)算”的概念正應(yīng)此發(fā)展趨勢(shì)而生。在數(shù)據(jù)管理方面,這些應(yīng)用需求向數(shù)據(jù)管理系統(tǒng)提出了高可擴(kuò)展性和高可用性的要求。盡管發(fā)展成熟的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)廣為網(wǎng)絡(luò)服務(wù)所用,但在高可擴(kuò)展性和高可用性方面卻難以保證。隨著“云計(jì)算”概念的提出,在存儲(chǔ)方面出現(xiàn)了ー類具代表性的云存儲(chǔ)系統(tǒng),即鍵值庫(kù)(Key-valuestore,亦稱為NoSQLDB)。鍵值庫(kù)放棄了傳統(tǒng)數(shù)據(jù)庫(kù)的關(guān)系模型,而采用基于鍵值對(duì)的簡(jiǎn)單數(shù)據(jù)模型,犧牲了部分如事務(wù)訪問這樣的數(shù)據(jù)庫(kù)特性,以提高數(shù)據(jù)存儲(chǔ)系統(tǒng)的可擴(kuò)展性和容錯(cuò)性。此類鍵值庫(kù)系統(tǒng)在實(shí)際互聯(lián)網(wǎng)中得到廣泛應(yīng)用,如用于谷歌服務(wù)的大表(Bigtable)、用于亞馬遜服務(wù)的簡(jiǎn)單數(shù)據(jù)庫(kù)(SimpleDB),用于雅虎服務(wù)的皮納茨(PNUTS)、用于臉譜(Facebook)和推特(Twitter)服務(wù)的卡桑德拉(Cassandra)。Cassandra作為鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中的典型代表,與關(guān)系數(shù)據(jù)庫(kù)相比,優(yōu)勢(shì)在于數(shù)據(jù)模型簡(jiǎn)單,具有高擴(kuò)展性、可用性和容錯(cuò)性,提供簡(jiǎn)單易用的應(yīng)用程序開發(fā)接ロ。Cassandra是基于對(duì)等互聯(lián)網(wǎng)結(jié)構(gòu)(peer-to-peer,P2P)的存儲(chǔ)系統(tǒng),特點(diǎn)是存儲(chǔ)系統(tǒng)中的姆一臺(tái)計(jì)算機(jī)(即“節(jié)點(diǎn)”,下同)都擁有對(duì)等的地位,各自負(fù)責(zé)一部分?jǐn)?shù)據(jù)的存儲(chǔ)與備份,不存在單ー節(jié)點(diǎn)控制整個(gè)系統(tǒng)的資源分配。采用對(duì)等互聯(lián)網(wǎng)結(jié)構(gòu)有利于能夠提高系統(tǒng)的并發(fā)性、容錯(cuò)性和擴(kuò)展性。因?yàn)槊總€(gè)節(jié)點(diǎn)功能相同,都能夠響應(yīng)系統(tǒng)外部的數(shù)據(jù)請(qǐng)求,所有節(jié)點(diǎn)并行地響應(yīng)外部數(shù)據(jù)請(qǐng)求,可以提高系統(tǒng)的數(shù)據(jù)吞吐量,即提供良好的并發(fā)性。提高容錯(cuò)性是指,在部分節(jié)點(diǎn)出錯(cuò)不能正常工作(即“失效”)時(shí),因?yàn)閿?shù)據(jù)在其他節(jié)點(diǎn)上有備份,并且節(jié)點(diǎn)功能相同容易相互替代,所以會(huì)由其他正常工作的節(jié)點(diǎn)替代失效節(jié)點(diǎn)響應(yīng)外部請(qǐng)求,系統(tǒng)能夠保持對(duì)外的正常響應(yīng),系統(tǒng)的容錯(cuò)性能得到了提高。又因?yàn)槊總€(gè)節(jié)點(diǎn)功能相同,所以在原有節(jié)點(diǎn)退出系統(tǒng)或新節(jié)點(diǎn)加入系統(tǒng)時(shí),不會(huì)對(duì)系統(tǒng)扁平的結(jié)構(gòu)產(chǎn)生變化,只需要將系統(tǒng)中的數(shù)據(jù)進(jìn)行重新分配即可,因此系統(tǒng)具有良好的可擴(kuò)展性。P2P架構(gòu)為Cassandra系統(tǒng)帶來高并發(fā)性、容錯(cuò)性和擴(kuò)展性的同時(shí),也帶來了ー些缺點(diǎn),其中最重要的一點(diǎn)是它只能實(shí)現(xiàn)數(shù)據(jù)的最終一致性,不支持?jǐn)?shù)據(jù)庫(kù)事務(wù)功能。數(shù)據(jù)ー致性是要求不同用戶在同時(shí)訪問一個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的同一數(shù)據(jù)時(shí),應(yīng)該得到相同的(即一致的)數(shù)據(jù)內(nèi)容。在分布式環(huán)境下,數(shù)據(jù)通常需要有多個(gè)備份,以防止單個(gè)節(jié)點(diǎn)失效造成系統(tǒng)的數(shù)據(jù)丟失,但同時(shí)也帶來了如何保持多個(gè)備份間數(shù)據(jù)一致的問題。理想的數(shù)據(jù)完全一致要求數(shù)據(jù)的所有備份在同一時(shí)刻都具有相同的數(shù)據(jù)內(nèi)容。而Cassandra實(shí)現(xiàn)的最終一致性是指,系統(tǒng)并不能保證每ー時(shí)刻不同備份的數(shù)據(jù)都是一致的,只能保證系統(tǒng)在經(jīng)過相當(dāng)長(zhǎng)的時(shí)間后穩(wěn)定狀態(tài)的數(shù)據(jù)是一致的。這是ー種較的一致性,在系統(tǒng)運(yùn)行的時(shí)候,有可能不同用戶同時(shí)訪問同一個(gè)數(shù)據(jù)會(huì)得到不同的返回結(jié)果。數(shù)據(jù)庫(kù)事務(wù)是指數(shù)據(jù)庫(kù)中作為單個(gè)邏輯工作單元執(zhí)行的一系列操作,這些操作包括插入數(shù)據(jù)、更新數(shù)據(jù)、刪除數(shù)據(jù)等。數(shù)據(jù)庫(kù)事務(wù)機(jī)制可以保證事務(wù)單元內(nèi)的所有操作都成功完成,或者所有操作都不進(jìn)行。傳統(tǒng)的數(shù)據(jù)庫(kù)要求事務(wù)具有原子性(所有操作要么都成功,要么都失敗)、一致性(事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)狀態(tài)變到另一個(gè)狀態(tài)),隔離性(不同事務(wù)的操作相互不影響),持久性(成功執(zhí)行的事務(wù)對(duì)數(shù)據(jù)的改動(dòng)不會(huì)丟失),這四大特性統(tǒng)稱為ACID特性。Cassandra只能夠?qū)崿F(xiàn)最終以執(zhí)行,因此不能滿足數(shù)據(jù)庫(kù)對(duì)事務(wù)的要求,這會(huì)給上層應(yīng)用開發(fā)人員帶來麻煩,因?yàn)樗麄儽仨毧紤]在應(yīng)用層解決多個(gè)用戶并發(fā)訪問帶來的系統(tǒng)不一致問題。
發(fā)明內(nèi)容本發(fā)明的目的是提出ー種鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,使事務(wù)管理的數(shù)據(jù)范圍可以根據(jù)用戶指定而變化,并方便用戶在使用數(shù)據(jù)庫(kù)時(shí)保持?jǐn)?shù)據(jù)的一致性。本發(fā)明提出的鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,包括以下步驟數(shù)據(jù)的寫入過程(I)用戶將寫入鍵值庫(kù)的數(shù)據(jù)提交到協(xié)調(diào)模塊,寫入鍵值庫(kù)的數(shù)據(jù)中帶有鍵值庫(kù)行鍵,協(xié)調(diào)模塊將用戶的寫入鍵值庫(kù)的數(shù)據(jù)和寫入操作封裝成為日志;(2)協(xié)調(diào)模塊從版本控制模塊中獲取當(dāng)前最新日志位置,在最新日志位置上加1,得到步驟(I)日志的寫入日志位置,日志位置由鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中的一行數(shù)據(jù)描述;(3)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(I)的日志存儲(chǔ)在鍵值庫(kù)中的N個(gè)日志存儲(chǔ)器,其中N大于或等于3;(4)協(xié)調(diào)模塊采用派克斯一致性算法,將步驟(I)的日志存放在步驟(3)計(jì)算得到的N個(gè)日志存儲(chǔ)器中;(5)協(xié)調(diào)模塊將上述步驟(2)的寫入日志位置寫入版本控制模塊中,協(xié)調(diào)模塊向用戶返回寫入操作成功信息;(6)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(I)的數(shù)據(jù)存儲(chǔ)在鍵值庫(kù)中的M個(gè)數(shù)據(jù)存儲(chǔ)器,其中M大于或等于3;(7)協(xié)調(diào)模塊將上述步驟(I)中用戶提交的數(shù)據(jù)和上述步驟(2)的寫入日志位置寫入M個(gè)數(shù)據(jù)存儲(chǔ)器;數(shù)據(jù)的讀取過程(8)用戶向協(xié)調(diào)模塊提交讀取數(shù)據(jù)的請(qǐng)求,該請(qǐng)求中包括需讀取數(shù)據(jù)在鍵值庫(kù)中的行鍵;(9)協(xié)調(diào)模塊從版本控制模塊中獲取與步驟(8)的行鍵相對(duì)應(yīng)的最新日志位置Pi;(10)協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的U個(gè)數(shù)據(jù)存儲(chǔ)器,并從U個(gè)數(shù)據(jù)存儲(chǔ)器中的一個(gè)數(shù)據(jù)存儲(chǔ)器S上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志位置P2;(11)協(xié)調(diào)模塊對(duì)上述兩個(gè)日志位置P1和P2進(jìn)行比較若P1=P2,則協(xié)調(diào)模塊從步驟(10)的數(shù)據(jù)存儲(chǔ)器S中獲取步驟(8)的行鍵的數(shù)據(jù),并將獲取的數(shù)據(jù)返回給請(qǐng)求用戶;若P1W2,則協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的V個(gè)日志存儲(chǔ)器,并從V個(gè)日志存儲(chǔ)器中的ー個(gè)日志存儲(chǔ)器T上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志,同吋,協(xié)調(diào)模塊根據(jù)日志存儲(chǔ)器T中的當(dāng)前日志內(nèi)容,修改數(shù)據(jù)存儲(chǔ)器S中的數(shù)據(jù),并從數(shù)據(jù)存儲(chǔ)器S中獲取與步驟(8)的行健相對(duì)應(yīng)的數(shù)據(jù),將該數(shù)據(jù)返回給請(qǐng)求用戶。本發(fā)明提出的鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,其優(yōu)點(diǎn)是I、本發(fā)明的鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,采用了已有技術(shù)中的對(duì)等互聯(lián)網(wǎng)結(jié)構(gòu)(P2P),提高了鍵值庫(kù)數(shù)據(jù)存儲(chǔ)的并發(fā)性、容錯(cuò)性和擴(kuò)展性。2、本發(fā)明的鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,采用柔性事務(wù)的管理方法,支持事務(wù)特性的數(shù)據(jù)單元可以動(dòng)態(tài)調(diào)整。事務(wù)既可以是一行之內(nèi)的事務(wù),保證對(duì)一行的讀寫多個(gè)列具有原子性,同時(shí)在并發(fā)的情況下能夠保持?jǐn)?shù)據(jù)的一致性,也可以是跨多行的基于實(shí)體組的事務(wù),保證該實(shí)體組內(nèi)數(shù)據(jù)更新的ACID特性。事務(wù)限定數(shù)據(jù)范圍的柔性,給數(shù)據(jù)庫(kù)用戶帶來了很大的便利,用戶可以根據(jù)應(yīng)用的需要靈活地限定實(shí)體組的大小,能夠在系統(tǒng)一致性得到保證的情況下盡量地縮小事務(wù)限定的范圍,以提高系統(tǒng)的并發(fā)性。柔性事務(wù)的設(shè)計(jì)對(duì)提高數(shù)據(jù)庫(kù)事務(wù)的靈活性、適應(yīng)性有非常積極的作用,也是本發(fā)明的最大優(yōu)點(diǎn)。圖I是本發(fā)明方法中的模塊調(diào)用示意圖。具體實(shí)施例方式本發(fā)明提出的鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,其各模塊調(diào)用示意圖如圖I所示,包括以下步驟數(shù)據(jù)的寫入過程(I)用戶將寫入鍵值庫(kù)的數(shù)據(jù)提交到協(xié)調(diào)模塊,寫入鍵值庫(kù)的數(shù)據(jù)中帶有鍵值庫(kù)行鍵,協(xié)調(diào)模塊將用戶的寫入鍵值庫(kù)的數(shù)據(jù)和寫入操作封裝成為日志;(2)協(xié)調(diào)模塊從版本控制模塊中獲取當(dāng)前最新日志位置,在最新日志位置上加1,得到步驟(I)日志的寫入日志位置,日志位置由鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中的一行數(shù)據(jù)描述;(3)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(I)的日志存儲(chǔ)在鍵值庫(kù)中的N個(gè)日志存儲(chǔ)器,其中N大于或等于3,鍵值庫(kù)備份數(shù)據(jù)規(guī)則主要有兩種,可由用戶指定,一種是隨機(jī)分配,另ー種是按照數(shù)據(jù)行鍵對(duì)應(yīng)的大小排序,鍵值庫(kù)的每個(gè)備份負(fù)責(zé)存儲(chǔ)一定大小范圍的數(shù)據(jù)。鍵值庫(kù)備份數(shù)據(jù)規(guī)則,具體可以參見Cassandra配置說明;(4)協(xié)調(diào)模塊采用派克斯(Paxos)—致性算法,將步驟(I)的日志存放在步驟(3)計(jì)算得到的N個(gè)日志存儲(chǔ)器中;其中的派克斯算法是ー種在不可靠的網(wǎng)絡(luò)環(huán)境下達(dá)到多個(gè)處理器一致的算法,算法的具體說明可以參見論文LamportL,MalkhiD,ZhouL,VerticalPaxosandprimarybackupreplication,MSR-TR-2009-63[R],MicrosoftResearch,2009;(5)協(xié)調(diào)模塊將上述步驟(2)的寫入日志位置寫入版本控制模塊中,協(xié)調(diào)模塊向用戶返回寫入操作成功信息;(6)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(I)的數(shù)據(jù)存儲(chǔ)在鍵值庫(kù)中的M個(gè)數(shù)據(jù)存儲(chǔ)器,其中M大于或等于3;(7)協(xié)調(diào)模塊將上述步驟(I)中用戶提交的數(shù)據(jù)和上述步驟(2)的寫入日志位置寫入M個(gè)數(shù)據(jù)存儲(chǔ)器;數(shù)據(jù)的讀取過程(8)用戶向協(xié)調(diào)模塊提交讀取數(shù)據(jù)的請(qǐng)求,該請(qǐng)求中包括需讀取數(shù)據(jù)在鍵值庫(kù)中的行鍵;(9)協(xié)調(diào)模塊從版本控制模塊中獲取與步驟(8)的行鍵相對(duì)應(yīng)的最新日志位置Pi;(10)協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的U個(gè)數(shù)據(jù)存儲(chǔ)器,并從U個(gè)數(shù)據(jù)存儲(chǔ)器中的一個(gè)數(shù)據(jù)存儲(chǔ)器S上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志位置P2;(11)協(xié)調(diào)模塊對(duì)上述兩個(gè)日志位置P1和P2進(jìn)行比較若P1=P2,則協(xié)調(diào)模塊從步驟(10)的數(shù)據(jù)存儲(chǔ)器S中獲取步驟(8)的行鍵的數(shù)據(jù),并將獲取的數(shù)據(jù)返回給請(qǐng)求用戶;若P1W2,則協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的V個(gè)日志存儲(chǔ)器,并從V個(gè)日志存儲(chǔ)器中的ー個(gè)日志存儲(chǔ)器T上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志,這些日志包括日志位置大于P2,且小于或等于Pl的所有日志。同時(shí),協(xié)調(diào)模塊根據(jù)日志存儲(chǔ)器T中的當(dāng)前日志內(nèi)容,修改數(shù)據(jù)存儲(chǔ)器S中的數(shù)據(jù),并從數(shù)據(jù)存儲(chǔ)器S中獲取與步驟(8)的行健相對(duì)應(yīng)的數(shù)據(jù),將該數(shù)據(jù)返回給請(qǐng)求用戶。為了實(shí)現(xiàn)本發(fā)明的方法,必須將系統(tǒng)分為以下幾個(gè)主要模塊協(xié)調(diào)模塊(Coordinator):協(xié)調(diào)器是事務(wù)請(qǐng)求訪問的入口,也是系統(tǒng)邏輯的核心模塊。該模塊從用戶端接收事務(wù)請(qǐng)求,根據(jù)請(qǐng)求封裝事務(wù)執(zhí)行日志,通過協(xié)調(diào)分布式的存儲(chǔ)系統(tǒng)將事務(wù)日志備份到多臺(tái)機(jī)器上,并通知數(shù)據(jù)存儲(chǔ)器執(zhí)行事務(wù)的操作。在同時(shí)還需要獲取和維護(hù)最新的日志信息。該模塊由自主開發(fā)進(jìn)行編碼實(shí)現(xiàn),是本發(fā)明的核心模塊。版本控制模塊(VersionController):姆個(gè)事務(wù)的單元都有ー份獨(dú)立的事務(wù)日志,同一個(gè)事務(wù)単元的日志是按照?qǐng)?zhí)行的先后而排好序的。版本控制器就是管理每個(gè)事務(wù)單元當(dāng)前最新日志位置(日志的序號(hào))的模塊,正確的最新日志位置是保證事務(wù)按照日志編號(hào)順序執(zhí)行的重要保證,所以該模塊必須保證全局的一致性。在實(shí)現(xiàn)時(shí),該模塊基于Cassandra的Counter進(jìn)行實(shí)現(xiàn),因?yàn)樵摴δ苣軌虮WC數(shù)據(jù)改動(dòng)的原子性和一致性。日志存儲(chǔ)器(LogNode):日志存儲(chǔ)器的功能是存儲(chǔ)實(shí)務(wù)操作日志。為了保證實(shí)務(wù)操作的持久性,不會(huì)因?yàn)楣?jié)點(diǎn)的崩潰而造成已提交數(shù)據(jù)的丟失,在執(zhí)行數(shù)據(jù)更新操作時(shí),系統(tǒng)會(huì)先寫事務(wù)日志,當(dāng)日志寫成功后才返回提交成功。之后再根據(jù)日志內(nèi)容對(duì)實(shí)際數(shù)據(jù)進(jìn)行修改,如果修改失敗在后來的讀寫過程中也會(huì)根據(jù)日志進(jìn)行修復(fù),以保證事務(wù)操作的持久性和一致性。為了增強(qiáng)系統(tǒng)在分布式環(huán)境下的容錯(cuò)性,每個(gè)日志都有多個(gè)備份,備份數(shù)通常不小于3。在實(shí)現(xiàn)時(shí),該模塊由自主開發(fā)結(jié)合Cassandra的數(shù)據(jù)存儲(chǔ)器共同實(shí)現(xiàn)。數(shù)據(jù)存儲(chǔ)器(DataNode):數(shù)據(jù)存儲(chǔ)器的功能是存儲(chǔ)實(shí)際的數(shù)據(jù),這些數(shù)據(jù)都是通過執(zhí)行日志的內(nèi)容而產(chǎn)生的。數(shù)據(jù)存儲(chǔ)器也是基于Cassandra的數(shù)據(jù)存儲(chǔ)器進(jìn)行開發(fā)實(shí)現(xiàn)。在實(shí)際的系統(tǒng)部署中,日志存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器通常位于同一臺(tái)物理機(jī)器上,以便于日志在本地執(zhí)行。權(quán)利要求1.ー種鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,其特征在于該方法包括以下步驟數(shù)據(jù)的寫入過程(1)用戶將寫入鍵值庫(kù)的數(shù)據(jù)提交到協(xié)調(diào)模塊,寫入鍵值庫(kù)的數(shù)據(jù)中帶有鍵值庫(kù)行鍵,協(xié)調(diào)模塊將用戶的寫入鍵值庫(kù)的數(shù)據(jù)和寫入操作封裝成為日志;(2)協(xié)調(diào)模塊從版本控制模塊中獲取當(dāng)前最新日志位置,在最新日志位置上加1,得到步驟(I)日志的寫入日志位置,日志位置由鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中的一行數(shù)據(jù)描述;(3)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(O的日志存儲(chǔ)在鍵值庫(kù)中的N個(gè)日志存儲(chǔ)器,其中N大于或等于3;(4)協(xié)調(diào)模塊采用派克斯一致性算法,將步驟(I)的日志存放在步驟(3)計(jì)算得到的N個(gè)日志存儲(chǔ)器中;(5)協(xié)調(diào)模塊將上述步驟(2)的寫入日志位置寫入版本控制模塊中,協(xié)調(diào)模塊向用戶返回寫入操作成功信息;(6)協(xié)調(diào)模塊根據(jù)步驟(I)的鍵值庫(kù)行鍵,井根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(I)的數(shù)據(jù)存儲(chǔ)在鍵值庫(kù)中的M個(gè)數(shù)據(jù)存儲(chǔ)器,其中M大于或等于3;(7)協(xié)調(diào)模塊將上述步驟(I)中用戶提交的數(shù)據(jù)和上述步驟(2)的寫入日志位置寫入M個(gè)數(shù)據(jù)存儲(chǔ)器;數(shù)據(jù)的讀取過程(8)用戶向協(xié)調(diào)模塊提交讀取數(shù)據(jù)的請(qǐng)求,該請(qǐng)求中包括需讀取數(shù)據(jù)在鍵值庫(kù)中的行鍵;(9)協(xié)調(diào)模塊從版本控制模塊中獲取與步驟(8)的行鍵相對(duì)應(yīng)的最新日志位置P1;(10)協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的U個(gè)數(shù)據(jù)存儲(chǔ)器,并從U個(gè)數(shù)據(jù)存儲(chǔ)器中的一個(gè)數(shù)據(jù)存儲(chǔ)器S上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志位置P2;(11)協(xié)調(diào)模塊對(duì)上述兩個(gè)日志位置P1和P2進(jìn)行比較若P1=P2,則協(xié)調(diào)模塊從步驟(10)的數(shù)據(jù)存儲(chǔ)器S中獲取步驟(8)的行鍵的數(shù)據(jù),并將獲取的數(shù)據(jù)返回給請(qǐng)求用戶;若PPP2,則協(xié)調(diào)模塊根據(jù)鍵值庫(kù)備份數(shù)據(jù)規(guī)則,計(jì)算得到步驟(8)的行鍵所在的V個(gè)日志存儲(chǔ)器,并從V個(gè)日志存儲(chǔ)器中的ー個(gè)日志存儲(chǔ)器T上獲取與步驟(8)的行鍵相對(duì)應(yīng)的日志,同吋,協(xié)調(diào)模塊根據(jù)日志存儲(chǔ)器T中的當(dāng)前日志內(nèi)容,修改數(shù)據(jù)存儲(chǔ)器S中的數(shù)據(jù),并從數(shù)據(jù)存儲(chǔ)器S中獲取與步驟(8)的行健相對(duì)應(yīng)的數(shù)據(jù),將該數(shù)據(jù)返回給請(qǐng)求用戶。全文摘要本發(fā)明涉及一種鍵值庫(kù)數(shù)據(jù)存儲(chǔ)中柔性事務(wù)管理方法,屬于計(jì)算機(jī)數(shù)據(jù)庫(kù)管理
技術(shù)領(lǐng)域:
。該方法包括以下步驟寫入數(shù)據(jù)時(shí),協(xié)調(diào)模塊將請(qǐng)求封裝成日志,獲取當(dāng)前日志位置,使用派克斯算法將日志寫入新日志位置,記錄該位置,返回操作成功信息,再將數(shù)據(jù)和日志位置寫入數(shù)據(jù)存儲(chǔ)器;讀取數(shù)據(jù)時(shí),協(xié)調(diào)模塊獲得最新日志位置,檢查數(shù)據(jù)是否為最新,如果是最新的,則讀取數(shù)據(jù)返回給用戶,否則先讀取日志,修改數(shù)據(jù),再讀取返回給用戶。本發(fā)明方法提高了鍵值庫(kù)數(shù)據(jù)存儲(chǔ)的并發(fā)性、容錯(cuò)性和擴(kuò)展性,能夠在系統(tǒng)一致性得到保證的情況下盡量地縮小事務(wù)限定的范圍,以提高系統(tǒng)的并發(fā)性。柔性事務(wù)的設(shè)計(jì)對(duì)提高數(shù)據(jù)庫(kù)事務(wù)的靈活性、適應(yīng)性有非常積極的作用。文檔編號(hào)G06F17/30GK102693312SQ20121016930公開日2012年9月26日申請(qǐng)日期2012年5月28日優(yōu)先權(quán)日2012年5月28日發(fā)明者丁貴廣,朱妤晴,楊義繁,王建民,衣國(guó)壘申請(qǐng)人:清華大學(xué)