專利名稱:一種云計算環(huán)境下的海量數(shù)據(jù)存取方法
技術領域:
本發(fā)明涉及計算機領域的數(shù)據(jù)管理方法,特指一種云計算環(huán)境下的海量數(shù)據(jù)存取方法。
背景技術:
云計算是一種商業(yè)計算模型,它將計算任務分布在大量計算機構成的資源池上, 使各種應用程序能夠根據(jù)需要獲取計算力、存儲空間和信息服務;對于數(shù)據(jù)密集型服務而言,海量數(shù)據(jù)存儲于云中,在用戶需要時按需提取部分數(shù)據(jù),并將計算結果返回給用戶。其將位于網絡中的各種資源整合在一起,為用戶提供服務,用戶按需取用、按用付費,就像水和電一樣方便、快捷。隨著信息技術的高速發(fā)展,云計算已經成為一種趨勢。如圖1所示,現(xiàn)有的用于云計算環(huán)境數(shù)據(jù)管理方法,一般是運行于應用層,采用應用層的數(shù)據(jù)管理系統(tǒng),所有針對應用數(shù)據(jù)特點做的優(yōu)化全部在應用層完成,在底層仍然采用操作系統(tǒng)已有的傳統(tǒng)文件系統(tǒng)來存取數(shù)據(jù)。如=Google的數(shù)據(jù)管理系統(tǒng)google文件系統(tǒng)(google File System GFS)。Google首先利用網絡爬蟲將網絡上的海量網頁信息收集到自己的云中,然后在用戶搜索時,將包含用戶指定關鍵字的網頁按一定順序返回給用戶。 這些網頁信息作為一種資源在相當長的時間里都會保存下來,具有“一旦寫入不再更改”的特點。GFS將數(shù)據(jù)按塊(稱為Chunk,每塊大小64M)存儲,每個數(shù)據(jù)塊至少在3個數(shù)據(jù)服務器上冗余備份,每個數(shù)據(jù)塊副本對應一個文件系統(tǒng)中的64M文件,通過一個元數(shù)據(jù)服務器對這些數(shù)據(jù)塊文件進行管理。GFS不修改操作系統(tǒng)已有的傳統(tǒng)文件系統(tǒng),運行于應用層。傳統(tǒng)文件系統(tǒng)以文件的方式為用戶提供數(shù)據(jù)存取的功能。要使用傳統(tǒng)文件系統(tǒng), 首先需要用磁盤分區(qū)工具將磁盤進行分區(qū),然后用傳統(tǒng)文件系統(tǒng)格式化工具將分區(qū)格式化為特定的格式。用戶就可以在該分區(qū)中創(chuàng)建目錄,目錄里再創(chuàng)建子目錄,形成一個層次式的數(shù)據(jù)存儲目錄結構。用戶可以在任意目錄中創(chuàng)建數(shù)據(jù)文件,并將數(shù)據(jù)寫入文件中。讀取該數(shù)據(jù)時,首先通過分區(qū)根目錄逐級向下遍歷該數(shù)據(jù)文件的每一級父目錄,直到找到該文件為止,然后打開文件讀取其中的數(shù)據(jù)。其具體步驟如下
1、格式化磁盤分區(qū)格式化磁盤分區(qū)的主要工作是在磁盤分區(qū)頭部劃分一個區(qū)域,存儲該磁盤分區(qū)的一些元數(shù)據(jù)信息。為了支持文件系統(tǒng)所提供的層次式數(shù)據(jù)存儲功能,元數(shù)據(jù)信息通常比較龐雜,以 FreeBSD操作系統(tǒng)所采用的UFS文件系統(tǒng)為例,其分區(qū)元數(shù)據(jù)包括超級塊信息、柱面組信息、inode節(jié)點表等。超級塊存儲有關文件系統(tǒng)參數(shù)的大量信息,包括柱面組大小,數(shù)據(jù)塊大小,碎片的大小,還包括文件系統(tǒng)最后掛載時間等,通常位于文件系統(tǒng)起始位置的64KB處。 柱面組信息主要包括該柱面組的目錄數(shù),空閑塊數(shù),空閑inode節(jié)點數(shù),空閑碎片數(shù)等。每一個柱面組都擁有一個inode節(jié)點表,它用于存放本柱面組內的inode節(jié)點。每一個inode 節(jié)點存儲一個文件的元數(shù)據(jù)信息。每一個柱面組的inode節(jié)點表都位于柱面組的固定位置,一般為第32個碎片處,它的大小由inode節(jié)點大小和為柱面組分配的inode節(jié)點數(shù)決定。
2、打開文件其主要工作是根據(jù)用戶所請求的文件路徑查詢并取出目標文件的 inode節(jié)點信息,并根據(jù)訪問類型的不同,為文件加不同的鎖,以維護數(shù)據(jù)一致性。在層次式的數(shù)據(jù)存儲結構中,可以從任意目錄的inode節(jié)點信息中檢索到該目錄中的所有文件和子目錄的inode節(jié)點信息。下面以打開/a/b/c. txt文件為例,說明查詢目標文件c. txt的 inode節(jié)點信息的流程
在磁盤分區(qū)的固定位置讀取根目錄的inode節(jié)點信息;
(1)讀取根目錄下的所有目錄, 從中匹配目標文件路徑中位于根目錄下的目錄名,即
a ;
(2)讀取a對應的inode節(jié)點信息,從中匹配目標文件路徑中位于a下的目錄名,即b;
(3)讀取b對應的inode節(jié)點信息,從中匹配目標文件路徑中位于b下的文件名,即
C. txt ;
(4)讀取目標文件(即c.txt)的inode節(jié)點信息;
(5)為目標文件(即c.txt)加鎖。3、寫入文件該操作在請求寫入數(shù)據(jù)的起始位置開始寫入用戶數(shù)據(jù),并更新相關的文件元數(shù)據(jù)和文件系統(tǒng)元數(shù)據(jù)。4、讀取文件該操作在請求讀取數(shù)據(jù)的起始位置開始讀取所需要長度的數(shù)據(jù),并更新相關的文件元數(shù)據(jù)和文件系統(tǒng)元數(shù)據(jù)。5、刪除文件該操作在磁盤中刪除文件,刪除相關的文件元數(shù)據(jù),并更新文件系統(tǒng)元數(shù)據(jù)。6、關閉文件該操作執(zhí)行解鎖、清內存等操作。由以上步驟可知,傳統(tǒng)文件系統(tǒng)中的層次式目錄結構為用戶提供了靈活便利的數(shù)據(jù)存取方式,但其并沒有針對云計算環(huán)境下的“一旦寫入不再更改”的數(shù)據(jù)做專門的優(yōu)化, 其中的文件尋址、文件打開和關閉、文件的讀寫鎖機制等功能都對系統(tǒng)性能有很大的影響, 因而效率不高。
發(fā)明內容
本發(fā)明所要解決的技術問題是針對現(xiàn)有技術存在的技術問題,本發(fā)明提供一種極度簡化、能提高云計算環(huán)境下的數(shù)據(jù)存取效率、減少系統(tǒng)內核資源的消耗和提高系統(tǒng)性能的云計算環(huán)境下的海量數(shù)據(jù)存取方法。為解決上述技術問題,本發(fā)明采用以下技術方案
一種云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于包括以下步驟
1)格式化磁盤分區(qū)并在磁盤分區(qū)中設置一隨用戶操作實時更新的分區(qū)元數(shù)據(jù)信息;
2)將經應用層中的數(shù)據(jù)管理系統(tǒng)分塊處理后的數(shù)據(jù)塊,逐塊依次寫入磁盤分區(qū)中并順序編索引號,用戶通過輸入所述索引號從磁盤分區(qū)中讀取對應的數(shù)據(jù)塊。作為本發(fā)明的方法的進一步改進
上述的方法中,寫入數(shù)據(jù)塊時,在數(shù)據(jù)塊后存儲一相應的用于檢查數(shù)據(jù)塊正確性的校驗數(shù)據(jù)塊,所述校驗數(shù)據(jù)塊根據(jù)所述數(shù)據(jù)塊的內容計算得到且與數(shù)據(jù)塊一一對應。上述的方法中,所述分區(qū)元數(shù)據(jù)信息存儲在磁盤分區(qū)中的保留數(shù)據(jù)區(qū)域內,所述保留數(shù)據(jù)區(qū)域為兩塊,一塊位于所述磁盤分區(qū)的頭部,另一塊位于所述磁盤分區(qū)的尾部。
上述的方法中,所述步驟1),具體包括以下步驟 1.1)確定分區(qū)元數(shù)據(jù)信息;
1. 2)將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)頭部保留數(shù)據(jù)區(qū)域中;
1.3)將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)尾部保留數(shù)據(jù)區(qū)域中,作為冗余備份。上述的方法中,所述寫入數(shù)據(jù)塊,具體包括以下步驟
2.1)讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性;
2. 2)判斷磁盤分區(qū)是否已滿,若滿則返回“磁盤已滿”的錯誤,否則繼續(xù); 2. 3)計算數(shù)據(jù)塊的校驗數(shù)據(jù)塊;
2. 4)將數(shù)據(jù)塊寫入磁盤分區(qū)中,并將校驗數(shù)據(jù)塊寫于數(shù)據(jù)塊后;
2. 5)更新分區(qū)元數(shù)據(jù)信息;
2. 6)將新的分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)中;
2.7)根據(jù)數(shù)據(jù)塊的寫入位置返回相應的索引號。上述的方法中,所述計算數(shù)據(jù)塊的校驗數(shù)據(jù)塊,具體包括以下步驟將所述數(shù)據(jù)塊分為A個新的校驗塊,定義一校驗變量,并將所述A個新的校驗塊中的每個字節(jié)依次與所述校驗變量做異或運算,每個校驗塊算出1個字節(jié)的校驗值,共計算出A個字節(jié)的校驗值,即為數(shù)據(jù)塊的校驗數(shù)據(jù)塊,所述A為校驗數(shù)據(jù)塊大小。上述的方法中,所述讀取數(shù)據(jù)塊,具體包括以下步驟
3.1)從磁盤分區(qū)中讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性; 3. 2)導入用戶輸入的索引號,并檢查其合法性;
3. 3)若所述索引號合法,則根據(jù)索引號計算數(shù)據(jù)塊在磁盤分區(qū)中的位置;
3. 4)在計算得到的位置處讀取數(shù)據(jù)塊;
3. 5)在該數(shù)據(jù)塊后讀取校驗數(shù)據(jù)塊;
3. 6)根據(jù)校驗數(shù)據(jù)塊檢查數(shù)據(jù)塊的正確性;
3. 7)若數(shù)據(jù)塊正確,則將讀取的數(shù)據(jù)塊返回給用戶,否則返回錯誤。上述的方法中,所述根據(jù)校驗數(shù)據(jù)塊檢查數(shù)據(jù)塊的正確性,具體包括以下步驟 3. 6. 1)根據(jù)讀取的數(shù)據(jù)塊,重新計算一新校驗數(shù)據(jù)塊;
3. 6. 2)將所述新校驗數(shù)據(jù)塊與從磁盤分區(qū)中讀取的校驗數(shù)據(jù)塊逐字節(jié)進行比較,若兩者相同,則判定數(shù)據(jù)塊正確,否則判定數(shù)據(jù)塊不正確。上述的方法中,所述分區(qū)元數(shù)據(jù)信息包括元數(shù)據(jù)校驗值、分區(qū)元數(shù)據(jù)大小、數(shù)據(jù)塊大小、校驗數(shù)據(jù)塊大小、數(shù)據(jù)塊總量、已使用數(shù)據(jù)塊數(shù)量和新數(shù)據(jù)塊起始位置。與現(xiàn)有技術相比,本發(fā)明的優(yōu)點在于
1、本發(fā)明的云計算環(huán)境下的海量數(shù)據(jù)存取方法,針對云計算環(huán)境的“一旦寫入不再更改”的海量數(shù)據(jù)特點,直接對經應用層數(shù)據(jù)管理程序分塊后的數(shù)據(jù)塊進行處理,取消了傳統(tǒng)文件系統(tǒng)中的層次式數(shù)據(jù)存儲結構,同時取消了文件鎖等功能,通過索引號直接讀寫磁盤分區(qū),僅提供最基本的數(shù)據(jù)存取功能,極度簡化了數(shù)據(jù)存取步驟,且減少了內核資源的消耗,可將性能提高到最優(yōu)。2、本發(fā)明的云計算環(huán)境下的海量數(shù)據(jù)存取方法,為每個數(shù)據(jù)塊設置一校驗數(shù)據(jù)塊,以檢查數(shù)據(jù)塊是否遭到破壞,可保證數(shù)據(jù)的正確性。3、本發(fā)明的云計算環(huán)境下的海量數(shù)據(jù)存取方法,格式化磁盤分區(qū)時,分區(qū)元數(shù)據(jù)信息中僅保留最基本的文件系統(tǒng)元數(shù)據(jù)信息,進一步減少和優(yōu)化了數(shù)據(jù)存取的步驟;將分區(qū)元數(shù)據(jù)信息存于分區(qū)頭部和尾部,互為備份,提高了可靠性。
圖1是現(xiàn)有技術的數(shù)據(jù)存取方法的模塊關系示意圖; 圖2是本發(fā)明的應用實例中的模塊組成關系示意圖3是本發(fā)明中的總體流程示意圖4是本發(fā)明的格式化磁盤分區(qū)的流程示意圖5是本發(fā)明的寫入數(shù)據(jù)塊流程示意圖6是本發(fā)明的讀取數(shù)據(jù)塊流程示意圖7為具體實施例中的分區(qū)元數(shù)據(jù)信息的物理存儲格式示意圖8為具體實施例中的分區(qū)元數(shù)據(jù)信息在內存中的數(shù)據(jù)結構示意圖。
具體實施例方式以下將結合說明書附圖和具體實施例對本發(fā)明作進一步詳細說明。如圖2所示,用本發(fā)明的云計算環(huán)境下的海量數(shù)據(jù)存取方法,應用于Linux操作系統(tǒng)中,可實現(xiàn)一可配置塊式文件系統(tǒng)(Configurable Block File System 以下簡稱 CBFS)。該可配置塊式文件系統(tǒng)與操作系統(tǒng)內核中其它相關模塊的關系如圖2所示,其直接通過磁盤驅動讀寫磁盤數(shù)據(jù),不采用虛擬文件系統(tǒng)或傳統(tǒng)的文件系統(tǒng),步驟較傳統(tǒng)的數(shù)據(jù)存取方法更簡單,效率較高。如圖3、圖4、圖5、圖6所示,本發(fā)明的云計算環(huán)境下的海量數(shù)據(jù)存取方法,包括以下步驟
1、格式化磁盤分區(qū) 1.1確定分區(qū)元數(shù)據(jù)信息;
1. 1. 1系統(tǒng)管理員指定待格式化的磁盤分區(qū)和支持的數(shù)據(jù)塊大小。1. 1. 2判斷數(shù)據(jù)塊大小是否介于4K至IG之間并且是4K的倍數(shù),如果不是,則返回錯誤,否則繼續(xù)下一步。1.1.3判斷磁盤分區(qū)大小是否大于(DataBlockSize + 2 * MetaDataSize),如果不是則返回錯誤,否則繼續(xù)下一步。1.1.4定義一個全局指針變量gpCBFSPartionHeadCache,在內存中創(chuàng)建分區(qū)元數(shù)據(jù)信息,其在內存中的數(shù)據(jù)結構如圖8所示,其物理存儲格式如圖7所示,并將其地址賦給全局指針變量gpCBFSPartionHeadCache。分區(qū)元數(shù)據(jù)信息的大小為4K,分區(qū)元數(shù)據(jù)信息的前192字節(jié)包括12個16字節(jié)的字段,依次為
元數(shù)據(jù)校驗值MetaDataVerifyValue,字段值的計算公式如下
MetaDataVerifyValue =VersionOreateTime “ PartitionSize “ MetaDataSize “DataBlockSize “ VerifyDataBlockSize “ VerifyBlockSize “ TotalDataBlock “ DataBlockUsed “ NextNewPosition “ LastMTime ; 軟件版本號Version,字段值為1. O ; 分區(qū)創(chuàng)建時間CreateTime,字段值為當前時間;分區(qū)大小PartitionSize,字段值為當前磁盤分區(qū)大?。?分區(qū)元數(shù)據(jù)大小MetaDataSize,字段值為4K ; 數(shù)據(jù)塊大小DataBlockSize,字段值為管理員指定的數(shù)據(jù)塊大小; 校驗數(shù)據(jù)塊大小VerifyDataBlockSize,字段值為IK ; 校驗塊大小VerifyBlockSize,字段值的計算公式為 VerifyBlockSize = DataBlockSize/VerifyDataBlockSize ; 數(shù)據(jù)塊總量TotalDataBlock,字段值的計算公式為
TotalDataBlock = (PartitionSize _ 2 氺 MetaDataSize) / DataBlockSize ; 已使用數(shù)據(jù)塊數(shù)量DataBlockUsed,字段值為O ; 新數(shù)據(jù)塊起始位置NextNewPosition,字段值為O ; 最新分區(qū)修改時間LastMTime,字段值為當前時間; 分區(qū)元數(shù)據(jù)信息的第192字節(jié)以后的區(qū)域為保留字段。1. 2將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)頭部的保留數(shù)據(jù)區(qū)域(即磁盤分區(qū)的第一個 4K空間)中
將gpCBFS PartionHeadCache內的地址所指向的數(shù)據(jù)結構中的各字段值依序寫入磁盤分區(qū)頭部的第O到191字節(jié)中,并用O將磁盤分區(qū)頭部的保留字段填滿。1. 3將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)尾部的保留數(shù)據(jù)區(qū)域(即磁盤分區(qū)的最后一個4K空間)中,作為冗余備份
將gpCBFSPartionHeadCache內的地址所指向的數(shù)據(jù)結構中的各字段值依序寫入磁盤分區(qū)尾部的第O到191字節(jié)中,并用O將磁盤分區(qū)尾部的保留字段填滿。2、存取數(shù)據(jù)——寫入數(shù)據(jù)塊,將經應用層中的數(shù)據(jù)管理系統(tǒng)分塊處理后的數(shù)據(jù)塊,逐塊依次寫入磁盤分區(qū)中并順序編索引號,具體包括以下步驟
2.1讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性
如果gpCBFSPartionHeadCache內存儲的地址不為空(分區(qū)元數(shù)據(jù)信息已經緩存到內存,不用再到磁盤讀取),則跳轉到2. 2步驟;否則從磁盤分區(qū)頭部讀取磁盤分區(qū)元數(shù)據(jù)信息到內存,具體包括以下步驟
2. 1. 1在內存中創(chuàng)建一個如圖8的數(shù)據(jù)結構,作為全局元數(shù)據(jù)信息緩存空間,并將其地址賦給全局指針變量gpCBFSPart ionHeadCache。2. 1.2讀取磁盤分區(qū)頭部保留區(qū)域內的前192個字節(jié),將這192個字節(jié)的內容作為全局指針變量gpCBFSPartionHeadCache內的地址所指向的數(shù)據(jù)結構中的各字段值,即將第一個16字節(jié)作為gpCBFSPartionHeadCache內的地址所指向的數(shù)據(jù)結構中的第一個字段的值,第二個16字節(jié)作為gpCBFSPartionHeadCache內的地址所指向的數(shù)據(jù)結構中的第一個字段的值,依此類推。2. 1. 3在內存中分配一個16字節(jié)的內存空間作為元數(shù)據(jù)校驗值的存儲空間。2. 1. 4按照元數(shù)據(jù)校驗值MetaDataVerifyValue的計算公式,以2. 1. 2步驟所讀取的分區(qū)元數(shù)據(jù)信息作為輸入,重新計算元數(shù)據(jù)校驗值并存入2. 1. 3步驟分配的元數(shù)據(jù)校驗值的存儲空間中。2. 1. 5將2. 1. 4步驟計算出來元數(shù)據(jù)校驗值與2. 1. 2步驟所讀取的分區(qū)元數(shù)據(jù)信息中的元數(shù)據(jù)校驗值做比較,如果相同,則返回正確,如果不同,則繼續(xù)下一步。
2. 1. 6定義一個指針變量pCBFSPartitionhil,在內存中建立如圖8所示的數(shù)據(jù)結構,作為存儲在磁盤分區(qū)尾部的元數(shù)據(jù)校驗值的存儲空間,并將該數(shù)據(jù)結構的地址賦給指針變量 pCBFSPartitionTai 1。2.1.7讀取磁盤分區(qū)尾部的前192個字節(jié),將這192個字節(jié)的內容作為2. 1.6步驟分配的指針變量pCBFSPartitionTail內的地址所指向的數(shù)據(jù)結構中的各字段值即將第一個16字節(jié)作為指針變量pCBFSPartitionTail內的地址所指向的數(shù)據(jù)結構中的第一個字段的值,第二個16字節(jié)作為指針變量pCBFSPartitionTail內的地址所指向的數(shù)據(jù)結構中的第二個字段的值,依此類推。2. 1. 8按元數(shù)據(jù)校驗值MetaDataVerifyValue的計算公式,以2. 1. 7步驟所讀取的分區(qū)元數(shù)據(jù)信息作為輸入,重新計算元數(shù)據(jù)校驗值并存入2. 1. 3步驟分配的元數(shù)據(jù)校驗值的存儲空間。2. 1. 9將2. 1. 8步驟計算出來的元數(shù)據(jù)校驗值與2. 1. 7步驟所讀取的分區(qū)元數(shù)據(jù)信息中的元數(shù)據(jù)校驗值做比較,如果相同,則繼續(xù)下一步,否則返回錯誤。2. 1. 10用2. 1.7步驟讀取的分區(qū)元數(shù)據(jù)信息存入2. 1. 1步驟分配的全局元數(shù)據(jù)信息緩存空間,并寫入磁盤分區(qū)頭部的元數(shù)據(jù)存儲區(qū)域。2. 2判斷磁盤分區(qū)是否已滿,具體方法為
判斷gpCBFSPartionHeadCache內地址所指向的數(shù)據(jù)結構中的NextNewPosition的值是否為16個OxFF,如果是,則判定磁盤分區(qū)已滿,返回“磁盤已滿”的錯誤,否則繼續(xù); 2.3計算數(shù)據(jù)塊的校驗數(shù)據(jù)塊,具體包括以下步驟
2. 3. 1將數(shù)據(jù)塊分為A個新的校驗塊,A為校驗數(shù)據(jù)塊大小VerifyDataBlockSize。2. 3. 2定義一校驗變量VerifyByte,為校驗變量VerifyByte賦初值為0x00。2. 3. 3將A個新的校驗塊中的每個字節(jié)依次與校驗變量VerifyByte做異或運算, 每個校驗塊算出1個字節(jié)的校驗值,共計算出A個字節(jié)的校驗值,即為數(shù)據(jù)塊的校驗數(shù)據(jù)塊。2.4將數(shù)據(jù)塊寫入磁盤分區(qū)中,并將校驗數(shù)據(jù)塊寫于數(shù)據(jù)塊后,具體步驟為
2. 4. 1將數(shù)據(jù)塊寫入磁盤分區(qū)中gpCBFSPartionHeadCache內地址所指向的數(shù)據(jù)結構巾白勺 NextNewPosition @g^h。2. 4. 2將校驗數(shù)據(jù)塊存入磁盤分區(qū)中緊挨數(shù)據(jù)塊的后面位置,即 (NextNewPosition + DataBlockSize ) &。2. 5更新分區(qū)元數(shù)據(jù)信息,包括以下步驟
2. 5. 1將分區(qū)元數(shù)據(jù)信息中的DataBlockUsed的值加1。2. 5. 2更新分區(qū)元數(shù)據(jù)信息中的“新數(shù)據(jù)塊的起始位置”,具體方法為
2. 5. 2. 1如果分區(qū)元數(shù)據(jù)信息中的DataBlockUsed的值等于TotalDataBlock的值,則將NextNewPosition中的每一個字節(jié)設為OxFF表示磁盤分區(qū)已滿,返回正確;否則繼續(xù)下 “■步 ο2. 5. 2. 2計算出緊挨校驗數(shù)據(jù)塊的第一個未使用字節(jié)的位置作為新數(shù)據(jù)塊的起始位置,計算公式為
NextNewPo s i t i on = NextNewPo s i t i on + DataBlockSize + VerifyDataBlockSize 2. 5. 3將分區(qū)元數(shù)據(jù)信息中的“最新分區(qū)修改時間”更新為當前時間。
2. 5. 4以最新分區(qū)元數(shù)據(jù)信息作為輸入,按照分區(qū)元數(shù)據(jù)校驗值計算方法重新計算分區(qū)元數(shù)據(jù)校驗值。2. 6將新的分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)中,具體包括以下步驟
2.6. 1將分區(qū)元數(shù)據(jù)信息中的“元數(shù)據(jù)校驗值”、“已使用數(shù)據(jù)塊數(shù)量”、“新數(shù)據(jù)塊起始位置”和“最新分區(qū)修改時間”的值分別按順序寫入磁盤分區(qū)頭部的保留數(shù)據(jù)區(qū)域中的第0 到15字節(jié)、第144到159字節(jié)、第160到175字節(jié)和第179到191字節(jié)中(即為分區(qū)元數(shù)據(jù)信息的第1、第10、第11和第12個字段)。2. 6. 2將分區(qū)元數(shù)據(jù)信息中的“元數(shù)據(jù)校驗值”、“已使用數(shù)據(jù)塊數(shù)量”、“新數(shù)據(jù)塊起始位置”和“最新分區(qū)修改時間”的值分別按順序寫入磁盤分區(qū)尾部的保留數(shù)據(jù)區(qū)域中的第0到15字節(jié)、第144到159字節(jié)、第160到175字節(jié)和第179到191字節(jié)中(即為分區(qū)元數(shù)據(jù)信息的第1、第10、第11和第12個字段)。2. 7根據(jù)數(shù)據(jù)塊的寫入位置返回相應的索引號給用戶,具體步驟為
將該已使用數(shù)據(jù)塊數(shù)量DataBlockUsed的值作為數(shù)據(jù)塊索引號返回給用戶。3、存取數(shù)據(jù)——讀取數(shù)據(jù)塊根據(jù)用戶輸入的索引號,從磁盤分區(qū)中讀取數(shù)據(jù)塊并將數(shù)據(jù)塊內容返回給用戶,具體包括以下步驟
3.1讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性,詳細步驟與2. 1步驟相同。3.2導入用戶輸入的索引號num,并檢查其合法性,具體方法為 3. 2. 1如果索引號num大于0,則繼續(xù),否則返回錯誤。3.2.2 比較索引號num與DataBlockUsed的值。如果num小于或者等于 DataBlockUsed,則判定索引號num合法,繼續(xù)下一步;否則判定索引號num不合法,返回錯誤。3.3根據(jù)索引號計算數(shù)據(jù)塊在磁盤分區(qū)中的位置(徹&(^08^1011),計算公式為 ReadPosition = MetaDataSize + (Num - 1) * (DataBlockSize +
VerifyDataBlockSize)
3.4在計算得到的位置處讀取數(shù)據(jù)塊,即
從3. 3步驟計算的結果ReadPosition位置處讀取DataBlockSize字節(jié)的數(shù)據(jù)作為用戶請求的數(shù)據(jù)塊到內存。3. 5并在該數(shù)據(jù)塊后讀取校驗數(shù)據(jù)塊,即
從(ReadPosition+DataBlockSize)位置處讀取 VerifyDataBlockSize 字節(jié)的數(shù)據(jù)作為數(shù)據(jù)塊的校驗數(shù)據(jù)塊到內存。3. 6根據(jù)校驗數(shù)據(jù)塊檢查數(shù)據(jù)塊的正確性;具體包括以下步驟
3. 6. 1根據(jù)讀取的數(shù)據(jù)塊,重新計算一新校驗數(shù)據(jù)塊(步驟與2. 3步驟相同); 3. 6. 2將新校驗數(shù)據(jù)塊與從磁盤分區(qū)中讀取的校驗數(shù)據(jù)塊逐字節(jié)進行比較,若兩者每一個字節(jié)都相同,則判定數(shù)據(jù)塊正確,否則判定數(shù)據(jù)塊不正確。3. 7)若數(shù)據(jù)塊正確,則將讀取的數(shù)據(jù)塊返回給用戶,否則返回錯誤。采用上述步驟,取消了傳統(tǒng)文件系統(tǒng)中所有不必要的功能,對用戶僅提供兩個接口 寫入數(shù)據(jù)塊和讀取數(shù)據(jù)塊,僅提供最基本的數(shù)據(jù)存取功能,用戶直接讀寫磁盤分區(qū),這種極度簡化的設計使本發(fā)明在性能上做到了最優(yōu),能提高云計算環(huán)境下的數(shù)據(jù)存取效率、 提高系統(tǒng)性能。
以上所述僅是本發(fā)明的優(yōu)選實施方式,本發(fā)明的保護范圍并不僅局限于上述實施例,凡屬于本發(fā)明思路下的技術方案均屬于本發(fā)明的保護范圍。應當指出,對于本技術領域的普通技術人員來說,在不脫離本發(fā)明原理前提下的若干改進和潤飾,應視為本發(fā)明的保護范圍。
權利要求
1.一種云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于包括以下步驟1)格式化磁盤分區(qū)并在磁盤分區(qū)中設置一隨用戶操作實時更新的分區(qū)元數(shù)據(jù)信息;2)將經應用層中的數(shù)據(jù)管理系統(tǒng)分塊處理后的數(shù)據(jù)塊,逐塊依次寫入磁盤分區(qū)中并順序編索引號,用戶通過輸入所述索引號從磁盤分區(qū)中讀取對應的數(shù)據(jù)塊。
2.根據(jù)權利要求1所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,寫入數(shù)據(jù)塊時,在數(shù)據(jù)塊后存儲一相應的用于檢查數(shù)據(jù)塊正確性的校驗數(shù)據(jù)塊,所述校驗數(shù)據(jù)塊根據(jù)所述數(shù)據(jù)塊的內容計算得到且與數(shù)據(jù)塊一一對應。
3.根據(jù)權利要求2所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述分區(qū)元數(shù)據(jù)信息存儲在磁盤分區(qū)中的保留數(shù)據(jù)區(qū)域內,所述保留數(shù)據(jù)區(qū)域為兩塊,一塊位于所述磁盤分區(qū)的頭部,另一塊位于所述磁盤分區(qū)的尾部。
4.根據(jù)權利要求3所述的云計算環(huán)境下的數(shù)據(jù)存取方法,其特征在于,所述步驟1), 具體包括以下步驟1.1)確定分區(qū)元數(shù)據(jù)信息;1. 2)將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)頭部保留數(shù)據(jù)區(qū)域中;1.3)將分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)尾部保留數(shù)據(jù)區(qū)域中,作為冗余備份。
5.根據(jù)權利要求3所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述寫入數(shù)據(jù)塊,具體包括以下步驟2.1)讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性;2. 2)判斷磁盤分區(qū)是否已滿,若滿則返回“磁盤已滿”的錯誤,否則繼續(xù); 2. 3)計算數(shù)據(jù)塊的校驗數(shù)據(jù)塊;2. 4)將數(shù)據(jù)塊寫入磁盤分區(qū)中,并將校驗數(shù)據(jù)塊寫于數(shù)據(jù)塊后;2. 5)更新分區(qū)元數(shù)據(jù)信息;2. 6)將新的分區(qū)元數(shù)據(jù)信息寫入磁盤分區(qū)中;2.7)根據(jù)數(shù)據(jù)塊的寫入位置返回相應的索引號。
6.根據(jù)權利要求5所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述計算數(shù)據(jù)塊的校驗數(shù)據(jù)塊,具體包括以下步驟將所述數(shù)據(jù)塊分為A個新的校驗塊,定義一校驗變量,并將所述A個新的校驗塊中的每個字節(jié)依次與所述校驗變量做異或運算,每個校驗塊算出1個字節(jié)的校驗值,共計算出A個字節(jié)的校驗值,即為數(shù)據(jù)塊的校驗數(shù)據(jù)塊,所述A 為校驗數(shù)據(jù)塊大小。
7.根據(jù)權利要求3所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述讀取數(shù)據(jù)塊,具體包括以下步驟3.1)從磁盤分區(qū)中讀取分區(qū)元數(shù)據(jù)信息,并校驗其完整性; 3. 2)導入用戶輸入的索引號,并檢查其合法性;3. 3)若所述索引號合法,則根據(jù)索引號計算數(shù)據(jù)塊在磁盤分區(qū)中的位置;3. 4)在計算得到的位置處讀取數(shù)據(jù)塊;3. 5)在該數(shù)據(jù)塊后讀取校驗數(shù)據(jù)塊;3. 6)根據(jù)校驗數(shù)據(jù)塊檢查數(shù)據(jù)塊的正確性;3. 7)若數(shù)據(jù)塊正確,則將讀取的數(shù)據(jù)塊返回給用戶,否則返回錯誤。
8.根據(jù)權利要求7所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述根據(jù)校驗數(shù)據(jù)塊檢查數(shù)據(jù)塊的正確性,具體包括以下步驟 3. 6. 1)根據(jù)讀取的數(shù)據(jù)塊,重新計算一新校驗數(shù)據(jù)塊;.3. 6. 2)將所述新校驗數(shù)據(jù)塊與從磁盤分區(qū)中讀取的校驗數(shù)據(jù)塊逐字節(jié)進行比較,若兩者相同,則判定數(shù)據(jù)塊正確,否則判定數(shù)據(jù)塊不正確。
9.根據(jù)權利要求1 8中任一項所述的云計算環(huán)境下的海量數(shù)據(jù)存取方法,其特征在于,所述分區(qū)元數(shù)據(jù)信息包括元數(shù)據(jù)校驗值、分區(qū)元數(shù)據(jù)大小、數(shù)據(jù)塊大小、校驗數(shù)據(jù)塊大小、數(shù)據(jù)塊總量、已使用數(shù)據(jù)塊數(shù)量和新數(shù)據(jù)塊起始位置。
全文摘要
本發(fā)明公開了一種云計算環(huán)境下的海量數(shù)據(jù)存取方法,包括步驟格式化磁盤分區(qū)并在磁盤分區(qū)中設置一隨用戶操作實時更新的分區(qū)元數(shù)據(jù)信息;將經應用層中的數(shù)據(jù)管理系統(tǒng)分塊處理后的數(shù)據(jù)塊,逐塊依次寫入磁盤分區(qū)中并順序編索引號,用戶通過輸入所述索引號從磁盤分區(qū)中讀取對應的數(shù)據(jù)塊。本發(fā)明具有步驟極度簡化,能提高云計算環(huán)境下的數(shù)據(jù)存取效率、減少系統(tǒng)內核資源的消耗和提高系統(tǒng)性能等優(yōu)點。
文檔編號G06F17/30GK102184260SQ20111015327
公開日2011年9月14日 申請日期2011年6月9日 優(yōu)先權日2011年6月9日
發(fā)明者付松齡, 何連躍, 吳慶波, 廖湘科, 戴華東, 李姍姍, 黃辰林 申請人:中國人民解放軍國防科學技術大學