1.一種分布式對象存儲系統(tǒng)閃回方法,其特征是包括分布式對象存儲系統(tǒng)的數(shù)據(jù)的寫入及讀取、數(shù)據(jù)的刪除、數(shù)據(jù)的閃回及過期版本數(shù)據(jù)的清除;基于key-value數(shù)據(jù)模型的存儲引擎,構建三個數(shù)據(jù)存儲單元:包括數(shù)據(jù)本體庫(primary-database)、數(shù)據(jù)備份庫(back-database)、數(shù)據(jù)服務版本庫(servering-database);當存儲系統(tǒng)接收到對數(shù)據(jù)的操作請求時,基于三個數(shù)據(jù)存儲單元執(zhí)行寫入及讀取、數(shù)據(jù)的刪除、數(shù)據(jù)的閃回及過期版本數(shù)據(jù)的清除;
所述數(shù)據(jù)的寫入,包括針對寫入數(shù)據(jù)生成唯一的數(shù)據(jù)版本號;將數(shù)據(jù)版本號、數(shù)據(jù)寫入的系統(tǒng)時間戳及寫入對象數(shù)據(jù)的業(yè)務主鍵生成存儲主鍵;根據(jù)已有的相同寫入對象數(shù)據(jù)的所有版本,計算最新版本數(shù)據(jù)并在數(shù)據(jù)服務版本庫單獨存儲,其他非最新版本在數(shù)據(jù)備份庫進行備份;所述業(yè)務主鍵,它是在存儲系統(tǒng)存入對象數(shù)據(jù)時,為對象數(shù)據(jù)構建的唯一主鍵,主鍵內(nèi)容主要包括對象數(shù)據(jù)的業(yè)務屬性;
所述數(shù)據(jù)的讀取,包括根據(jù)數(shù)據(jù)讀取請求,從數(shù)據(jù)服務版本庫讀取當前與數(shù)據(jù)業(yè)務主鍵對應的版本號;基于版本號,從數(shù)據(jù)本體庫讀取該對象數(shù)據(jù)的具體信息;所述數(shù)據(jù)的刪除,是指對服務中的某一個特定版本數(shù)據(jù)的刪除;包括根據(jù)請求刪除的數(shù)據(jù)版本確定該數(shù)據(jù)的存儲主鍵,從數(shù)據(jù)服務版本庫刪除,同時放入數(shù)據(jù)備份庫中備份留存;
特別地,由于數(shù)據(jù)閃回的需要,因而在數(shù)據(jù)刪除時,僅刪除數(shù)據(jù)服務版本庫中數(shù)據(jù),保留數(shù)據(jù)本體庫中相關該數(shù)據(jù)的數(shù)據(jù)本體;
所述數(shù)據(jù)的閃回及過期版本數(shù)據(jù)的清除,包括通過備份數(shù)據(jù)庫計算閃回到的時間點,并根據(jù)時間點確認數(shù)據(jù)閃回到的數(shù)據(jù)版本和過期的數(shù)據(jù)版本;依據(jù)版本號向數(shù)據(jù)服務版本庫中覆蓋性寫入該數(shù)據(jù)的存儲主鍵,同時從備份數(shù)據(jù)庫中刪除已過期的數(shù)據(jù)。
2.根據(jù)權利要求1所述的一種分布式對象存儲系統(tǒng)閃回方法,其特征在于,當分布式對象存儲系統(tǒng)接收到數(shù)據(jù)寫入請求時,進入步驟1-1;
步驟1-1:調用數(shù)據(jù)版本生成器(version-generator)生成針對當前預寫入的對象數(shù)據(jù)的唯一版本號,此唯一版本號將作為相同業(yè)務主鍵數(shù)據(jù)間的區(qū)別標識;
步驟1-2:整合步驟1產(chǎn)生的數(shù)據(jù)版本、當前系統(tǒng)時間戳和業(yè)務主鍵,生成該寫入對象數(shù)據(jù)的存儲主鍵,并將生成的存儲主鍵寫入數(shù)據(jù)本體庫primary-database中,作為對該對象數(shù)據(jù)的記錄;
步驟1-3:針對某個業(yè)務主鍵數(shù)據(jù)在primary-database中可能存在多個不同數(shù)據(jù)版本,為保證讀操作能及時讀取到最新的服務數(shù)據(jù),primary-database在進行寫入操作時計算出當前該業(yè)務主鍵數(shù)據(jù)在primary-database中的最新數(shù)據(jù)版本;
步驟1-4:將步驟1-3計算出來的最新版本覆蓋性地寫入到servering-database中,確保servering-database中只包含一條針對特定業(yè)務主鍵數(shù)據(jù)的記錄,使讀操作第一時間獲取到新版數(shù)據(jù)的服務版本信息;
步驟1-5:為保證后續(xù)數(shù)據(jù)閃回的需要,計算出primary-database中針對當前業(yè)務主鍵數(shù)據(jù)的非最新版本,并將上述這些非最新版本的數(shù)據(jù)寫入到back-database中;
特別地,步驟1-2至步驟1-5向primary-database、back-database、servering-database的寫入操作必須是原子的,所謂操作是原子的,是指在具備事務特性的存儲引擎中,步驟1-2至步驟1-5在同一事務中完成。
3.根據(jù)權利要求1所述的一種分布式對象存儲系統(tǒng)閃回方法,其特征在于,當存儲系統(tǒng)接收刪除對象數(shù)據(jù)的請求時,進入步驟2-1:系統(tǒng)接收到需要刪除特定業(yè)務主鍵對應的某一個特定版本的數(shù)據(jù)請求;步驟2-2:根據(jù)請求中的業(yè)務主鍵及版本號,在servering-database中尋找對應的數(shù)據(jù)記錄,并從servering-database中刪除;步驟2-3:由于所刪除的數(shù)據(jù)當前已不再被執(zhí)行讀操作,將該數(shù)據(jù)的存儲主鍵寫入back-database中,以備數(shù)據(jù)閃回的需要;
特別地,在刪除特定版本的對象數(shù)據(jù)過程中,步驟2-2-步驟2-3向back-database、servering-database的寫入操作必須是原子的,所謂操作是原子的,是指在具備事務特性的存儲引擎中,步驟2-2至步驟2-5在同一事務中完成。
4.根據(jù)權利要求1所述的一種分布式對象存儲系統(tǒng)閃回方法,其特征在于,當存儲系統(tǒng)將某個業(yè)務對象數(shù)據(jù)閃回到指定時間點版本,具體步驟包括:
步驟3-1:由于back-database中保留了某個業(yè)務對象數(shù)據(jù)的所有歷史版本信息,因而借助back-database能計算出閃回到指定時間點上該業(yè)務對象數(shù)據(jù)對應的版本號,并將該版本號作為數(shù)據(jù)回滾的即將回滾的版本號;
步驟3-2:根據(jù)步驟1計算所得版本號,向servering-database覆蓋性地寫入包含該版本號的存儲主鍵;
步驟3-3:根據(jù)數(shù)據(jù)閃回到的數(shù)據(jù)版本,按照對應的版本號刪除該版本數(shù)據(jù)在back-database中的記錄;
步驟3-4:當數(shù)據(jù)成功閃回之前某一時刻的數(shù)據(jù)版本時,掃描back-database,按照時間戳查找back-database中是否存在超過當前數(shù)據(jù)閃回到的時間點;如果有,轉步驟3-5;
步驟3-5:根據(jù)步驟3-4的判斷,在back-database中超過當前數(shù)據(jù)閃回到的時間點的數(shù)據(jù)版本,被判定為過期版本數(shù)據(jù);
步驟3-6:根據(jù)已判定為過期版本的數(shù)據(jù),按照存儲主鍵從primary-database和back-database中刪除;
特別地,上述閃回操作中對back-database、servering-database的寫入操作必須是原子的;對primary-database和back-database的刪除操作必須是原子的。
5.根據(jù)權利要求4所述的一種分布式對象存儲系統(tǒng)閃回方法,其特征在于,數(shù)據(jù)閃回方法能支持反復閃回,即當用戶發(fā)現(xiàn)閃回后的版本并非其想要的版本時,能重新閃回到系統(tǒng)中任意一個有效的版本上,包括閃回操作前的版本,使得閃回操作具有可逆性。
6.一種分布式對象存儲系統(tǒng)閃回裝置,其特征在于,本發(fā)明的裝置包括:數(shù)據(jù)本體庫(primary-database)、數(shù)據(jù)備份庫(back-database)、數(shù)據(jù)服務版本庫(servering-database)三個基本的數(shù)據(jù)存儲單元,后續(xù)的閃回及正常的數(shù)據(jù)讀/寫功能都基于這三個數(shù)據(jù)存儲單元實現(xiàn);本裝置還包括數(shù)據(jù)版本生成器(Version-generator)、閃回功能模塊(FlashBacker)、過期版本數(shù)據(jù)清理模塊(ObsoletedData-clearner)三個功能模塊;
所述數(shù)據(jù)本體庫primary-database,是整個裝置中存儲對象數(shù)據(jù)本體的單元,針對某個業(yè)務主鍵的所有歷次發(fā)生的數(shù)據(jù)變更都會以獨立版本的形式存儲于primary-database中,而對過期版本的自動清理將確保primary-database不會因為多版本而持續(xù)過度膨脹。
所述數(shù)據(jù)備份庫back-database,每次針對某個業(yè)務主鍵發(fā)生數(shù)據(jù)更新和刪除操作都會形成相應的歷史版本,這些歷史版本信息將被額外地記錄到back-database中,以備后續(xù)的閃回操作能夠從中找到需要回滾的數(shù)據(jù)版本信息;
所述數(shù)據(jù)服務版本庫servering-database,讀操作將首先從此裝置中獲取某個業(yè)務主鍵對應的服務版本信息,所以此裝置中需要存放業(yè)務主鍵對應的服務版本信息,這些信息具體是由寫操作(包括新增、刪除、更新)對此裝置中的對應信息進行修改而來;此外,閃回操作也將修改此裝置中的信息,以使得讀操作能夠獲取想要閃回的數(shù)據(jù)版本信息;
所述閃回功能模塊FlashBacker,作為數(shù)據(jù)閃回的控制模塊,F(xiàn)lashBacker將從back-database中計算出某個時間點上相應記錄了的版本信息,再將此版本信息修復到servering-database中,從而使得外部讀操作能夠獲取到想要的閃回版本數(shù)據(jù);
所述過期版本數(shù)據(jù)清理模塊ObsoletedData-clearner,此裝置模塊主要是通過判定back-database中的數(shù)據(jù)版本是否過期,并將那些過期的版本數(shù)據(jù)從primary-database中移除來達到清理垃圾版本數(shù)據(jù)的目的。
7.根據(jù)權利要求6所述的一種分布式對象存儲系統(tǒng)閃回裝置,其特征在于,所述back-database中實際只記錄了歷史數(shù)據(jù)對應的版本信息,而不包含數(shù)據(jù)本體;另外,back-database中的記錄信息實際上都包含在寫入記錄時的主鍵中,以充分利用主鍵索引的高性能特性,快速地從back-database中獲取到數(shù)據(jù)的歷史版本及對應時間戳信息;
所述servering-database中實際只記錄當前處于服務狀態(tài)的數(shù)據(jù)版本信息,而不包含數(shù)據(jù)本體;另外,servering-database中的記錄信息實際上都包含在寫入記錄時的主鍵中,以充分利用主鍵索引的高性能特性快速地從servering-database中獲取到數(shù)據(jù)的歷史版本及對應時間戳信息。