專利名稱:一種數(shù)據(jù)版本的處理方法及系統(tǒng)的制作方法
技術領域:
本發(fā)明涉及數(shù)據(jù)存儲領域,特別是指一種數(shù)據(jù)版本的處理方法及系統(tǒng)。
背景技術:
隨著3G網絡逐漸成熟,云計算以及物聯(lián)網的發(fā)展,電信系統(tǒng)也面臨著轉型以及更大的挑戰(zhàn)。目前電信系統(tǒng)更關注高可用性、易擴展性以及海量存儲等方面的性能。對高可用性的要求是在基礎設施中,存儲與服務器并存,一旦服務器發(fā)生故障,用戶可正常訪問存儲數(shù)據(jù),即要求服務器在發(fā)生故障的情況下保證存儲系統(tǒng)中的數(shù)據(jù)可用;另外,要求系統(tǒng)運行具有很強的容錯能力,以保持高可靠性。易擴展性的要求是能夠自動或者簡單的手動配置增刪存儲節(jié)點,減小系統(tǒng)壓力,提高系統(tǒng)的處理性能,降低風險。海量存儲是要求能夠快速地結構化數(shù)據(jù)存儲,能夠完整地維護海量數(shù)據(jù),而且能夠快速地查詢數(shù)據(jù)。正是由于電信系統(tǒng)對以上三個方面的要求,使得電信系統(tǒng)中,數(shù)據(jù)庫的特點也越來越明確,例如,分布式、·負載均衡、故障接管以及小表管理等等。分布式數(shù)據(jù)庫必須具備存儲和數(shù)據(jù)查詢等功能,對數(shù)據(jù)文件中記錄的版本處理方法也是多種多樣,有版本標簽、時間戳等方式。所述記錄也可以稱之為數(shù)據(jù)。每一次對數(shù)據(jù)的處理,對應著數(shù)據(jù)的一個新的版本,所述處理包括數(shù)據(jù)更新、刪除、增加等。在分布式存儲系統(tǒng)中,多個存儲節(jié)點分布在不同的機器上,各個存儲節(jié)點在處理數(shù)據(jù)文件中數(shù)據(jù)的版本時,多是采用時間作為版本號,但由于各個存儲節(jié)點的時間并不能保證絕對的同步,所以版本號并不十分準確。若普通的數(shù)據(jù)文件版本號不準確,會導致查詢到的數(shù)據(jù)有誤,但是,若元數(shù)據(jù)的版本號不準確,會嚴重影響到系統(tǒng)功能,可能會導致系統(tǒng)無法正常工作。在分布式存儲系統(tǒng)中,需要維護海量的數(shù)據(jù),以及高強度的數(shù)據(jù)操作語言(DML)操作,還需要實現(xiàn)負載均衡、故障接管等功能,這都涉及到數(shù)據(jù),因此,處理好以時間戳為數(shù)據(jù)文件記錄的版本問題,有非常重要的意義。
發(fā)明內容
有鑒于此,本發(fā)明的主要目的在于提供一種數(shù)據(jù)版本的處理方法及系統(tǒng),提高了系統(tǒng)更新數(shù)據(jù)、查詢數(shù)據(jù)、加載數(shù)據(jù)文件的數(shù)據(jù)版本的準確性。為達到上述目的,本發(fā)明的技術方案是這樣實現(xiàn)的一種數(shù)據(jù)版本的處理方法,包括開始恢復數(shù)據(jù),讀取重操作日志redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間未超過容忍參數(shù),或者,數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,恢復redolog文件中的數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù)。所述開始恢復數(shù)據(jù)之前,該方法進一步包括被接管節(jié)點停止工作,控制節(jié)點指派接管節(jié)點進行故障接管,接管節(jié)點根據(jù)被接管節(jié)點的節(jié)點名稱,獲取元數(shù)據(jù)表中與所述被接管節(jié)點的節(jié)點名稱對應的小表的最后更新時間,同自身的當前時間相比,若當前時間與小表的最后更新時間為時間順差,則正常接管;否則,拒絕接管。一種數(shù)據(jù)版本的處理方法,包括存儲節(jié)點讀取自身的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,同當前時間比較,若當前時間與數(shù)據(jù)文件時間戳為時間順差,則加載數(shù)據(jù)文件;若當前時間與數(shù)據(jù)文件時間戳為時間逆差,且逆差時間超過容忍參數(shù),則拒絕加載數(shù)據(jù)文件;若當前時間與數(shù)據(jù)文件時間戳為時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,加載數(shù)據(jù)文件。一種數(shù)據(jù)版本的處理方法,包括控制節(jié)點確定要更新的數(shù)據(jù)對應的存儲節(jié)點,存儲節(jié)點獲取要更新的數(shù)據(jù)所屬小表的最后更新時間,同當前時間比較,若當前時間與小表的最后更新時間為時間順差,或者,當前時間與小表的最后更新時間為時間逆差,且逆差時間未超過容忍參數(shù),正常更新數(shù)據(jù);若當前時間與小表的最后更新時間為時間逆差,且逆差時間超過容忍參數(shù),則拒絕更新數(shù)據(jù)。一種數(shù)據(jù)版本的處理方法,包括控制節(jié)點創(chuàng)建大表并通知存儲節(jié)點創(chuàng)建小表;存儲節(jié)點將自身的當前時間與控制節(jié)點中大表的創(chuàng)建時間比較,若時間順差,則創(chuàng)建小表, 若時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,創(chuàng)建小表;若時間逆差,且逆差時間超過容忍參數(shù),拒絕創(chuàng)建小表。一種數(shù)據(jù)版本的處理系統(tǒng),包括數(shù)據(jù)恢復模塊以及對比模塊;數(shù)據(jù)恢復模塊,用于讀取redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳,發(fā)送給對比模塊;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,或者,數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間未超過容忍參數(shù),恢復數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù);對比模塊,用于比較數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間,確定時間順差,通知數(shù)據(jù)恢復模塊;確定時間逆差,進一步將逆差時間與容忍參數(shù)相比,若超過容忍參數(shù),通知數(shù)據(jù)恢復模塊;未超過容忍參數(shù),通知數(shù)據(jù)恢復模塊。所述系統(tǒng)進一步包括更新通知模塊以及元數(shù)據(jù)更新模塊;更新通知模塊,被接管節(jié)點停止工作,用于指派接管節(jié)點進行結果,并通知元數(shù)據(jù)更新1吳塊;元數(shù)據(jù)更新模塊,用于讀取元數(shù)據(jù)表中,與所述被接管節(jié)點名稱對應的小表的最后更新時間,發(fā)送給對比模塊;若當前時間與小表的最后更新時間為時間逆差,拒絕更新元數(shù)據(jù)表;若當前時間與小表的最后更新時間為時間順差,更新元數(shù)據(jù)表;相應的,對比模塊,用于比較小表的最后更新時間與自身所在接管節(jié)點的當前時間,若當前時間晚于小表的最后更新時間,則為時間順差,通知元數(shù)據(jù)更新模塊;否則,為時間逆差,通知元數(shù)據(jù)更新模塊。一種數(shù)據(jù)版本的處理系統(tǒng),包括數(shù)據(jù)文件加載模塊以及對比模塊;數(shù)據(jù)文件加載模塊,用于讀取自身所在存儲節(jié)點對應的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,發(fā)送給對比模塊;若數(shù)據(jù)文件時間戳與當前時間為時間順差,加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕加載數(shù)據(jù)文件;
對比模塊,用于將當前時間與數(shù)據(jù)文件時間戳比較,若確定當前時間與數(shù)據(jù)文件時間戳為時間順差,通知數(shù)據(jù)文件加載模塊;否則,為時間逆差,若進一步確定逆差時間超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊;若確定逆差時間未超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊。一種數(shù)據(jù)版本的處理系統(tǒng),包括數(shù)據(jù)更新通知模塊、數(shù)據(jù)更新模塊以及對比模塊;數(shù)據(jù)更新通知模塊,用于確定要更新的數(shù)據(jù)所對應的存儲節(jié)點,通知所述存儲節(jié)點的數(shù)據(jù)更新模塊;數(shù)據(jù)更新模塊,用于獲取要更新的數(shù)據(jù)所屬小表的最后更新時間,發(fā)送給對比模塊;若當前時間與小表的最后更新時間為時間順差,或者時間逆差且逆差時間未超過容忍參數(shù),正常更新數(shù)據(jù);若時間逆差且逆差時間超過容忍參數(shù),拒絕更新數(shù)據(jù); 對比模塊,用于將自身所在存儲節(jié)點的當前時間與小表的最后更新時間比較,若為時間順差,通知數(shù)據(jù)更新模塊;若為時間逆差,且逆差時間超過容忍參數(shù),通知數(shù)據(jù)更新模塊;若為時間逆差,且逆差時間未超過容忍參數(shù),通知數(shù)據(jù)更新模塊。—種數(shù)據(jù)版本的處理系統(tǒng),包括大表創(chuàng)建模塊、小表創(chuàng)建模塊以及對比模塊;大表創(chuàng)建模塊,用于創(chuàng)建大表,大表創(chuàng)建后通知小表創(chuàng)建模塊;小表創(chuàng)建模塊,用于讀取大表創(chuàng)建模塊中的大表創(chuàng)建時間,發(fā)送給對比模塊;若當前時間與大表創(chuàng)建時間為時間順差,正常創(chuàng)建小表;若時間逆差,且逆差時間超過容忍參數(shù),拒絕創(chuàng)建小表;若時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,創(chuàng)建小表;對比模塊,用于將自身所在存儲節(jié)點的當前時間與大表創(chuàng)建時間比較,若時間順差,通知小表創(chuàng)建模塊;若時間逆差,且逆差時間超過容忍參數(shù),通知小表創(chuàng)建模塊;若時間逆差,且逆差時間未超過容忍參數(shù),通知小表創(chuàng)建模塊。由此可見,采用本發(fā)明所述的方法及系統(tǒng),恢復redolog文件中的數(shù)據(jù)時,在數(shù)據(jù)文件時間戳、與redolog文件中數(shù)據(jù)時間為時間順差,或者時間逆差且逆差時間沒有超過容忍參數(shù)時,才對redolog文件中的數(shù)據(jù)進行恢復,在保證數(shù)據(jù)完整性的同時,對時間逆差,且逆差時間超過容忍參數(shù)時的redolog文件中的數(shù)據(jù)不進行恢復,避免系統(tǒng)恢復大量重復數(shù)據(jù);同時,在數(shù)據(jù)接管時,對要接管節(jié)點的數(shù)據(jù)的最后更新時間,也就是小表的最后更新時間同當前時間相比,時間順差的進行接管,提高了接管后,查詢元數(shù)據(jù)版本的正確性,從而保證系統(tǒng)功能正常;加載數(shù)據(jù)文件時,將當前時間與數(shù)據(jù)文件時間戳比較,對時間順差或時間逆差且逆差時間未超過容忍參數(shù)的數(shù)據(jù)文件進行加載,提高加載數(shù)據(jù)文件的準確性;數(shù)據(jù)更新時,將當前時間與小表的最后更新時間比較,在時間順差或時間逆差且逆差時間未超過容忍參數(shù)時,才更新數(shù)據(jù),提高了更新后數(shù)據(jù)版本的正確性;建表時,在當前時間與大表的創(chuàng)建時間為時間順差,或者,時間逆差且逆差時間未超過容忍參數(shù)時,才建立小表,確保小表建立時間的正確,便于后續(xù)用戶通過大表進行數(shù)據(jù)查詢的正確性。
圖I為本發(fā)明實施例實現(xiàn)數(shù)據(jù)恢復的方法流程示意圖;圖2為本發(fā)明實施例實現(xiàn)數(shù)據(jù)文件加載的方法流程示意圖3為本發(fā)明實施例實現(xiàn)數(shù)據(jù)更新的方法流程示意圖;圖4為本發(fā)明實施例實現(xiàn)建表的方法流程示意圖;圖5為本發(fā)明實施例實現(xiàn)數(shù)據(jù)恢復的系統(tǒng)組成示意圖;圖6為本發(fā)明實施例實現(xiàn)數(shù)據(jù)文件加載的系統(tǒng)組成示意圖;圖7為本發(fā)明實施例實現(xiàn)數(shù)據(jù)更新的系統(tǒng)組成示意圖;圖8為本發(fā)明實施例實現(xiàn)建表的系統(tǒng)組成示意圖。
具體實施方式
本發(fā)明的基本思想是開始恢復數(shù)據(jù),讀取重操作日志(redolog)文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳;比較數(shù)據(jù)文件時間戳及redolog文件中的數(shù)據(jù)時間,若兩者為時間逆差,且逆差時間未超過容忍參數(shù),或者,兩者為時間順差,恢復數(shù)據(jù)。下面通過具體實施例與附圖來對本發(fā)明進行詳細說明。一種數(shù)據(jù)版本的處理方法,如圖I所示,具體步驟如下步驟101、開始數(shù)據(jù)恢復,讀取redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳;所述redolog文件由存儲節(jié)點保存到存儲空間,包括分布式存儲系統(tǒng)的數(shù)據(jù)、數(shù)據(jù)版本,也就是對數(shù)據(jù)操作時的時間即數(shù)據(jù)時間;分布式存儲系統(tǒng)先將數(shù)據(jù)保存到redolog文件,并記錄版本,然后將數(shù)據(jù)保存到數(shù)據(jù)文件中,并記錄版本;分布式存儲系統(tǒng)異常,存儲節(jié)點重啟或進行故障接管過程中,系統(tǒng)需要恢復數(shù)據(jù),這時,數(shù)據(jù)文件中的記錄可能是不完整的,存儲節(jié)點要加載redolog文件中的數(shù)據(jù),用來恢復數(shù)據(jù)。存儲節(jié)點讀取redolog文件,獲取redolog文件中的數(shù)據(jù)版本,選取與當前時間最近的數(shù)據(jù)版本,也就是數(shù)據(jù)時間。存儲節(jié)點根據(jù)元數(shù)據(jù)表中自身對應的數(shù)據(jù)文件的路徑,讀取數(shù)據(jù)文件中數(shù)據(jù)文件的創(chuàng)建時間,也就是數(shù)據(jù)文件時間戳。所述元數(shù)據(jù)表包括存儲節(jié)點名稱、與所述存儲節(jié)點名稱對應的小表數(shù)據(jù)范圍,也就是小表所屬的存儲節(jié)點保存的數(shù)據(jù)文件中的數(shù)據(jù)的范圍、數(shù)據(jù)文件路徑、小表的最后更新時間、小表對應的大表身份識別號碼(ID)、大表的創(chuàng)建時間。其中,所述小表的最后更新時間是由小表所屬的存儲節(jié)點保存的數(shù)據(jù)進行最后更新,或者,小表自身信息進行最后更新的時間;所述小表自身信息包括小表所述的存儲節(jié)點、小表的數(shù)據(jù)范圍等;所有的存儲節(jié)點及控制節(jié)點對應一個元數(shù)據(jù)表;存儲節(jié)點將數(shù)據(jù)保存到存儲空間的數(shù)據(jù)文件中,并通過元數(shù)據(jù)表記錄數(shù)據(jù)文件路徑;所述數(shù)據(jù)文件由存儲節(jié)點創(chuàng)建,其中包含創(chuàng)建時間,也就是數(shù)據(jù)文件時間戳、數(shù)據(jù)以及數(shù)據(jù)版本,數(shù)據(jù)文件中的數(shù)據(jù)按照大小順序保存,設定數(shù)據(jù)文件的存儲空間,若數(shù)據(jù)文件中的數(shù)據(jù)超過設定的存儲空間,則新建數(shù)據(jù)文件保存數(shù)據(jù)。所述小表在內存中,包括存儲節(jié)點名稱、與所述存儲節(jié)點名稱對應的小表數(shù)據(jù)范圍、數(shù)據(jù)文件路徑、小表對應的大表ID、大表的創(chuàng)建時間以及小表的最后更新時間。所述大表位于某節(jié)點,用于向用戶開放,便于用戶查詢,包含創(chuàng)建時間、自身ID ;所述ID由創(chuàng)建大表的存儲節(jié)點生成。其中,大表由用戶選擇創(chuàng)建時,存儲節(jié)點所創(chuàng)建;創(chuàng)建大表后,存儲節(jié)點會創(chuàng)建小表,并設定小表的數(shù)據(jù)范圍,并在小表中輸入大表ID,確定小表與大表的對應關系,這時的小表為空白小表;同時將小表的數(shù)據(jù)范圍以及小表對應的大表ID更新到元數(shù)據(jù)表中。
步驟102、比較數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間,若兩者之間的為時間逆差,且逆差時間超過容忍參數(shù),則redolog文件中的數(shù)據(jù)版本可能出現(xiàn)錯誤,執(zhí)行步驟103 ;若兩者之間的逆差時間未超過容忍參數(shù),則redolog文件中有部分數(shù)據(jù)是有用的,應該對數(shù)據(jù)進行恢復,執(zhí)行步驟104 ;若兩者之間為時間順差,數(shù)據(jù)文件與redolog文件中數(shù)據(jù)的保存順序是正常的,redolog文件中與所述數(shù)據(jù)文件對應的數(shù)據(jù)是需要恢復的,執(zhí)行步驟 104 ;將數(shù)據(jù)文件時間戳與redolog文件的數(shù)據(jù)時間中距離當前時間最近的數(shù)據(jù)時間相比,若數(shù)據(jù)文件時間戳早于redolog文件的數(shù)據(jù)時間,則兩者之間為時間逆差;否則,兩者之間為時間逆差,時間間隔為逆差時間。所述容忍參數(shù)的大小可根據(jù)需要設置。步驟103、拒絕恢復redolog文件中的數(shù)據(jù);步驟104、恢復數(shù)據(jù);所述恢復數(shù)據(jù)即為讀取redolog文件中的數(shù)據(jù),加載到內存中。以上恢復redolog文件中數(shù)據(jù)的流程可以由多種情況觸發(fā),故障接管為其中之一,具體內容包括存儲節(jié)點停止工作,這里的存儲節(jié)點可以稱之為被接管節(jié)點,控制節(jié)點指定另一存儲節(jié)點,即接管節(jié)點接管被接管節(jié)點,也就是將被接管節(jié)點的節(jié)點名稱發(fā)送給接管節(jié)點。接管節(jié)點根據(jù)被接管節(jié)點的節(jié)點名稱讀取元數(shù)據(jù)表中與所述被接管節(jié)點名稱對應的小表的最后更新時間,同自身的當前時間相比,若接管節(jié)點的當前時間早于小表的最后更新時間,則接管節(jié)點的當前時間與小表的最后更新時間為時間逆差,與邏輯不符,如果此時進行接管,元數(shù)據(jù)表中仍以被接管節(jié)點的最后更新時間為最新時間,也就是作為小表的最后更新時間,此時,若要查詢小表對應的存儲節(jié)點,因為時間比小表的最后更新時間早,因此,只能查詢元數(shù)據(jù)表中,小表的最后更新時間之前的記錄,小表所屬的存儲節(jié)點仍為被接管節(jié)點,查詢錯誤,影響系統(tǒng)功能;接管節(jié)點拒絕接管;若接管節(jié)點的當前時間晚于被接管節(jié)點中小表的最后更新時間,則兩者為時間順差,正常接管,更新元數(shù)據(jù)表。所述正常接管,更新元數(shù)據(jù)表包括將元數(shù)據(jù)表中被接管節(jié)點的節(jié)點名稱修改為接管節(jié)點的節(jié)點名稱。接管之后,進行redolog文件數(shù)據(jù)恢復。另外,在數(shù)據(jù)文件加載的過程中也涉及到數(shù)據(jù)版本,分布式存儲系統(tǒng)中多種情況都會觸發(fā)數(shù)據(jù)文件加載,包括存儲節(jié)點重啟,故障接管以及負載均衡等,其中,存儲節(jié)點重啟時,先進行數(shù)據(jù)文件加載,再進行數(shù)據(jù)恢復,也就是圖I所述流程;對于數(shù)據(jù)加載時,對數(shù)據(jù)版本的處理過程如圖2所示,具體步驟如下步驟201、存儲節(jié)點讀取自身對應的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,將當前時間與數(shù)據(jù)文件時間戳比較,若時間順差,執(zhí)行步驟202;若時間逆差,且逆差時間超過容忍參數(shù),執(zhí)行步驟203 ;若逆差時間未超過容忍參數(shù),執(zhí)行步驟204 ;存儲節(jié)點根據(jù)自身節(jié)點名稱讀取元數(shù)據(jù)表中所述存儲節(jié)點名稱對應的數(shù)據(jù)文件路徑,根據(jù)數(shù)據(jù)文件路徑讀取數(shù)據(jù)文件,獲取數(shù)據(jù)文件中的數(shù)據(jù)文件時間戳,將獲取的數(shù)據(jù)文件時間戳同存儲節(jié)點當前的時間比較,若當前時間晚于數(shù)據(jù)文件時間戳,則時間順差;否貝U,時間逆差,兩者之間的時間間隔即為逆差時間。步驟202、加載數(shù)據(jù)文件。所述加載數(shù)據(jù)文件為存儲節(jié)點讀取元數(shù)據(jù)表中,自身存儲節(jié)點對應的小表,讀取小表中的最后更新時間以及數(shù)據(jù)文件路徑,根據(jù)小表的數(shù)據(jù)范圍,將小表的最后更新時間及數(shù)據(jù)文件路徑,添加到內存中與所述數(shù)據(jù)范圍對應的小表中。步驟203、拒絕加載數(shù)據(jù)文件,并通過告警通知用戶。步驟204、等待的方式消除逆差,加載數(shù)據(jù)文件。所述等待的方式消除逆差,加載數(shù)據(jù)文件包括存儲節(jié)點等待與容忍參數(shù)相同的時間,待存儲節(jié)點當前時間與數(shù)據(jù)文件時間戳相同時,加載數(shù)據(jù)文件。這里,加載數(shù)據(jù)文件過程中出現(xiàn)時間逆差,邏輯上不合理,但是,由于數(shù)據(jù)文件有可能由不同的存儲節(jié)點創(chuàng)建,存儲節(jié)點之間存在時間不同步的可能,如果對所有出現(xiàn)時間逆差的數(shù)據(jù)文件都拒絕加載,降低了系統(tǒng)可用性,雖然等待的方式消除逆差的過程降低了系統(tǒng)的響應速度,但提高了系統(tǒng)的可用性。 在分布式存儲系統(tǒng)中,對數(shù)據(jù)文件中的數(shù)據(jù)進行更新時,也涉及到數(shù)據(jù)版本,多個過程包含數(shù)據(jù)更新,例如負載均衡,其中,在負載均衡過程中,先進行數(shù)據(jù)更新,再進行數(shù)據(jù)恢復;所述數(shù)據(jù)更新包括數(shù)據(jù)增加、刪除及修改等,數(shù)據(jù)更新時,對數(shù)據(jù)版本的處理流程如圖3所示,具體流程如下步驟301、確定要更新的數(shù)據(jù)所對應的存儲節(jié)點;控制節(jié)點接收用戶要更新的數(shù)據(jù),根據(jù)數(shù)據(jù)查詢元數(shù)據(jù)表的數(shù)據(jù)范圍,也就是元數(shù)據(jù)表中小表的數(shù)據(jù)范圍,確定要更新的數(shù)據(jù)對應的小表,根據(jù)小表所屬的存儲節(jié)點,確定要更新的數(shù)據(jù)對應的存儲節(jié)點??刂乒?jié)點通知所述存儲節(jié)點進行數(shù)據(jù)更新,所述通知中包含要更新的數(shù)據(jù),即要添加或刪除的數(shù)據(jù),或要修改的數(shù)據(jù)及修改后的數(shù)據(jù)。步驟302、存儲節(jié)點獲取要更新的數(shù)據(jù)所屬的小表的最后更新時間,將存儲節(jié)點的當前時間同小表的最后更新時間比較,若時間順差,執(zhí)行步驟303 ;若時間逆差,且逆差時間超過容忍參數(shù),執(zhí)行步驟304 ;若逆差時間未超過容忍參數(shù),執(zhí)行步驟303 ;存儲節(jié)點讀取元數(shù)據(jù)表中,要更新的數(shù)據(jù)對應的小表的最后更新時間,將存儲節(jié)點的當前時間與小表的最后更新時間相比,若存儲節(jié)點的當前時間晚于小表的最后更新時間,則為時間順差;否則,為時間逆差,兩者之間的時間間隔為逆差時間。步驟303、正常更新數(shù)據(jù)。所述更新包括存儲數(shù)據(jù)時,存儲節(jié)點根據(jù)數(shù)據(jù)對應的小表中的數(shù)據(jù)文件路徑,讀取數(shù)據(jù)文件,將數(shù)據(jù)順序保存到數(shù)據(jù)文件中,并記錄時間,即更新后的版本為該數(shù)據(jù)文件的最新版本;修改或刪除數(shù)據(jù)時,根據(jù)數(shù)據(jù)對應的小表中的數(shù)據(jù)文件路徑,讀取數(shù)據(jù)文件,查詢數(shù)據(jù)文件中與要修改或刪除的數(shù)據(jù)對應的數(shù)據(jù),對所述數(shù)據(jù)進行修改或刪除。步驟304、拒絕更新數(shù)據(jù),并通過告警通知用戶。分布式存儲系統(tǒng)在建表的過程中,也涉及到數(shù)據(jù)版本問題,在建表時,對數(shù)據(jù)版本的處理流程,如圖4所示,具體步驟如下步驟401、控制節(jié)點創(chuàng)建大表并通知存儲節(jié)點創(chuàng)建小表;控制節(jié)點根據(jù)用戶指示創(chuàng)建大表,所述創(chuàng)建大表包括生成大表ID,并記錄大表創(chuàng)建時間;所述大表ID由控制節(jié)點在現(xiàn)有大表ID上加1,例如現(xiàn)有大表ID為1,則新創(chuàng)建的大表ID為2,大表ID的初始值可根據(jù)需要設定;所述通知存儲節(jié)點創(chuàng)建小表包括控制節(jié)點根據(jù)存儲節(jié)點的負載均衡,由負載最小的存儲節(jié)點創(chuàng)建小表。步驟402、存儲節(jié)點將自身的當前時間與控制節(jié)點中大表的創(chuàng)建時間相比,若時間順差,執(zhí)行步驟403 ;若時間逆差且逆差時間未超過容忍參數(shù),執(zhí)行步驟404 ;若時間逆差,且逆差時間超過容忍參數(shù),執(zhí)行步驟405 ;根據(jù)正常建表流程,控制節(jié)點先建立大表,然后由存儲節(jié)點建立小表,若大表的建立時間晚于小表,后續(xù)通過小表進行數(shù)據(jù)更新時,數(shù)據(jù)更新的時間有可能早于大表的建立時間,邏輯上是不合理的,也可能會引起系統(tǒng)的功能故障。步驟403、存儲節(jié)點創(chuàng)建小表;所述創(chuàng)建小表包括存儲節(jié)點建立小表,設定小表的數(shù)據(jù)范圍,并將小表與大表ID對應。步驟404、等待的方式消除逆差,創(chuàng)建小表。存儲節(jié)點等待與所述容忍參數(shù)相同的時間后,存儲節(jié)點的當前時間晚于大表的創(chuàng) 建時間,存儲節(jié)點正常創(chuàng)建小表。步驟405、存儲節(jié)點拒絕創(chuàng)建小表,并通過告警通知用戶。本發(fā)明還提供了一種數(shù)據(jù)版本的處理系統(tǒng),如圖5所示,該系統(tǒng)包括數(shù)據(jù)恢復模塊501以及對比模塊502,其中數(shù)據(jù)恢復模塊501與對比模塊502位于存儲節(jié)點。數(shù)據(jù)恢復模塊501,用于讀取redolog文件;獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳,發(fā)送給對比模塊502 ;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù);若逆差時間未超過容忍參數(shù),恢復數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,恢復數(shù)據(jù);對比模塊502,用于比較數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間,確定時間順差,通知數(shù)據(jù)恢復模塊501 ;確定時間逆差,進一步將兩者之間的時間間隔,即逆差時間與容忍參數(shù)相比,逆差時間未超過容忍參數(shù),通知數(shù)據(jù)恢復模塊501 ;逆差時間超過容忍參數(shù),通知數(shù)據(jù)恢復模塊501。該系統(tǒng)進一步包括更新通知模塊503,位于控制節(jié)點;元數(shù)據(jù)更新模塊504,位于存儲節(jié)點;更新通知模塊503,被接管節(jié)點停止工作,用于指定接管節(jié)點進行接管,并通知元數(shù)據(jù)更新模塊504 ;所述通知中包含被接管節(jié)點名稱;元數(shù)據(jù)更新模塊504,用于讀取元數(shù)據(jù)表中與所述被接管節(jié)點名稱對應的小表的最后更新時間,發(fā)送給對比模塊502 ;若當前時間與小表的最后更新時間為時間逆差,拒絕更新元數(shù)據(jù)表;若當前時間與小表的最后更新時間為時間順差,正常更新元數(shù)據(jù)表;相應的,對比模塊502,用于比較小表的最后更新時間與自身所在存儲節(jié)點的當前時間,若接管節(jié)點的當前時間早于小表的最后更新時間,則兩者之間為時間逆差,通知元數(shù)據(jù)更新模塊504 ;否則,為時間順差,通知元數(shù)據(jù)更新模塊504。一種數(shù)據(jù)版本的處理系統(tǒng),如圖6所示,該系統(tǒng)包括數(shù)據(jù)文件加載模塊601以及對比模塊602 ;其中,數(shù)據(jù)文件加載模塊601與對比模塊602位于存儲節(jié)點;數(shù)據(jù)文件加載模塊601,用于讀取自身所在存儲節(jié)點對應的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,發(fā)送給對比模塊602 ;若數(shù)據(jù)文件時間戳與當前時間為時間順差,加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間大于容忍參數(shù),拒絕加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,加載數(shù)據(jù)文件;對比模塊602,用于將當前時間與數(shù)據(jù)文件時間戳相比,當前時間晚于數(shù)據(jù)文件時間戳,則確定當前時間與數(shù)據(jù)文件時間戳時間順差,通知數(shù)據(jù)文件加載模塊601 ;否則,兩者時間逆差,確定逆差時間超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊601 ;確定逆差時間未超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊601 ;所述確定當前時間與數(shù)據(jù)文件時間戳時間順差包括若當前時間晚于數(shù)據(jù)文件時間戳,則時間順差,否則,時間逆差;所述確定逆差時間超過容忍參數(shù)包括獲取當前時間與數(shù)據(jù)文件時間戳的時間間隔,作為逆差時間與容忍參數(shù)相比,確定逆差時間超過容忍參數(shù)。一種數(shù)據(jù)版本的處理系統(tǒng),如圖7所示,該系統(tǒng)包括數(shù)據(jù)更新通知模塊701、數(shù)據(jù)更新模塊702以及對比模塊703 ;其中,數(shù)據(jù)更新通知模塊701位于控制節(jié)點,數(shù)據(jù)更新模塊702以及對比模塊703位于存儲節(jié)點;數(shù)據(jù)更新通知模塊701,用于接收用戶要更新的數(shù)據(jù),確定要更新的數(shù)據(jù)所對應的存儲節(jié)點,通知所述存儲節(jié)點的數(shù)據(jù)更新模塊702 ;所述確定要更新的數(shù)據(jù)所對應的存儲節(jié)點包括根據(jù)數(shù)據(jù)查詢元數(shù)據(jù)表的數(shù)據(jù)范圍,也就是元數(shù)據(jù)表中小表的數(shù)據(jù)范圍,確定要更新的數(shù)據(jù)對應的小表,小表所屬的存儲節(jié)點,即為要更新的數(shù)據(jù)對應的存儲節(jié)點;所述通知中包含要更新的數(shù)據(jù),即要添加或刪除的數(shù)據(jù),或要修改的數(shù)據(jù)及修改后的數(shù)據(jù);·
數(shù)據(jù)更新模塊702,用于獲取要更新的數(shù)據(jù)所屬的小表的最后更新時間,發(fā)送給對比模塊703 ;若當前時間與小表的最后更新時間為時間順差,或者當前時間與小表的最后更新時間為時間逆差且逆差時間未超過容忍參數(shù),正常更新數(shù)據(jù);若時間逆差且逆差時間超過容忍參數(shù),拒絕更新數(shù)據(jù);對比模塊703,用于將自身所在存儲節(jié)點的當前時間同小表的最后更新時間比較,確定則時間順差,通知數(shù)據(jù)更新模塊702 ;否則,時間逆差,確定逆差時間超過容忍參數(shù),通知數(shù)據(jù)更新模塊702 ;確定時間逆差且逆差時間未超過容忍參數(shù),通知數(shù)據(jù)更新模塊702 ;所述確定時間順差包括當前時間晚于小表的最后更新時間,則確定時間順差;所述確定逆差時間大于容忍參數(shù)包括將當前時間與小表的最后更新時間的時間間隔,作為逆差時間,與容忍參數(shù)相比,若逆差時間大于容忍參數(shù),則確定逆差時間超過容忍參數(shù),否則,逆差時間未超過容忍參數(shù)。—種數(shù)據(jù)版本的處理系統(tǒng),如圖8所不,該系統(tǒng)包括大表創(chuàng)建模塊801、小表創(chuàng)建模塊802以及對比模塊803 ;其中,大表創(chuàng)建模塊801位于控制節(jié)點,小表創(chuàng)建模塊802及對比模塊803位于存儲節(jié)點;大表創(chuàng)建模塊801,用于根據(jù)用戶的命令創(chuàng)建大表,并在大表創(chuàng)建后通知存儲節(jié)點的小表創(chuàng)建模塊802建立小表;所述創(chuàng)建大表包括生成大表ID,并記錄大表創(chuàng)建時間;小表創(chuàng)建模塊802,用于讀取大表創(chuàng)建模塊801中的大表創(chuàng)建時間,發(fā)送給對比模塊803 ;若時間順差,正常創(chuàng)建小表;若時間逆差且逆差時間超過容忍參數(shù),拒絕創(chuàng)建小表;若時間逆差且逆差時間未超過容忍參數(shù),等待的方式消除逆差,正常創(chuàng)建小表;對比模塊803,用于將自身所在存儲節(jié)點的當前時間與大表創(chuàng)建時間比較,確定時間順差,通知小表創(chuàng)建模塊802 ;確定時間逆差,且逆差時間超過容忍參數(shù),通知小表創(chuàng)建模塊802 ;確定時間逆差,且逆差時間未超過容忍參數(shù),通知小表創(chuàng)建模塊802 ;所述確定時間順差包括若當前時間晚于大表創(chuàng)建時間,則時間順差;所述確定時間逆差,且逆差時間超過容忍參數(shù)包括若當前時間早于大表創(chuàng)建時間,則時間逆差,將當前時間與大表創(chuàng)建時間的時間間隔作為逆差時間,同容忍參數(shù)相比,可確定逆差時間超過容忍參數(shù),或者逆差時間未超過容忍參數(shù)。
以上所述,僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保 護范圍。
權利要求
1.一種數(shù)據(jù)版本的處理方法,其特征在于,該方法包括 開始恢復數(shù)據(jù),讀取重操作日志redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間未超過容忍參數(shù),或者,數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,恢復redolog文件中的數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù)。
2.根據(jù)權利要求I所述的方法,其特征在于,所述開始恢復數(shù)據(jù)之前,該方法進一步包括 被接管節(jié)點停止工作,控制節(jié)點指派接管節(jié)點進行故障接管,接管節(jié)點根據(jù)被接管節(jié)點的節(jié)點名稱,獲取元數(shù)據(jù)表中與所述被接管節(jié)點的節(jié)點名稱對應的小表的最后更新時間,同自身的當前時間相比,若當前時間與小表的最后更新時間為時間順差,則正常接管;否則,拒絕接管。
3.一種數(shù)據(jù)版本的處理方法,其特征在于,該方法包括 存儲節(jié)點讀取自身的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,同當前時間比較,若當前時間與數(shù)據(jù)文件時間戳為時間順差,則加載數(shù)據(jù)文件;若當前時間與數(shù)據(jù)文件時間戳為時間逆差,且逆差時間超過容忍參數(shù),則拒絕加載數(shù)據(jù)文件;若當前時間與數(shù)據(jù)文件時間戳為時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,加載數(shù)據(jù)文件。
4.一種數(shù)據(jù)版本的處理方法,其特征在于,該方法包括 控制節(jié)點確定要更新的數(shù)據(jù)對應的存儲節(jié)點,存儲節(jié)點獲取要更新的數(shù)據(jù)所屬小表的最后更新時間,同當前時間比較,若當前時間與小表的最后更新時間為時間順差,或者,當前時間與小表的最后更新時間為時間逆差,且逆差時間未超過容忍參數(shù),正常更新數(shù)據(jù);若當前時間與小表的最后更新時間為時間逆差,且逆差時間超過容忍參數(shù),則拒絕更新數(shù)據(jù)。
5.一種數(shù)據(jù)版本的處理方法,其特征在于,該方法包括 控制節(jié)點創(chuàng)建大表并通知存儲節(jié)點創(chuàng)建小表;存儲節(jié)點將自身的當前時間與控制節(jié)點中大表的創(chuàng)建時間比較,若時間順差,則創(chuàng)建小表,若時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,創(chuàng)建小表;若時間逆差,且逆差時間超過容忍參數(shù),拒絕創(chuàng)建小表。
6.一種數(shù)據(jù)版本的處理系統(tǒng),其特征在于,該系統(tǒng)包括數(shù)據(jù)恢復模塊以及對比模塊; 數(shù)據(jù)恢復模塊,用于讀取redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳,發(fā)送給對比模塊;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,或者,數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間未超過容忍參數(shù),恢復數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù); 對比模塊,用于比較數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間,確定時間順差,通知數(shù)據(jù)恢復模塊;確定時間逆差,進一步將逆差時間與容忍參數(shù)相比,若超過容忍參數(shù),通知數(shù)據(jù)恢復模塊;未超過容忍參數(shù),通知數(shù)據(jù)恢復模塊。
7.根據(jù)權利要求6所述的系統(tǒng),其特征在于,該系統(tǒng)進一步包括更新通知模塊以及元數(shù)據(jù)更新模塊; 更新通知模塊,被接管節(jié)點停止工作,用于指派接管節(jié)點進行結果,并通知元數(shù)據(jù)更新模塊; 元數(shù)據(jù)更新模塊,用于讀取元數(shù)據(jù)表中,與所述被接管節(jié)點名稱對應的小表的最后更新時間,發(fā)送給對比模塊;若當前時間與小表的最后更新時間為時間逆差,拒絕更新元數(shù)據(jù)表;若當前時間與小表的最后更新時間為時間順差,更新元數(shù)據(jù)表; 相應的,對比模塊,用于比較小表的最后更新時間與自身所在接管節(jié)點的當前時間,若當前時間晚于小表的最后更新時間,則為時間順差,通知元數(shù)據(jù)更新模塊;否則,為時間逆差,通知元數(shù)據(jù)更新模塊。
8.一種數(shù)據(jù)版本的處理系統(tǒng),其特征在于,該系統(tǒng)包括數(shù)據(jù)文件加載模塊以及對比模塊; 數(shù)據(jù)文件加載模塊,用于讀取自身所在存儲節(jié)點對應的數(shù)據(jù)文件,獲取數(shù)據(jù)文件時間戳,發(fā)送給對比模塊;若數(shù)據(jù)文件時間戳與當前時間為時間順差,加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,加載數(shù)據(jù)文件;若數(shù)據(jù)文件時間戳與當前時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕加載數(shù)據(jù)文件; 對比模塊,用于將當前時間與數(shù)據(jù)文件時間戳比較,若確定當前時間與數(shù)據(jù)文件時間戳為時間順差,通知數(shù)據(jù)文件加載模塊;否則,為時間逆差,若進一步確定逆差時間超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊;若確定逆差時間未超過容忍參數(shù),通知數(shù)據(jù)文件加載模塊。
9.一種數(shù)據(jù)版本的處理系統(tǒng),其特征在于,該系統(tǒng)包括數(shù)據(jù)更新通知模塊、數(shù)據(jù)更新模塊以及對比模塊; 數(shù)據(jù)更新通知模塊,用于確定要更新的數(shù)據(jù)所對應的存儲節(jié)點,通知所述存儲節(jié)點的數(shù)據(jù)更新模塊; 數(shù)據(jù)更新模塊,用于獲取要更新的數(shù)據(jù)所屬小表的最后更新時間,發(fā)送給對比模塊;若當前時間與小表的最后更新時間為時間順差,或者時間逆差且逆差時間未超過容忍參數(shù),正常更新數(shù)據(jù);若時間逆差且逆差時間超過容忍參數(shù),拒絕更新數(shù)據(jù); 對比模塊,用于將自身所在存儲節(jié)點的當前時間與小表的最后更新時間比較,若為時間順差,通知數(shù)據(jù)更新模塊;若為時間逆差,且逆差時間超過容忍參數(shù),通知數(shù)據(jù)更新模塊;若為時間逆差,且逆差時間未超過容忍參數(shù),通知數(shù)據(jù)更新模塊。
10.一種數(shù)據(jù)版本的處理系統(tǒng),其特征在于,該系統(tǒng)包括大表創(chuàng)建模塊、小表創(chuàng)建模塊以及對比模塊; 大表創(chuàng)建模塊,用于創(chuàng)建大表,大表創(chuàng)建后通知小表創(chuàng)建模塊; 小表創(chuàng)建模塊,用于讀取大表創(chuàng)建模塊中的大表創(chuàng)建時間,發(fā)送給對比模塊;若當前時間與大表創(chuàng)建時間為時間順差,正常創(chuàng)建小表;若時間逆差,且逆差時間超過容忍參數(shù),拒絕創(chuàng)建小表;若時間逆差,且逆差時間未超過容忍參數(shù),等待的方式消除逆差,創(chuàng)建小表; 對比模塊,用于將自身所在存儲節(jié)點的當前時間與大表創(chuàng)建時間比較,若時間順差,通知小表創(chuàng)建模塊;若時間逆差,且逆差時間超過容忍參數(shù),通知小表創(chuàng)建模塊;若時間逆差,且逆差時間未超過容忍參數(shù),通知小表創(chuàng)建模塊。
全文摘要
本發(fā)明公開了一種數(shù)據(jù)版本的處理方法,該方法包括開始恢復數(shù)據(jù),讀取redolog文件,獲取redolog文件中的數(shù)據(jù)時間及數(shù)據(jù)文件時間戳;若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間未超過容忍參數(shù),或者,數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間順差,恢復redolog文件中的數(shù)據(jù);若數(shù)據(jù)文件時間戳與redolog文件中的數(shù)據(jù)時間為時間逆差,且逆差時間超過容忍參數(shù),拒絕恢復數(shù)據(jù)。本發(fā)明還公開了一種數(shù)據(jù)版本的處理系統(tǒng),采用本發(fā)明所述的方法及系統(tǒng),提高了系統(tǒng)更新數(shù)據(jù)、查詢數(shù)據(jù)、加載數(shù)據(jù)文件的數(shù)據(jù)版本的準確性。
文檔編號G06F17/30GK102890679SQ20111020340
公開日2013年1月23日 申請日期2011年7月20日 優(yōu)先權日2011年7月20日
發(fā)明者余正林, 沈蓓潔, 常二鵬 申請人:中興通訊股份有限公司