專利名稱:一種海量小文件讀取存儲方法
技術領域:
本發(fā)明涉及計算機應用技術領域,具體地說是一種海量小文件讀取存儲方法。
背景技術:
在現(xiàn)階段的讀取、存儲領域小文件是數(shù)據(jù)訪問、使用的最常見的數(shù)據(jù)形式。相對于大文件的條帶化技術進行切片,來提高用戶對文件訪問的并發(fā)性,小文件64KB)由于其不利于條帶化,傳統(tǒng)的方法一般是采用將單個文件存儲在單個數(shù)據(jù)服務器上的策略,但是當小文件的數(shù)量到達一定程度之后,對小文件的大量地重復訪問將會給數(shù)據(jù)服務器帶來性能上的負擔及I/O瓶頸問題,由于互聯(lián)網(wǎng)上的數(shù)據(jù)信息大多以高頻率的小文件形式表現(xiàn)出來,而且在一般用戶的信息讀取、存儲中,對小文件的讀取、存儲較多,因此對互聯(lián)網(wǎng)上高頻率的小文件讀/寫性能的研究有重要的現(xiàn)實意義。在現(xiàn)階段,傳統(tǒng)的針對海量小文件的處理、操作等管理上主要存在以下3個方面的問題:
1)由于小文件的訪問頻率較高,需要多次訪問磁盤,所以磁盤I/o的性能較低;
2)因為文件比較小,容易形成文件碎片而造成磁盤空間的浪費;
3)為每個小文件請求建立一個連接時容易產(chǎn)生網(wǎng)絡時延,降低了小文件的讀取速率。
發(fā)明內(nèi)容
本發(fā)明的目的是提供一種海量小文件讀取存儲方法。本發(fā)明的目的是按以下方式實現(xiàn)的,通過將邏輯上連續(xù)的小文件數(shù)據(jù)盡可能的存儲在物理磁盤的連續(xù)空間之內(nèi),以此提高用戶對文件訪問的并發(fā)性操作,從而提高了海量小文件的訪問性能,其中:
小文件的讀取操作設計為:
在讀寫小文件的時間延遲主要花在磁盤磁頭的尋道定位上,一旦定位好,讀取一個數(shù)據(jù)塊所花費的時間和讀取連續(xù)幾個數(shù)據(jù)塊的時間相差不是很大,因此,結(jié)合上面提出的優(yōu)化的數(shù)據(jù)存儲結(jié)構(gòu),采用預讀的方式,將同一個塊中的文件一起讀取出來,從而減少磁盤I/O的次數(shù);針對頻繁訪問元數(shù)據(jù)服務器上的磁盤造成整個系統(tǒng)I/O性能較差的問題,使用cache充當元數(shù)據(jù)服務器的角色,在cache上保存文件信息節(jié)點的信息,并且通過簡化的Node數(shù)據(jù)結(jié)構(gòu)使每個文件信息節(jié)點只保留文件的磁盤空間信息以及另外少量有用的信息,從而提高cache的利用率,使cache能夠保存大量的文件信息節(jié)點,通過這種方式,減少訪問磁盤的次數(shù)和讀取文件信息節(jié)點的開銷,從而提高I/O性能;
海量小文件在磁盤陣列上的存儲方法為:
在存儲小文件時,通過采用開辟大塊連續(xù)磁盤空間的方式來存儲海量小文件,也就是將邏輯上連續(xù)的數(shù)據(jù)盡可能地存儲在磁盤陣列的連續(xù)空間上,即將同一個文件的數(shù)據(jù)或?qū)⑼粋€文件夾下的文件數(shù)據(jù)盡可能地存儲在連續(xù)的磁盤陣列塊上,將磁盤空間劃分為多個塊,每個塊的大小為64KB,每個小文件只能存放在單個塊中,不能跨塊存放,每一個文件夾將擁有一個或多個塊,這些塊都只存放此文件夾的數(shù)據(jù),每個文件數(shù)據(jù)都存放在連續(xù)的磁盤空間上,以此提聞“預讀”數(shù)據(jù)的命中率,減少磁盤尋道時間,提聞存儲效能;
小文件在磁盤陣列上的存儲數(shù)據(jù)存儲方式是:通過簡化Node屬性信息,將文件信息節(jié)點的屬性信息存放在元數(shù)據(jù)服務器上,用戶只需要知道文件的磁盤空間信息即可進行訪問,對Node的數(shù)據(jù)結(jié)構(gòu)進行簡化設計,只保留文件的磁盤空間信息以及屬于它的少量數(shù)據(jù)成員,其中,F(xiàn)ile_id是文件標識符;StartPosition是文件在塊中的起始位置;Long是文件的長度;Weight是文件權重,在本策略中代表文件的訪問頻率;Block_id是文件所存放的塊的標識符;Count是文件的訪問計數(shù)器;Lock是文件鎖;
本發(fā)明的有益效果是:通過將邏輯上連續(xù)的數(shù)據(jù)盡可能存儲在物理磁盤的連續(xù)空間,使用cache技術充當元數(shù)據(jù)服務器的角色并通過簡化的文件信息節(jié)點提高cache利用率,提高了小文件訪問性能;聚合更新數(shù)據(jù)及其文件夾域中的相關數(shù)據(jù)為一次I/O請求寫入,減少了文件碎片數(shù)量,讀取時采用提前發(fā)送批量的高訪問率的小文件方式來降低頻繁的I/O操作,較好的提高了文件傳輸性能。
圖1是小文件數(shù)據(jù)存儲結(jié)構(gòu)示意 圖2是同文件夾中的文件存儲示意 圖3是Node數(shù)據(jù)結(jié)構(gòu)示意圖。
具體實施例方式下面將對本發(fā)明實施方案做進一步詳細描述。本發(fā)明設計在存儲小文件時通過采用開辟大塊的連續(xù)磁盤空間的方式來存儲大量的小文件。首先將磁盤空間劃分為多個塊,每個塊的大小為64KB,大文件的連續(xù)磁盤空間就由這一系列塊所組成,當遇到的文件比較小時,每個小文件只能存放在單個塊中,不能跨越2個塊存放,每個文件數(shù)據(jù)都存放在連續(xù)的磁盤空間上,圖1是在一個塊中存放多個小文件的示例圖,Al,A2,A3,A4和A5為5個文件,文件與文件之間連續(xù)存放,如Al與A2,A3與A4,紅色部分為此塊的碎片,當出現(xiàn)文件的大小小于這些碎片的大小時,應優(yōu)先把文件存放在這些碎片中,為了提高“預讀”數(shù)據(jù)的命中率,在本發(fā)明的存儲布局中設計的是將邏輯上連續(xù)的數(shù)據(jù)盡可能地存儲在物理磁盤的連續(xù)空間上,即將同一個文件的數(shù)據(jù)或?qū)⑼粋€文件夾下的文件數(shù)據(jù)盡可能地存儲在連續(xù)的磁盤空間塊上,每一個文件夾將擁有一個或多個塊,這些塊都只存放此文件夾的文件,如圖2所示。在本系統(tǒng)的數(shù)據(jù)存儲結(jié)構(gòu)中,我們將文件信息節(jié)點的屬性信息存放在元數(shù)據(jù)服務器上,在I/o服務器上,只需要知道文件的磁盤空間信息即可進行訪問,因此在I/O服務器上,只需要記錄文件的磁盤空間信息,而不需要記錄文件的其他屬性,如創(chuàng)建時間、最后訪問時間和所屬用戶等?;诖?,對Node的數(shù)據(jù)結(jié)構(gòu)進行簡化設計,只保留文件的磁盤空間信息以及屬于它的少量數(shù)據(jù)成員,因此,設計了一種簡化的Node屬性信息,詳細的Node數(shù)據(jù)結(jié)構(gòu)如圖3所示,其中,F(xiàn)ile_id是文件標識符;StartPosition是文件在塊中的起始位置;Long是文件的長度;Weight是文件權重,在本策略中代表文件的訪問頻率;Block_id是文件所存放的塊的標識符;Count是文件的訪問計數(shù)器;Lock是文件鎖。
針對本系統(tǒng)的數(shù)據(jù)存儲訪問頻率問題,首先,設計一個全局變量NodeList,NodeList是對Node的一個排序鏈表,根據(jù)文件的訪問頻率進行排序,它是為了實現(xiàn)優(yōu)化文件傳輸而設計的,為整個小文件讀取、存儲解決方案服務。NodeList是對與每個文件夾而服務的,根據(jù)文件夾里的每個文件的訪問頻率形成一個排序列表,當用戶訪問該文件夾里的某個文件時,系統(tǒng)會自動地將這個列表里高訪問頻率的文件一起發(fā)送過去,但為了避免發(fā)送過多的文件,設定一個高訪問頻率的閾值
巧,并將所有訪問頻率高于6的文件順序分成多個組,每個組可能包含多個文件,組中所
有文件大小之和不超過64KB,每當用戶請求當前文件夾中的一個文件時,系統(tǒng)會按照順序
將一個組的文件一起發(fā)送過去,從而降低文件傳輸時延,巧,」&的計算公式如下:
權利要求
1.一種海量小文件讀取存儲方法,其特征在于通過將邏輯上連續(xù)的小文件數(shù)據(jù)盡可能的存儲在物理磁盤的連續(xù)空間之內(nèi),以此提高用戶對文件訪問的并發(fā)性操作,從而提高了海量小文件的訪問性能,其中: 小文件的讀取操作設計為: 在讀寫小文件的時間延遲主要花在磁盤磁頭的尋道定位上,一旦定位好,讀取一個數(shù)據(jù)塊所花費的時間和讀取連續(xù)幾個數(shù)據(jù)塊的時間相差不是很大,因此,結(jié)合上面提出的優(yōu)化的數(shù)據(jù)存儲結(jié)構(gòu),采用預讀的方式,將同一個塊中的文件一起讀取出來,從而減少磁盤I/O的次數(shù);針對頻繁訪問元數(shù)據(jù)服務器上的磁盤造成整個系統(tǒng)I/O性能較差的問題,使用cache充當元數(shù)據(jù)服務器的角色,在cache上保存文件信息節(jié)點的信息,并且通過簡化的Node數(shù)據(jù)結(jié)構(gòu)使每個文件信息節(jié)點只保留文件的磁盤空間信息以及另外少量有用的信息,從而提高cache的利用率,使cache能夠保存大量的文件信息節(jié)點,通過這種方式,減少訪問磁盤的次數(shù)和讀取文件信息節(jié)點的開銷,從而提高I/O性能; 海量小文件在磁盤陣列上的存儲方法為: 在存儲小文件時,通過采用開辟大塊連續(xù)磁盤空間的方式來存儲海量小文件,也就是將邏輯上連續(xù)的數(shù)據(jù)盡可能地存儲在磁盤陣列的連續(xù)空間上,即將同一個文件的數(shù)據(jù)或?qū)⑼粋€文件夾下的文件數(shù)據(jù)盡可能地存儲在連續(xù)的磁盤陣列塊上,將磁盤空間劃分為多個塊,每個塊的大小為64KB,每個小文件只能存放在單個塊中,不能跨塊存放,每一個文件夾將擁有一個或多個塊,這些塊都只存放此文件夾的數(shù)據(jù),每個文件數(shù)據(jù)都存放在連續(xù)的磁盤空間上,以此提聞“預讀”數(shù)據(jù)的命中率,減少磁盤尋道時間,提聞存儲效能; 小文件在磁盤陣列上的存儲數(shù)據(jù)存儲方式是:通過簡化Node屬性信息,將文件信息節(jié)點的屬性信息存放在元數(shù)據(jù)服務器上,用戶只需要知道文件的磁盤空間信息即可進行訪問,對Node的數(shù)據(jù)結(jié)構(gòu)進行簡化設計,只保留文件的磁盤空間信息以及屬于它的少量數(shù)據(jù)成員,其中,F(xiàn)i I e_id是文件標識符;StartPos it ion是文件在塊中的起始位置;Long是文件的長度;Weight是文件權重,在本策略中代表文件的訪問頻率;Block_id是文件所存放的塊的標識符;Count是文件的訪問計數(shù)器;Lock是文件鎖。
全文摘要
本發(fā)明提供一種海量小文件讀取存儲方法,通過將邏輯上連續(xù)的數(shù)據(jù)盡可能存儲在物理磁盤的連續(xù)空間,使用cache技術充當元數(shù)據(jù)服務器的角色并通過簡化的文件信息節(jié)點提高cache利用率,提高了小文件訪問性能;聚合更新數(shù)據(jù)及其文件夾域中的相關數(shù)據(jù)為一次I/O請求寫入,減少了文件碎片數(shù)量,讀取時采用提前發(fā)送批量的高訪問率的小文件方式來降低頻繁的I/O操作,較好的提高了文件傳輸性能。
文檔編號G06F3/06GK103176754SQ201310112179
公開日2013年6月26日 申請日期2013年4月2日 優(yōu)先權日2013年4月2日
發(fā)明者張硯波, 王東風 申請人:浪潮電子信息產(chǎn)業(yè)股份有限公司