1.一種文件存儲和索引方法,其特征在于包括:
按照文件的實際key值的字母順序存儲各文件,得到數(shù)據(jù)文件;
生成用于索引所述數(shù)據(jù)文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的實際key值的前N字節(jié)作為key值,每個索引指向所述數(shù)據(jù)文件中的一個或者多個文件,所述key值對應(yīng)的offset值為所述key值指向的一個或者多個文件中首個文件的offset值,所述key值對應(yīng)的size值為所述key值指向的一個或者多個文件中首個文件的size值,N為正整數(shù)。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述索引文件中的offset字段和size字段是通過512字節(jié)對齊的。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,生成用于索引所述數(shù)據(jù)文件中各文件的索引文件還包括:
按照key值前綴分層存儲所述索引文件的索引,其中,所述key值前綴對應(yīng)的分層中存儲的索引的key值為截去所述key值前綴的簡短key值,其中,所述key值前綴的字節(jié)長度小于N。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,
所述索引文件的索引的offset值是以所述索引所在分層為偏移范圍的層內(nèi)offset值,所述層內(nèi)offset值的字節(jié)數(shù)是根據(jù)分層的最大層地址空間確定的。
5.根據(jù)權(quán)利要求1至4中任一項所述的方法,其特征在于,所述方法還包括:
將所述數(shù)據(jù)文件中的所有文件映射到bloomfilter中,以使讀取所述數(shù)據(jù)文件中的文件時通過快速搜索所述bloomfilter來判斷將要讀取的文件是否可能存在。
6.一種文件存儲和索引裝置,其特征在于包括:
數(shù)據(jù)文件存儲模塊,用于存儲數(shù)據(jù)文件,其中,所述數(shù)據(jù)文件是按照文件的實際key值的字母順序存儲各文件所得到的;
索引文件生成模塊,用于生成用于索引所述數(shù)據(jù)文件中各文件的索引文件,其中,所述索引文件中的索引使用各文件的實際key值的前N字節(jié)作為key值,每個索引指向所述數(shù)據(jù)文件中的一個或者多個文件,所述key值對應(yīng)的offset值為所述key值指向的一個或者多個文件中首個文件的offset值,所述key值對應(yīng)的size值為所述key值指向的一個或者多個文件中首個文件的size值,N為正整數(shù)。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述索引文件生成模塊,還用于按照key值前綴分層存儲所述索引文件的索引,其中,所述key值前綴對應(yīng)的分層中存儲的索引的key值為截去所述key值前綴的簡短key值,其中,所述key值前綴的字節(jié)長度小于N。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,
所述索引文件的索引的offset值是以所述索引所在分層為偏移范圍的層內(nèi)offset值,所述層內(nèi)offset值的字節(jié)數(shù)是根據(jù)分層的最大層地址空間確定的。
9.根據(jù)權(quán)利要求6至8中任一項所述的裝置,其特征在于,所述裝置還包括:
映射模塊,用于將所述數(shù)據(jù)文件中的所有文件映射到bloomfilter中,以使讀取所述數(shù)據(jù)文件中的文件時通過搜索所述bloomfilter來判斷將要讀取的文件是否可能存在。
10.一種在權(quán)利要求6至9中任一項所述的文件存儲和索引裝置中讀取文件的方法,其特征在于包括:
根據(jù)將要讀取的文件的實際key值的前N字節(jié)查詢所述索引文件中所述實際key值的前N字節(jié)對應(yīng)的索引;
根據(jù)所述實際key值,在所述實際key值的前N字節(jié)對應(yīng)的索引指向的一個或者多個文件中匹配文件;
在匹配到key值與所述實際key值一致的文件時,讀取該文件。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,根據(jù)將要讀取的文件的實際key值的前N字節(jié)查詢所述索引文件中所述實際key值的前N字節(jié)對應(yīng)的索引包括:
根據(jù)所述bloom filter判斷將要讀取的文件是否可能存在;
在判斷結(jié)果為可能存在的情況下,根據(jù)將要讀取的文件的實際key值的前N字節(jié)查詢所述索引文件中所述實際key值的前N字節(jié)對應(yīng)的索引,否則終止讀取文件。