一種文件版本控制系統(tǒng)及其方法【專(zhuān)利摘要】本發(fā)明公開(kāi)了一種文件版本控制系統(tǒng),包括本地庫(kù)和控制模塊,所述本地庫(kù)包括工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù),所述工作區(qū)用于存放本系統(tǒng)管理的文件,所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表,所述版本庫(kù)用于存放工作區(qū)中版本文件;所述控制模塊包括抽象文件系統(tǒng)接口模塊、文件操作模塊、元數(shù)據(jù)訪問(wèn)模塊、恢復(fù)管理器模塊、工作區(qū)監(jiān)視器模塊;本發(fā)明將文件加密后備份到服務(wù)器,可防止服務(wù)器端的隱私泄密;自動(dòng)維護(hù)文件的版本信息,方便用戶(hù)對(duì)文件誤操作后恢復(fù)到文件歷史版本。此外,文件樹(shù)、版本樹(shù)、版本列表使用表格存儲(chǔ),再將表格轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)到磁盤(pán)文件,表格中單元格的修改、刪除操作通過(guò)寫(xiě)入新值實(shí)現(xiàn),避免了磁盤(pán)的隨機(jī)訪問(wèn),減少磁盤(pán)I/O,減少網(wǎng)絡(luò)開(kāi)銷(xiāo)?!緦?zhuān)利說(shuō)明】一種文件版本控制系統(tǒng)及其方法【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明屬于計(jì)算機(jī)網(wǎng)絡(luò)應(yīng)用【
技術(shù)領(lǐng)域:
】,具體涉及一種用于對(duì)文件進(jìn)行版本控制和加密遠(yuǎn)程備份的方法?!?br>背景技術(shù):
】[0002]隨著網(wǎng)絡(luò)技術(shù)的發(fā)展,很多網(wǎng)絡(luò)公司將其服務(wù)器的硬盤(pán)或者硬盤(pán)陣列的一部分容量分給注冊(cè)用戶(hù)使用,即網(wǎng)絡(luò)硬盤(pán)(網(wǎng)盤(pán))的問(wèn)世,由于網(wǎng)絡(luò)硬盤(pán)具有隨時(shí)隨地存取、自動(dòng)遠(yuǎn)程備份、可靠等優(yōu)點(diǎn),所以受到了越來(lái)越多的用戶(hù)的青睞。[0003]然而,網(wǎng)盤(pán)供應(yīng)商提供的客戶(hù)端存取文件時(shí)都是明文存取的,文件安全日漸成為用戶(hù)擔(dān)心的首要問(wèn)題,一方面,大部分網(wǎng)盤(pán)提供商未提供版本控制功能,如果文件發(fā)生誤操作后就會(huì)造成文件不能恢復(fù)到誤操作之前的狀況;另一方面,有些網(wǎng)盤(pán)供應(yīng)商提供文件歷史版本恢復(fù)服務(wù),由于功能較弱,致使用戶(hù)不能自定義文件版本。【
發(fā)明內(nèi)容】[0004]針對(duì)現(xiàn)有技術(shù)中所出現(xiàn)的問(wèn)題,本發(fā)明的目的是提供了一種對(duì)文件進(jìn)行版本控制、加密遠(yuǎn)程備份的系統(tǒng)和方法。[0005]本發(fā)明的系統(tǒng)的技術(shù)方案為:[0006]-種文件版本控制系統(tǒng),包括本地庫(kù)和控制模塊,所述本地庫(kù)包括工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù),所述工作區(qū)用于存放本系統(tǒng)管理的文件,所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表,所述版本庫(kù)用于存放工作區(qū)中版本文件;所述控制模塊包括抽象文件系統(tǒng)接口模塊、文件操作模塊、元數(shù)據(jù)訪問(wèn)模塊、恢復(fù)管理器模塊、工作區(qū)監(jiān)視器模塊;所述抽象文件系統(tǒng)接口模塊提供統(tǒng)一的文件訪問(wèn)接口,所述文件操作模塊通過(guò)所述抽象文件系統(tǒng)接口提供文件操作服務(wù),所述元數(shù)據(jù)訪問(wèn)模塊提供對(duì)元數(shù)據(jù)的訪問(wèn)服務(wù),所述恢復(fù)管理器模塊用于維護(hù)數(shù)據(jù)之間的一致性,所述工作區(qū)監(jiān)視器模塊用于監(jiān)視工作區(qū)內(nèi)的文件變化,并根據(jù)文件變化類(lèi)型觸發(fā)對(duì)應(yīng)的事件處理。[0007]進(jìn)一步,還包括服務(wù)器,所述服務(wù)器用于備份所述本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù);所述控制模塊還包括一個(gè)用于同步服務(wù)器與所述本地庫(kù)之間的元數(shù)據(jù)庫(kù)和版本庫(kù)的同步管理器模塊。[0008]進(jìn)一步,所述文件樹(shù)、版本樹(shù)、版本列表存儲(chǔ)在表格中,所述表格每行有一個(gè)唯一標(biāo)識(shí)符,所述表格的每個(gè)存儲(chǔ)單元可以存儲(chǔ)多個(gè)值,每個(gè)所述值有一個(gè)時(shí)間戳。[0009]進(jìn)一步,所述文件樹(shù)的節(jié)點(diǎn)表示普通文件或目錄,每個(gè)節(jié)點(diǎn)有唯一標(biāo)識(shí)符key,所述節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑表示與所述節(jié)點(diǎn)對(duì)應(yīng)的文件相對(duì)于工作區(qū)的路徑;所述文件樹(shù)中每個(gè)表示普通文件的節(jié)點(diǎn)都有一個(gè)版本樹(shù)相對(duì)應(yīng),每個(gè)所述版本樹(shù)有唯一的id標(biāo)識(shí),所述版本樹(shù)中每個(gè)節(jié)點(diǎn)表示文件的一個(gè)版本。[0010]本發(fā)明的方法的技術(shù)方案,一種文件版本控制方法,包括以下步驟:[0011]1)初始化本地庫(kù)中的工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù);所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表;[0012]2)監(jiān)視所述工作區(qū)中的文件變化,將變化后的版本文件存儲(chǔ)到版本庫(kù)中,將所述工作區(qū)中的文件信息轉(zhuǎn)換并存儲(chǔ)于文件樹(shù),將所述工作區(qū)中的文件版本信息轉(zhuǎn)換并存儲(chǔ)于所述版本樹(shù),將版本庫(kù)中的版本文件信息轉(zhuǎn)換并存儲(chǔ)于版本列表中;[0013]3)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式,并保存到元數(shù)據(jù)庫(kù)中的元數(shù)據(jù)文件內(nèi);[0014]4)將所述本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù)加密后備份到服務(wù)器。[0015]進(jìn)一步,其特征在于,執(zhí)行所述步驟1)_4)的過(guò)程中定期檢查本地庫(kù)與服務(wù)器的元數(shù)據(jù)庫(kù)和版本庫(kù)的一致性,若不一致則進(jìn)行同步。[0016]進(jìn)一步,所述步驟3)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式的步驟為:[0017]3-1)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為表格存儲(chǔ)方式,所述表格由行和列組成,所述行和列確定一個(gè)存儲(chǔ)單元cell,所述存儲(chǔ)單元cell可以存放多個(gè)值,所述每個(gè)值帶一個(gè)時(shí)間戳;[0018]3-2)將所述存儲(chǔ)單元cell中的每一個(gè)值{value,timestamp}轉(zhuǎn)換為{rowkey#column#timestamp#type,value}鍵值對(duì)存儲(chǔ);其中rowkey為存儲(chǔ)單兀cell所在行的rowkey,column為存儲(chǔ)單元cell所在列的column,type表示所述鍵值對(duì)是數(shù)據(jù)還是一個(gè)刪除標(biāo)志;[0019]3-3)將所述鍵值對(duì)寫(xiě)入操作日志,然后將鍵值對(duì)存入內(nèi)存中,當(dāng)所占內(nèi)存空間達(dá)到閾值時(shí),進(jìn)行minorcompact操作;[0020]3-4)在minorcompact操作中,倉(cāng)ij建一個(gè)新的元數(shù)據(jù)文件,將內(nèi)存中的鍵值對(duì)按鍵有序?qū)懭胄聞?chuàng)建的元數(shù)據(jù)文件中。[0021]進(jìn)一步,所述同步時(shí)對(duì)所述元數(shù)據(jù)文件進(jìn)行mergecompact操作,所述mergecompact操作為將本地新增的元數(shù)據(jù)文件合并為一個(gè)新的元數(shù)據(jù)文件,所述新的元數(shù)據(jù)文件的主版本號(hào)為現(xiàn)有最大主版本號(hào)加1,次版本號(hào)為0。[0022]進(jìn)一步,所述同步時(shí)當(dāng)元數(shù)據(jù)文件過(guò)多時(shí)進(jìn)行majorcompact操作,所述majorcompact操作為將版本號(hào)較小且次版本號(hào)為0的元數(shù)據(jù)文件合并成一個(gè)新的元數(shù)據(jù)文件,所述新元數(shù)據(jù)文件的版本號(hào)為被合并的元數(shù)據(jù)文件的最大版本號(hào),所述新的元數(shù)據(jù)文件包含被合并的元數(shù)據(jù)文件的所有有效的鍵值對(duì)。[0023]本發(fā)明的有益效果為:與現(xiàn)有技術(shù)相比,該系統(tǒng)中的遠(yuǎn)程備份適用場(chǎng)合廣泛,不依賴(lài)于具體的服務(wù),可以是任意一個(gè)網(wǎng)盤(pán)服務(wù)、ftp服務(wù)器、samba服務(wù)器或其他文件服務(wù);當(dāng)文件通過(guò)用戶(hù)已知的加密算法加密后備份到服務(wù)器,可以防止服務(wù)器端文件被竊取;自動(dòng)維護(hù)文件的版本信息,方便用戶(hù)對(duì)文件誤操作后恢復(fù)到文件歷史版本。此外,文件樹(shù)、版本樹(shù)、版本列表使用表格存儲(chǔ),再將表格轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)到磁盤(pán)文件,表格中單元格的修改、刪除操作通過(guò)寫(xiě)入新值實(shí)現(xiàn),避免了磁盤(pán)的隨機(jī)訪問(wèn),減少磁盤(pán)1/0,減少網(wǎng)絡(luò)開(kāi)銷(xiāo)。【專(zhuān)利附圖】【附圖說(shuō)明】[0024]圖1本發(fā)明的系統(tǒng)結(jié)構(gòu)示意圖;[0025]圖2本發(fā)明的客戶(hù)端體系結(jié)構(gòu)示意圖;[0026]圖3本發(fā)明的文件樹(shù)FileTree結(jié)構(gòu)示意圖;[0027]圖4本發(fā)明的版本樹(shù)VersionTree結(jié)構(gòu)示意圖;[0028]圖5本發(fā)明的客戶(hù)端存儲(chǔ)的數(shù)據(jù)圖;[0029]圖6本發(fā)明的服務(wù)器上存儲(chǔ)的數(shù)據(jù)圖;[0030]圖7本發(fā)明的元數(shù)據(jù)兩層存儲(chǔ)結(jié)構(gòu)示意圖;[0031]圖8本發(fā)明的文件樹(shù)FileTree在表格中的存儲(chǔ)格式;[0032]圖9本發(fā)明的版本樹(shù)VersionTree在表格中的存儲(chǔ)格式;[0033]圖10本發(fā)明的文件新增處理流程圖;[0034]圖11本發(fā)明的文件更新處理流程圖;[0035]圖12本發(fā)明的同步管理器工作流程圖?!揪唧w實(shí)施方式】[0036]下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)描述。[0037]圖1為本發(fā)明的系統(tǒng)結(jié)構(gòu)圖,系統(tǒng)由服務(wù)器和客戶(hù)端組成,服務(wù)器提供遠(yuǎn)程文件系統(tǒng)服務(wù),可以是samba服務(wù)器、ftp服務(wù)器、網(wǎng)盤(pán)服務(wù)等;客戶(hù)端為安裝在用戶(hù)電腦上的程序,用戶(hù)安裝客戶(hù)端程序,指定一個(gè)目錄作為工作區(qū),配置服務(wù)器地址、用戶(hù)名、密碼等信息即可使用該系統(tǒng)。[0038]系統(tǒng)可供多個(gè)用戶(hù)同時(shí)使用,每個(gè)用戶(hù)可以有多個(gè)客戶(hù)端。用戶(hù)將需要系統(tǒng)維護(hù)的文件存放于工作區(qū)內(nèi),客戶(hù)端自動(dòng)維護(hù)工作區(qū)內(nèi)的文件版本,并將文件版本加密備份到服務(wù)器上。用戶(hù)的其他客戶(hù)端會(huì)階段性的檢測(cè)服務(wù)器上有沒(méi)有新的文件,若有新的文件則下載更新,從而同一用戶(hù)的多個(gè)客戶(hù)端的工作區(qū)保持最終一致性,所述最終一致性為一個(gè)工作區(qū)內(nèi)的文件變化經(jīng)過(guò)一段時(shí)間最終會(huì)同步至同一用戶(hù)的其他客戶(hù)端。[0039]圖2為客戶(hù)端結(jié)構(gòu),包括工作區(qū)監(jiān)視器、同步管理器、恢復(fù)管理器、文件操作、元數(shù)據(jù)訪問(wèn)、抽象文件系統(tǒng)接口等6個(gè)模塊;本地庫(kù)位于用戶(hù)電腦上,由工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù)組成,所述工作區(qū)用于存放本系統(tǒng)管理的文件,所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表,所述版本庫(kù)用于存放工作區(qū)中版本文件。[0040]抽象文件系統(tǒng)接口模塊為本地文件系統(tǒng)以及服務(wù)器提供統(tǒng)一的文件訪問(wèn)接口。所述接口分為兩類(lèi):處理文件和目錄的接口、讀寫(xiě)文件數(shù)據(jù)的接口。處理文件和目錄的接口用于創(chuàng)建、刪除文件或目錄、讀取文件和目錄的創(chuàng)建時(shí)間、最后修改時(shí)間等元數(shù)據(jù)。當(dāng)讀取的文件或目錄位于本地文件系統(tǒng)時(shí),該模塊直接調(diào)用本地文件系統(tǒng)的接口讀取數(shù)據(jù)。當(dāng)文件或目錄位于服務(wù)器時(shí),通過(guò)網(wǎng)絡(luò)協(xié)議讀取數(shù)據(jù)。[0041]文件操作模塊通過(guò)抽象文件系統(tǒng)接口提供本地庫(kù)和服務(wù)器上的文件訪問(wèn)服務(wù)。本系統(tǒng)具有多用戶(hù)多客戶(hù)端的特性,服務(wù)器上會(huì)同時(shí)存在多個(gè)用戶(hù)的數(shù)據(jù)。文件操作模塊使上層組件不需要知道當(dāng)前用戶(hù)的情況下操作當(dāng)前用戶(hù)在本地以及服務(wù)器上的文件和目錄。[0042]文件樹(shù)、版本樹(shù)、版本列表等元數(shù)據(jù)保存在元數(shù)據(jù)庫(kù)內(nèi)的元數(shù)據(jù)文件中,元數(shù)據(jù)訪問(wèn)組件提供對(duì)元數(shù)據(jù)的讀寫(xiě)操作:將元數(shù)據(jù)文件讀入內(nèi)存進(jìn)行讀寫(xiě)操作,將更新后的元數(shù)據(jù)寫(xiě)入磁盤(pán)。[0043]恢復(fù)管理器模塊在客戶(hù)端啟動(dòng)時(shí)檢測(cè)并處理本地庫(kù)中數(shù)據(jù)不一致問(wèn)題;在客戶(hù)端運(yùn)行過(guò)程中,檢測(cè)并處理服務(wù)器上的數(shù)據(jù)不一致。所述數(shù)據(jù)不一致指工作區(qū)、文件樹(shù)、版本樹(shù)、版本列表、版本庫(kù)之間的數(shù)據(jù)不一致。另外,在客戶(hù)端運(yùn)行過(guò)程中,恢復(fù)管理器周期性刪除冗余數(shù)據(jù)。所述冗余數(shù)據(jù)為不再需要的數(shù)據(jù),例如一個(gè)文件被刪除了一定時(shí)間后,文件樹(shù)中表示該文件的節(jié)點(diǎn)即為冗余數(shù)據(jù)。[0044]同步管理器模塊負(fù)責(zé)元數(shù)據(jù)庫(kù)、版本庫(kù)與服務(wù)器之間的數(shù)據(jù)同步。用戶(hù)在某一個(gè)客戶(hù)端上對(duì)工作區(qū)文件所做的改動(dòng)會(huì)被寫(xiě)入到元數(shù)據(jù)庫(kù)和版本庫(kù)中,從而被同步管理器同步到服務(wù)器端,隨后該用戶(hù)的其他客戶(hù)端的同步管理器將服務(wù)器上變化的數(shù)據(jù)同步到各自本地庫(kù)。[0045]工作區(qū)監(jiān)視器模塊監(jiān)視工作區(qū)的文件變化,,并根據(jù)文件變化類(lèi)型觸發(fā)對(duì)應(yīng)的事件處理。使用文件樹(shù)記錄工作區(qū)中的文件,用版本樹(shù)記錄文件的版本歷史,將文件的新增版本復(fù)制到版本庫(kù)中,并使用版本列表記錄版本庫(kù)中的版本。[0046]圖3給出了filetree的結(jié)構(gòu),為了方便描述,使用file表示一個(gè)文件,file可以被編輯,每次編輯保存在磁盤(pán)上的文件稱(chēng)為versionfile,versionfile是file在某一時(shí)刻的快照,工作區(qū)workarea中的文件都是versionfile;圖3中的file被組織成文件樹(shù)filetree,樹(shù)中的節(jié)點(diǎn)路徑反應(yīng)了文件相對(duì)于workarea的路徑,workarea中文件夾與文件夾下文件關(guān)系在filetree中為父節(jié)點(diǎn)與子節(jié)點(diǎn)的關(guān)系,filetree中的節(jié)點(diǎn)有兩種類(lèi)型:文件和目錄,workarea中的內(nèi)容是filetree的一個(gè)快照。[0047]圖4給出了版本樹(shù)versiontree的結(jié)構(gòu),更新file會(huì)產(chǎn)生版本文件versionfile,軟件使用versiontree記錄file的版本變化,一個(gè)節(jié)點(diǎn)表示一個(gè)版本文件,file和versiontree--對(duì)應(yīng);圖4為一個(gè)file的versiontree:用戶(hù)創(chuàng)建file時(shí),軟件創(chuàng)建一個(gè)與之對(duì)應(yīng)的versiontree,根節(jié)點(diǎn)versionfile1是file創(chuàng)建時(shí)的版本,用戶(hù)更新versionfile1后產(chǎn)生versionfile2,更新versionfile2后產(chǎn)生versionfile3,再次更新versionfile1產(chǎn)生versionfile4,versiontree中的父子關(guān)系與versionfile的衍生關(guān)系對(duì)應(yīng)。[0048]此外,versionfile有兩種類(lèi)型:臨時(shí)類(lèi)型和永久類(lèi)型,臨時(shí)類(lèi)型是工作區(qū)監(jiān)視器自動(dòng)標(biāo)記的版本,用于在用戶(hù)對(duì)文件誤操作后進(jìn)行文件恢復(fù);永久類(lèi)型是用戶(hù)標(biāo)記的版本,除非用戶(hù)手動(dòng)刪除,本發(fā)明不會(huì)刪除文件的永久類(lèi)型的版本。工作區(qū)監(jiān)視器將文件每一次更新后的內(nèi)容作為一個(gè)臨時(shí)版本記錄在versiontree中,默認(rèn)情況下會(huì)保存最近七天的每天最后一個(gè)臨時(shí)版本,最近一天的最新10個(gè)臨時(shí)版本。兩種類(lèi)型的版本文件都保存在版本庫(kù)versionrepository中。[0049]本發(fā)明使用版本列表versionlist記錄版本庫(kù)versionrepository中的版本文件,versionlist中每一個(gè)節(jié)點(diǎn)記錄一個(gè)版本文件的SHA1哈希值、被所有版本樹(shù)versiontree中節(jié)點(diǎn)的引用次數(shù)之和、該版本文件的未加密形式在versionrepository中是否存在、該版本文件的加密形式在versionrepository中是否存在。[0050]圖5為本地庫(kù)中的數(shù)據(jù)組成。工作區(qū)是用戶(hù)指定的一個(gè)目錄,用于存放需要本系統(tǒng)管理的文件。元數(shù)據(jù)庫(kù)metarepository里包含許多元數(shù)據(jù)文件,用于存放鍵值對(duì),即本發(fā)明中的文件樹(shù)filetree、版本樹(shù)versiontree、版本列表versionlist。版本庫(kù)versionrepository用于存放工作區(qū)中文件的版本。[0051]圖6為服務(wù)器端保存的文件和數(shù)據(jù)。服務(wù)器用于備份客戶(hù)端的元數(shù)據(jù)庫(kù)metarepository和版本庫(kù)versionrepository。當(dāng)多個(gè)用戶(hù)共享服務(wù)器時(shí),各個(gè)用戶(hù)之間的數(shù)據(jù)互不影響。[0052]文件樹(shù)filetree中的節(jié)點(diǎn)表示文件或目錄,其內(nèi)部是一個(gè)鍵值對(duì)序列,保存與文件或目錄相關(guān)的信息。其中一個(gè)鍵值對(duì)("key",keyvalue)用于標(biāo)識(shí)該節(jié)點(diǎn),,每個(gè)節(jié)點(diǎn)有唯一標(biāo)識(shí)符key,即keyvalue在filetree中是唯一的,由文件創(chuàng)建時(shí)的路徑和時(shí)間組合而成。此外每個(gè)節(jié)點(diǎn)都包含一個(gè)name屬性,鍵值對(duì)("name",namevalue)用于表示文件或目錄的名稱(chēng)。所述節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑表示與所述節(jié)點(diǎn)對(duì)應(yīng)的文件相對(duì)于工作區(qū)的路徑。節(jié)點(diǎn)相對(duì)于工作區(qū)的路徑由根節(jié)點(diǎn)至該節(jié)點(diǎn)路徑上的節(jié)點(diǎn)的name組成。節(jié)點(diǎn)可以通過(guò)相對(duì)路徑進(jìn)行訪問(wèn),或通過(guò)key訪問(wèn)。當(dāng)節(jié)點(diǎn)表示文件時(shí),節(jié)點(diǎn)內(nèi)部的鍵值對(duì)存放文件的name、版本樹(shù)id、當(dāng)前版本、倉(cāng)ij建時(shí)間、最后一次修改時(shí)間、刪除時(shí)間、父節(jié)點(diǎn)key、該節(jié)點(diǎn)的key。[0053]當(dāng)節(jié)點(diǎn)表示目錄時(shí),節(jié)點(diǎn)內(nèi)部的鍵值對(duì)存放目錄的name、創(chuàng)建時(shí)間、最后一次修改時(shí)間、父節(jié)點(diǎn)key、所有子節(jié)點(diǎn)的key列表、該節(jié)點(diǎn)的key。[0054]所述文件樹(shù)中每個(gè)表示普通文件的節(jié)點(diǎn)都有一個(gè)版本樹(shù)相對(duì)應(yīng),每個(gè)版本樹(shù)versiontree都有一個(gè)唯一的id,由該版本樹(shù)對(duì)應(yīng)的文件的路徑和創(chuàng)建時(shí)間組合而成。versiontree節(jié)點(diǎn)內(nèi)部是一個(gè)鍵值對(duì)序列,所述版本樹(shù)中每個(gè)節(jié)點(diǎn)表示文件的一個(gè)版本,序列中的每個(gè)鍵值對(duì)分別保存該版本引用的版本文件SHA1哈希值digest、版本類(lèi)型、父節(jié)點(diǎn)digest、創(chuàng)建時(shí)間。同一個(gè)versiontree中,每個(gè)節(jié)點(diǎn)的digest都是唯一的。所述版本類(lèi)型有兩種:臨時(shí)版本和永久版本。臨時(shí)版本由工作區(qū)監(jiān)視器標(biāo)識(shí)、永久版本由用戶(hù)標(biāo)識(shí)。[0055]版本列表versionlist用于記錄versionrepository中versionfile信息的列表。versionlist中一個(gè)節(jié)點(diǎn)表示一個(gè)versionfile,節(jié)點(diǎn)內(nèi)部是一個(gè)鍵值對(duì)序列,用于存放versionfile的digest、引用計(jì)數(shù)、versionfile創(chuàng)建時(shí)間、未加密形式在versionrepository中是否存在、加密形式在versionrepository中是否存在。所述digest為versionfile的SHA1哈希值。[0056]filetree中節(jié)點(diǎn)的key由對(duì)應(yīng)文件的路徑和創(chuàng)建時(shí)間組合而成,versiontree的id由對(duì)應(yīng)文件的路徑和創(chuàng)建時(shí)間組合而成。因此,由filetree中的節(jié)點(diǎn)可以找到文件對(duì)應(yīng)的versiontree由versiontree也可以找到filetree中對(duì)應(yīng)的節(jié)點(diǎn)。versiontree中節(jié)點(diǎn)由引用的版本文件digest標(biāo)識(shí),versionlist中的節(jié)點(diǎn)由對(duì)應(yīng)的版本文件digest標(biāo)識(shí)。因此,versiontree和versionlist中的節(jié)點(diǎn)存在對(duì)應(yīng)關(guān)系。版本文件存儲(chǔ)在versionrepository中的文件名有該版本文件的digest和類(lèi)型組合而成。所述類(lèi)型有兩種:加密和未加密。[0057]filetree、versiontree、versionlist和versionrepository中的數(shù)據(jù)和文件相互協(xié)作、共同維護(hù)工作區(qū)workarea中的文件,它們之間存在以下一致性約束:[0058]l)workarea中的文件在filetree中均有對(duì)應(yīng)的節(jié)點(diǎn),且節(jié)點(diǎn)的name、當(dāng)前版本屬性與workarea中對(duì)應(yīng)的文件一致;[0059]2)filetree中的所有未被刪除的file的當(dāng)前文件在workarea中均有對(duì)應(yīng)的文件存在;filetree中所有file均有對(duì)應(yīng)的versiontree,以及versiontree中對(duì)應(yīng)的當(dāng)前版本節(jié)點(diǎn)。[0060]3)versiontree中所有版本文件在versionlist均存在;versiontree表不的file在filetree中存在。[0061]4)versionlist中的各個(gè)節(jié)點(diǎn)引用計(jì)數(shù)等于versiontree的引用之和;versionlist中記錄的versionfile在versionrepository中以加密或者未加密的形式存在。[0062]5)versionrepository中的版本文件在versionlist均有記錄。[0063]工作區(qū)workarea中文件被刪除,filetree中該文件對(duì)應(yīng)的節(jié)點(diǎn)記錄文件被刪除的時(shí)間。文件被刪除一段時(shí)間后,filetree中對(duì)應(yīng)節(jié)點(diǎn)以及文件對(duì)應(yīng)的versiontree被刪除,versionlist中所有被該versiontree中的節(jié)點(diǎn)引用的版本文件節(jié)點(diǎn)的引用計(jì)數(shù)減1。若版本文件的引用計(jì)數(shù)為0時(shí),該版本文件被刪除。[0064]圖7為元數(shù)據(jù)存儲(chǔ)層次結(jié)構(gòu),共分為兩層:Key_Value層和Table層。Key-Value層在文件的基礎(chǔ)上提供鍵值對(duì)存儲(chǔ)服務(wù),Table層在Key-Value層基礎(chǔ)上提供表格存儲(chǔ)服務(wù)。所述文件包括位于磁盤(pán)上的元數(shù)據(jù)文件和內(nèi)存文件,圖中的file1,file2,…,fileη為磁盤(pán)文件,immutablefile和memfile為內(nèi)存文件。元數(shù)據(jù)文件可以有多個(gè),而內(nèi)存文件只有兩個(gè)。[0065]表格由若干行組成,所述表格每行有一個(gè)唯一標(biāo)識(shí)符,所述表格的每個(gè)存儲(chǔ)單元可以存儲(chǔ)多個(gè)值,每個(gè)所述值有一個(gè)時(shí)間戳。每行通過(guò)rowkey標(biāo)識(shí),每行包含很多列column。行和列都可以增加。rowkey和column可以確定一個(gè)存儲(chǔ)單兀cell。cell中可以存放多個(gè)值,每一個(gè)值都有一個(gè)時(shí)間戳。更新cell中數(shù)據(jù)操作,不會(huì)立即刪除原有數(shù)據(jù),而是將新值加上時(shí)間戳放入cell中。讀取cell時(shí),只會(huì)讀取cell的最新值。刪除cell數(shù)據(jù)時(shí),向cell中存放一個(gè)帶有時(shí)間戳的刪除標(biāo)記。cell中的每一個(gè)值轉(zhuǎn)換成鍵值對(duì)(rowkey,column,timestamp)->value交由Key-Value層存儲(chǔ)。[0066]Key-Value層使用多個(gè)元數(shù)據(jù)文件和兩個(gè)內(nèi)存文件存儲(chǔ)keyvalue。Key-Value層寫(xiě)入keyvalue時(shí),首先將keyvalue寫(xiě)入日志,然后再將keyvalue寫(xiě)入memfile。當(dāng)memfile內(nèi)存占用量達(dá)到限制后,進(jìn)行minorcompact操作。所述minorcompact操作為,將memfile轉(zhuǎn)為immutablefile,并創(chuàng)建一個(gè)新的memfile和一個(gè)元數(shù)據(jù)文件。新的元數(shù)據(jù)文件用于將immutablefile中的內(nèi)容寫(xiě)入其中,新的memfile用于寫(xiě)入新的keyvalue。[0067]每個(gè)元數(shù)據(jù)文件都有一個(gè)版本號(hào),格式為:主版本號(hào)_次版本號(hào)。版本號(hào)大小比較方式為,先按主版本號(hào)比較大小,如果主版本號(hào)一樣則比較次版本號(hào)。版本號(hào)較小的元數(shù)據(jù)文件,其存放的鍵值對(duì)的timestamp比版本號(hào)大的timestamp小。minorcompact操作中創(chuàng)建的元數(shù)據(jù)文件的主版本號(hào)為當(dāng)前客戶(hù)端的最大版本號(hào)的主版本號(hào),次版本號(hào)為最大版本號(hào)的次版本號(hào)加1。若客戶(hù)端沒(méi)有元數(shù)據(jù)文件,則默認(rèn)最大版本號(hào)的主版本號(hào)和次版本號(hào)均為〇。[0068]客戶(hù)端與服務(wù)器端元數(shù)據(jù)文件集合的差稱(chēng)為新增文件,同步管理器進(jìn)行同步時(shí),對(duì)新增文件進(jìn)行mergecompact操作。所述mergecompact操作為,創(chuàng)建一個(gè)新的元數(shù)據(jù)文件,將新增文件中的數(shù)據(jù)進(jìn)行多路歸并合并寫(xiě)入其中,然后同步管理器刪除新增文件,將創(chuàng)建的元數(shù)據(jù)文件上傳至服務(wù)器。mergecompact操作中創(chuàng)建的元數(shù)據(jù)文件的主版本號(hào)為當(dāng)前客戶(hù)端中最大版本號(hào)元數(shù)據(jù)文件的主版本號(hào)加1,次版本號(hào)為〇。因?yàn)閙ergecompact操作的存在,服務(wù)器上所有元數(shù)據(jù)文件的次版本號(hào)均為〇。[0069]服務(wù)器端元數(shù)據(jù)文件過(guò)多時(shí),同步管理器進(jìn)行majorcompact操作。所述majorcompact操作為:將主版本號(hào)較小且次版本號(hào)為0的元數(shù)據(jù)文件合并成一個(gè)新的元數(shù)據(jù)文件,并刪除被合并的元數(shù)據(jù)文件。新元數(shù)據(jù)文件的版本號(hào)為被合并的元數(shù)據(jù)文件中的最大版本號(hào),其內(nèi)容包含了被合并的元數(shù)據(jù)文件的所有有效鍵值對(duì)。[0070]元數(shù)據(jù)文件的命名規(guī)則為:版本號(hào)-{起始版本號(hào)-終止版本號(hào)}?;ɡㄌ?hào)內(nèi)的內(nèi)容說(shuō)明該元數(shù)據(jù)文件由哪些次版本號(hào)為0的元數(shù)據(jù)文件合并而來(lái)。對(duì)于minorcompact和mergecompact操作產(chǎn)生的元數(shù)據(jù)文件,起始版本號(hào)和終止版本號(hào)相同,均為該元數(shù)據(jù)文件的版本號(hào)。對(duì)于majorcompact產(chǎn)生的元數(shù)據(jù)文件,起始版本號(hào)和終止版本號(hào)不同。[0071]圖8為文件樹(shù)filetree在表格中的存儲(chǔ)格式。文件樹(shù)filetree中每一個(gè)節(jié)點(diǎn)作為一行存儲(chǔ)在表格中。根節(jié)點(diǎn)對(duì)應(yīng)行的rowkey為固定值"filetree",其他節(jié)點(diǎn)對(duì)應(yīng)的行的rowkey為該節(jié)點(diǎn)的key。節(jié)點(diǎn)內(nèi)鍵值對(duì)序列中的每一個(gè)鍵值對(duì)作為一列存儲(chǔ),列名為鍵名,而值則存儲(chǔ)在由rowkey和列名確定的cell中。[0072]圖9為一個(gè)版本樹(shù)versiontree在表格中的存儲(chǔ)格式。一個(gè)版本樹(shù)versiontree作為一行存儲(chǔ),:rowkey為該versiontree的id,版本樹(shù)versiontree中的每一個(gè)節(jié)點(diǎn)作為一列存儲(chǔ),根節(jié)點(diǎn)的列名為固定值"root",其他節(jié)點(diǎn)的列名為節(jié)點(diǎn)的digest。[0073]版本列表versionlist作為一行存儲(chǔ)在表格中,rowkey為固定值"version1ist",每個(gè)節(jié)點(diǎn)作為一列存儲(chǔ),列名為該節(jié)點(diǎn)的digest。[0074]圖10為新增文件處理流程。工作區(qū)監(jiān)視器檢測(cè)到有新增文件,首先計(jì)算該版本文件digest,檢測(cè)版本庫(kù)versionrepository中是否存在該版本文件,若不存在,則將新增版本文件復(fù)制到versionrepository中,并在versionlist中新增一個(gè)節(jié)點(diǎn)表示該版本文件。然后創(chuàng)建該文件的版本樹(shù)versiontree,versiontree引用版本文件在versionlist中的對(duì)應(yīng)節(jié)點(diǎn),將versionlist中該版本文件對(duì)應(yīng)節(jié)點(diǎn)的引用計(jì)數(shù)加1。最后在filetree中創(chuàng)建節(jié)點(diǎn)表示該文件。[0075]圖11為文件更新處理流程。工作區(qū)監(jiān)視器檢測(cè)到有文件更新,計(jì)算更新后的版本文件digest。檢測(cè)versionrepository中是否存在該版本文件,若不存在,則將新增版本文件復(fù)制到versionrepository中,并在versionlist中新增一個(gè)節(jié)點(diǎn)表示該版本文件。在對(duì)應(yīng)的versiontree中當(dāng)前版本節(jié)點(diǎn)下新增子節(jié)點(diǎn),刪除versiontree中的冗余版本。修改filetree中該文件節(jié)點(diǎn)的當(dāng)前版本。所述冗余版本指由工作區(qū)監(jiān)視器標(biāo)識(shí)的不再需要的版本。[0076]工作區(qū)監(jiān)視器刪除文件操作的流程為,將文件在filetree中的節(jié)點(diǎn)的刪除時(shí)間屬性更新。刪除目錄操作為遞歸刪除子節(jié)點(diǎn)文件。[0077]圖12為同步管理器工作流程。同步管理器在客戶(hù)端周期性運(yùn)行,檢查客戶(hù)端與服務(wù)器端次版本號(hào)為〇的元數(shù)據(jù)文件組成的集合是否相等;客戶(hù)端新增文件是否需要備份至服務(wù)器。如果集合不相等,則進(jìn)行追趕操作。若需要備份,則依次進(jìn)行minorcompact、mergecompact和上傳操作。[0078]為方便描述追趕操作,記服務(wù)器上的元數(shù)據(jù)文件集合為S,客戶(hù)端元數(shù)據(jù)文件集合為C。SnC中版本號(hào)最大的元數(shù)據(jù)文件記為mfc,S-C中版本號(hào)最大的元數(shù)據(jù)文件記為mfS。C-S中的元數(shù)據(jù)文件中的鍵值對(duì)均是在mfc基礎(chǔ)上新增的。所述追趕操作是將C-S中元數(shù)據(jù)文件中的鍵值對(duì)變換為在mfs的基礎(chǔ)上新增。變換方式如下:判斷C-S中的每一個(gè)鍵值對(duì)在S-C中是否有對(duì)相同的鍵寫(xiě)入值。若沒(méi)有,則該鍵值對(duì)保留;若有,則發(fā)生沖突,找出該鍵值對(duì)所在數(shù)據(jù)結(jié)構(gòu):filetree、versiontree或versionlist,以可讀的形式詢(xún)問(wèn)用戶(hù)是否需要保留該值。[0079]所述上傳操作為,首先上傳versionrepository中的新增文件至服務(wù)器,然后再上傳新增的元數(shù)據(jù)文件至服務(wù)器。因此,服務(wù)器端元數(shù)據(jù)文件中引用的版本文件在服務(wù)器中必然存在。[0080]為避免多客戶(hù)端服務(wù)器端相同文件并發(fā)更新,本發(fā)明使用兩種鎖進(jìn)行并發(fā)控制:共享鎖slock和互斥鎖Xlock。兩種類(lèi)型的鎖均有時(shí)間限制,如果過(guò)程執(zhí)行需要比較長(zhǎng)的時(shí)間,則需要階段性的延長(zhǎng)鎖的時(shí)間。一個(gè)客戶(hù)端在得到文件的slock時(shí),其他客戶(hù)端也可獲得該文件的Slock。如果有客戶(hù)端擁有文件的slock,則該文件的Xlock不會(huì)被其他客戶(hù)端獲取。一個(gè)客戶(hù)端擁有文件的Xlock時(shí),其他客戶(hù)端不能獲取該文件的s/xlock。[0081]上述同步管理器將本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù)加密,所用到的加密算法和解密過(guò)程均為現(xiàn)有技術(shù),并通過(guò)所述文件操作模塊備份到所述服務(wù)器。對(duì)文件加密備份是為了防止文件在服務(wù)器端被別人竊取。[0082]綜上所述,通過(guò)上述圖表的介紹,本發(fā)明的一種文件版本控制方法,將總結(jié)出以下實(shí)施步驟:[0083]步驟1,初始化本地庫(kù)中的工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù);所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表;[0084]步驟2,監(jiān)視所述工作區(qū)中的文件變化,將變化后的版本文件存儲(chǔ)到版本庫(kù)中,將所述工作區(qū)中的文件信息轉(zhuǎn)換并存儲(chǔ)于文件樹(shù),將所述工作區(qū)中的文件版本信息轉(zhuǎn)換并存儲(chǔ)于所述版本樹(shù),將版本庫(kù)中的版本文件信息轉(zhuǎn)換并存儲(chǔ)于版本列表中;[0085]步驟3,將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式,并保存到元數(shù)據(jù)庫(kù)中的元數(shù)據(jù)文件內(nèi);[0086]步驟4,將所述本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù)加密后備份到服務(wù)器。[0087]進(jìn)一步,執(zhí)行所述步驟1)_4)的過(guò)程中定期檢查本地庫(kù)與服務(wù)器的元數(shù)據(jù)庫(kù)和版本庫(kù)的一致性,若不一致則進(jìn)行同步。[0088]進(jìn)一步,所述步驟3)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式的步驟為:[0089]a)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為表格存儲(chǔ)方式,所述表格由行和列組成,所述行和列確定一個(gè)存儲(chǔ)單元cell,所述存儲(chǔ)單元cell可以存放多個(gè)值,所述每個(gè)值帶一個(gè)時(shí)間戳;[0090]b)將所述存儲(chǔ)單兀cell中的每一個(gè)值{value,timestamp}轉(zhuǎn)換為{rowkey#column#timestamp#type,value}鍵值對(duì)存儲(chǔ);其中rowkey為存儲(chǔ)單兀cell所在行的rowkey,column為存儲(chǔ)單元cell所在列的column,type表示所述鍵值對(duì)是數(shù)據(jù)還是一個(gè)刪除標(biāo)志;[0091]c)將所述鍵值對(duì)寫(xiě)入操作日志,然后將鍵值對(duì)存入內(nèi)存中,當(dāng)所占內(nèi)存空間達(dá)到閾值時(shí),進(jìn)行minorcompact操作;[0092]d)在minorcompact操作中,倉(cāng)ij建一個(gè)新的元數(shù)據(jù)文件,將內(nèi)存中的鍵值對(duì)按鍵有序?qū)懭胄聞?chuàng)建的元數(shù)據(jù)文件中。[0093]與現(xiàn)有的技術(shù)相比,本發(fā)明監(jiān)控文件變化,自動(dòng)保存文件的版本,記錄文件的版本變化,用戶(hù)可以方便地維護(hù)文件歷史版本,在出現(xiàn)誤操作時(shí)進(jìn)行恢復(fù)。本發(fā)明對(duì)服務(wù)器進(jìn)行抽象,將服務(wù)器當(dāng)做遠(yuǎn)程文件系統(tǒng)使用,使得本發(fā)明可以在局域網(wǎng)或因特網(wǎng)上使用。另外,上傳到服務(wù)器的文件均經(jīng)過(guò)加密,防止數(shù)據(jù)在服務(wù)器端泄露,保護(hù)用戶(hù)隱私。【權(quán)利要求】1.一種文件版本控制系統(tǒng),包括本地庫(kù)和控制模塊,其特征在于:所述本地庫(kù)包括工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù),所述工作區(qū)用于存放本系統(tǒng)管理的文件,所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表,所述版本庫(kù)用于存放工作區(qū)中版本文件;所述控制模塊包括抽象文件系統(tǒng)接口模塊、文件操作模塊、元數(shù)據(jù)訪問(wèn)模塊、恢復(fù)管理器模塊、工作區(qū)監(jiān)視器模塊;所述抽象文件系統(tǒng)接口模塊提供統(tǒng)一的文件訪問(wèn)接口,所述文件操作模塊通過(guò)所述抽象文件系統(tǒng)接口提供文件操作服務(wù),所述元數(shù)據(jù)訪問(wèn)模塊提供對(duì)元數(shù)據(jù)的訪問(wèn)服務(wù),所述恢復(fù)管理器模塊用于維護(hù)數(shù)據(jù)之間的一致性,所述工作區(qū)監(jiān)視器模塊用于監(jiān)視工作區(qū)內(nèi)的文件變化,并根據(jù)文件變化類(lèi)型觸發(fā)對(duì)應(yīng)的事件處理。2.根據(jù)權(quán)利要求1所述的一種文件版本控制系統(tǒng),其特征在于,還包括服務(wù)器,所述服務(wù)器用于備份所述本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù);所述控制模塊還包括一個(gè)用于同步服務(wù)器與所述本地庫(kù)之間的元數(shù)據(jù)庫(kù)和版本庫(kù)的同步管理器模塊。3.根據(jù)權(quán)利要求1或2所述的一種文件版本控制系統(tǒng),其特征在于,所述文件樹(shù)、版本樹(shù)、版本列表存儲(chǔ)在表格中,所述表格每行有一個(gè)唯一標(biāo)識(shí)符,所述表格的每個(gè)存儲(chǔ)單元可以存儲(chǔ)多個(gè)值,每個(gè)所述值有一個(gè)時(shí)間戳。4.根據(jù)權(quán)利要求1或2所述的一種文件版本控制系統(tǒng),其特征在于,所述文件樹(shù)的節(jié)點(diǎn)表示普通文件或目錄,每個(gè)節(jié)點(diǎn)有唯一標(biāo)識(shí)符key,所述節(jié)點(diǎn)到根節(jié)點(diǎn)的路徑表示與所述節(jié)點(diǎn)對(duì)應(yīng)的文件相對(duì)于工作區(qū)的路徑;所述文件樹(shù)中每個(gè)表示普通文件的節(jié)點(diǎn)都有一個(gè)版本樹(shù)相對(duì)應(yīng),每個(gè)所述版本樹(shù)有唯一的id標(biāo)識(shí),所述版本樹(shù)中每個(gè)節(jié)點(diǎn)表示文件的一個(gè)版本。5.-種文件版本控制方法,其特征在于,包括以下步驟:1)初始化本地庫(kù)中的工作區(qū)、元數(shù)據(jù)庫(kù)、版本庫(kù);所述元數(shù)據(jù)庫(kù)用于存放文件樹(shù)、版本樹(shù)、版本列表;2)監(jiān)視所述工作區(qū)中的文件變化,將變化后的版本文件存儲(chǔ)到版本庫(kù)中,將所述工作區(qū)中的文件信息轉(zhuǎn)換并存儲(chǔ)于文件樹(shù),將所述工作區(qū)中的文件版本信息轉(zhuǎn)換并存儲(chǔ)于所述版本樹(shù),將版本庫(kù)中的版本文件信息轉(zhuǎn)換并存儲(chǔ)于版本列表中;3)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式,并保存到元數(shù)據(jù)庫(kù)中的元數(shù)據(jù)文件內(nèi);4)將所述本地庫(kù)中的元數(shù)據(jù)庫(kù)和版本庫(kù)加密后備份到服務(wù)器。6.根據(jù)權(quán)利要求5所述的一種文件版本控制方法,其特征在于,執(zhí)行所述步驟1)一4)的過(guò)程中定期檢查本地庫(kù)與服務(wù)器的元數(shù)據(jù)庫(kù)和版本庫(kù)的一致性,若不一致則進(jìn)行同步。7.根據(jù)權(quán)利要求5所述的一種文件版本控制方法,其特征在于,所述步驟3)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為鍵值對(duì)存儲(chǔ)格式的步驟為:3-1)將所述文件樹(shù)、版本樹(shù)、版本列表轉(zhuǎn)換為表格存儲(chǔ)方式,所述表格由行和列組成,所述行和列確定一個(gè)存儲(chǔ)單元cell,所述存儲(chǔ)單元cell可以存放多個(gè)值,所述每個(gè)值帶一個(gè)時(shí)間戳;3-2)將所述存儲(chǔ)單元cell中的每一個(gè)值{value,timestamp}轉(zhuǎn)換為{rowkey#column#timestamp#type,value}鍵值對(duì)存儲(chǔ);其中rowkey為存儲(chǔ)單兀cell所在行的rowkey,column為存儲(chǔ)單元cell所在列的column,type表示所述鍵值對(duì)是數(shù)據(jù)還是一個(gè)刪除標(biāo)志;3-3)將所述鍵值對(duì)寫(xiě)入操作日志,然后將鍵值對(duì)存入內(nèi)存中,當(dāng)所占內(nèi)存空間達(dá)到閾值時(shí),進(jìn)行minorcompact操作;3-4)在minorcompact操作中,倉(cāng)ij建一個(gè)新的元數(shù)據(jù)文件,將內(nèi)存中的鍵值對(duì)按鍵有序?qū)懭胄聞?chuàng)建的元數(shù)據(jù)文件中。8.根據(jù)權(quán)利要求6所述的一種文件版本控制方法,其特征在于,所述同步時(shí)對(duì)所述元數(shù)據(jù)文件進(jìn)行mergecompact操作,所述mergecompact操作為將本地新增的元數(shù)據(jù)文件合并為一個(gè)新的元數(shù)據(jù)文件,所述新的元數(shù)據(jù)文件的主版本號(hào)為現(xiàn)有最大主版本號(hào)加1,次版本號(hào)為0。9.根據(jù)權(quán)利要求6所述的一種文件版本控制方法,其特征在于,所述同步時(shí)當(dāng)元數(shù)據(jù)文件過(guò)多時(shí)進(jìn)行majorcompact操作,所述majorcompact操作為將版本號(hào)較小且次版本號(hào)為0的元數(shù)據(jù)文件合并成一個(gè)新的元數(shù)據(jù)文件,所述新元數(shù)據(jù)文件的版本號(hào)為被合并的元數(shù)據(jù)文件的最大版本號(hào),所述新的元數(shù)據(jù)文件包含被合并的元數(shù)據(jù)文件的所有有效的鍵值對(duì)?!疚臋n編號(hào)】G06F11/14GK104156278SQ201410377919【公開(kāi)日】2014年11月19日申請(qǐng)日期:2014年8月1日優(yōu)先權(quán)日:2014年8月1日【發(fā)明者】薛安榮,邰泳申請(qǐng)人:江蘇大學(xué)