存儲文件的方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種存儲文件的方法和裝置。該方法包括:確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);若T小于N,則按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。本發(fā)明實施例的存儲文件的方法和裝置,能夠節(jié)省存儲空間和提高讀寫效率。
【專利說明】存儲文件的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息【技術(shù)領(lǐng)域】,尤其涉及存儲文件的方法和裝置。
【背景技術(shù)】
[0002]現(xiàn)有技術(shù)在按照冗余關(guān)系組織文件并存儲時,例如,按照冗余關(guān)系將文件組織為分條(stripe)存儲時,會將整個分條存儲到磁盤。在文件數(shù)據(jù)的大小小于一個分條大小時,也會存儲整個分條,即占用一個分條大小的磁盤空間。比如,在糾刪碼(Erasure Code)冗余方式中,將N份數(shù)據(jù)進行Erasure Code冗余校驗計算,計算之后產(chǎn)生M份冗余。在文件數(shù)據(jù)不足N份數(shù)據(jù)時,會添加零以補足N份數(shù)據(jù)。N分?jǐn)?shù)據(jù)和M份冗余組成一個分條,在存儲時會將N分?jǐn)?shù)據(jù)和M份冗余都存儲到磁盤,這樣會造成多占用存儲空間。在獨立冗余磁盤陣列(Redundant Array of Inexpensive Disks, RAID)方式中,如果文件大小不足一個分條,也會占用一個分條大小的磁盤空間,導(dǎo)致多占用存儲空間。
【發(fā)明內(nèi)容】
[0003]本發(fā)明實施例提供了一種存儲文件的方法和裝置,能夠節(jié)省存儲空間。
[0004]第一方面,提供了一種存儲文件的方法,包括:確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);若T小于N,則按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0005]在第一種可能的實現(xiàn)方式中,該方法還包括:
[0006]記錄該N個數(shù)據(jù)塊的存儲情況。
[0007]結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0008]通過位圖Bitmap標(biāo)識該N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
[0009]結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0010]記錄被存儲的該文件的T個數(shù)據(jù)塊的總大小。
[0011]結(jié)合第一方面的第一至三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0012]在該文件的元數(shù)據(jù)中記錄該存儲情況。
[0013]結(jié)合第一方面的第一至四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,該方法還包括:
[0014]在讀取該文件的數(shù)據(jù)時,獲取該存儲情況;
[0015]根據(jù)該存儲情況確定該文件被存儲的T個數(shù)據(jù)塊;
[0016]讀取該T個數(shù)據(jù)塊和該M個校驗塊。
[0017]第二方面,提供了一種存儲文件的裝置,包括:確定模塊,用于確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);處理模塊,用于在T小于N的情況下按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);存儲模塊,用于存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0018]在第一種可能的實現(xiàn)方式中,該裝置還包括:
[0019]記錄模塊,用于記錄該N個數(shù)據(jù)塊的存儲情況。
[0020]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,該記錄模塊具體用于通過位圖Bitmap標(biāo)識該N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
[0021]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,該記錄模塊具體用于記錄被存儲的該文件的T個數(shù)據(jù)塊的總大小。
[0022]結(jié)合第二方面的第一至三種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,該記錄模塊具體用于在該文件的元數(shù)據(jù)中記錄該存儲情況。
[0023]結(jié)合第二方面的第一至四種可能的實現(xiàn)方式中的任一種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,該裝置還包括:
[0024]讀取模塊,用于在讀取該文件的數(shù)據(jù)時,獲取該存儲情況,根據(jù)該存儲情況確定該文件被存儲的T個數(shù)據(jù)塊,讀取該T個數(shù)據(jù)塊和該M個校驗塊。
[0025]基于上述技術(shù)方案,本發(fā)明實施例的存儲文件的方法和裝置,通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,能夠節(jié)省存儲空間和提聞讀與效率。
【專利附圖】
【附圖說明】
[0026]為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對本發(fā)明實施例中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0027]圖1是根據(jù)本發(fā)明實施例的分條的示意圖。
[0028]圖2是根據(jù)本發(fā)明實施例的存儲文件的方法的示意性流程圖。
[0029]圖3是根據(jù)本發(fā)明實施例的小文件存儲的示意圖。
[0030]圖4是根據(jù)本發(fā)明實施例的存儲情況記錄的示意圖。
[0031]圖5是根據(jù)本發(fā)明實施例的讀取文件的方法的示意圖。
[0032]圖6是根據(jù)本發(fā)明實施例的文件大小變化的示意圖。
[0033]圖7是根據(jù)本發(fā)明實施例的存儲文件的裝置的示意性框圖。
[0034]圖8是根據(jù)本發(fā)明另一實施例的存儲文件的裝置的示意性框圖。
[0035]圖9是根據(jù)本發(fā)明又一實施例的存儲文件的裝置的結(jié)構(gòu)圖。
【具體實施方式】
[0036]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明的一部分實施例,而不是全部實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都應(yīng)屬于本發(fā)明保護的范圍。
[0037]本發(fā)明實施例的技術(shù)方案可以用于以冗余關(guān)系組織文件的系統(tǒng),該冗余關(guān)系可以是Erasure Code冗余關(guān)系或者其他冗余關(guān)系,本發(fā)明實施例對此不限定。
[0038]本發(fā)明實施例中的數(shù)據(jù)塊集合包括按照冗余關(guān)系組織的N個數(shù)據(jù)塊和M個校驗塊。該數(shù)據(jù)塊集合可以為分條,但本發(fā)明實施例對此并不限定。
[0039]例如,如圖1所示,一個分條由四個數(shù)據(jù)塊和兩個校驗塊構(gòu)成,它們之間存在Erasure Code冗余關(guān)系。應(yīng)理解,圖1只是示例,不應(yīng)對本發(fā)明實施例構(gòu)成限定。
[0040]圖2示出了根據(jù)本發(fā)明實施例的存儲文件的方法100的示意性流程圖。圖2的方法由存儲文件的裝置執(zhí)行。如圖2所示,該方法100包括:
[0041]SI 10,確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);
[0042]S120,若T小于N,則按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);
[0043]S130,存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0044]在本發(fā)明實施例中,存儲文件的裝置在按照冗余關(guān)系將待存儲文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合并存儲時,首先確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T。在T小于N時,即該文件的數(shù)據(jù)塊的個數(shù)小于上述數(shù)據(jù)塊集合所需要的數(shù)據(jù)塊的個數(shù)(這種情況中的文件稱為小文件)時,該數(shù)據(jù)塊集合的N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,其中,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零。也就是說,在這種情況下,數(shù)據(jù)塊集合包括待存儲文件的數(shù)據(jù)塊,無效數(shù)據(jù)塊以及校驗塊。然后,存儲文件的裝置只存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊,即只將該文件的T個數(shù)據(jù)塊和該M個校驗塊存儲到磁盤,而不存儲無效數(shù)據(jù)塊。
[0045]在現(xiàn)有技術(shù)中,在T小于N時,也是存儲全部N個數(shù)據(jù)塊以及M個校驗塊。例如,如圖1所示,在文件的數(shù)據(jù)只夠一個數(shù)據(jù)塊時,后面三個無效數(shù)據(jù)塊也要存儲到磁盤上,在讀取數(shù)據(jù)時也要讀取所有的數(shù)據(jù)塊,這樣不但占用了空間,讀取效率也較低。
[0046]而在本發(fā)明實施例中,只存儲T個數(shù)據(jù)塊和M個校驗塊,因此,節(jié)省了存儲空間。并且,在讀寫文件時所讀寫的數(shù)據(jù)塊個數(shù)也減少,讀寫效率也能夠提高。
[0047]因此,本發(fā)明實施例的存儲文件的方法,通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,能夠節(jié)省存儲空間和提高讀寫效率。
[0048]在本發(fā)明實施例中,可選地,該方法100還包括:
[0049]記錄該N個數(shù)據(jù)塊的存儲情況。
[0050]在存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊時,存儲文件的裝置同時記錄該N個數(shù)據(jù)塊的存儲情況。也就是說,記錄該N個數(shù)據(jù)塊中各數(shù)據(jù)塊被存儲的情況。該存儲情況用于在讀取文件時確定文件有幾個數(shù)據(jù)塊。具體而言,由于沒有存儲全部N個數(shù)據(jù)塊,文件的數(shù)據(jù)塊個數(shù)不是固定的N個,因此,需要該存儲情況以便于在讀取文件時確定文件的數(shù)據(jù)塊個數(shù)。
[0051]在SllO中,存儲文件的裝置確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T。
[0052]具體而言,存儲文件的裝置根據(jù)待存儲的文件的大小以及數(shù)據(jù)塊的大小確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,其中數(shù)據(jù)塊大小可以預(yù)先設(shè)定。例如,若數(shù)據(jù)塊大小為128Κ,待存儲的文件為100Κ,則T為I ;若待存儲的文件為300Κ,則T為3。
[0053]在S120中,存儲文件的裝置在T小于N時,按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零。
[0054]數(shù)據(jù)塊集合為由冗余關(guān)系所決定的數(shù)據(jù)塊和校驗塊的集合。在N份數(shù)據(jù)和M份冗余的冗余關(guān)系中,需要根據(jù)N份數(shù)據(jù)計算得到M份冗余。也就是說,需要根據(jù)N個數(shù)據(jù)塊計算產(chǎn)生M個校驗塊。在本發(fā)明實施例中,當(dāng)T小于N時,即待存儲的文件的數(shù)據(jù)塊個數(shù)小于根據(jù)冗余關(guān)系組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊時,在組織數(shù)據(jù)塊集合時,仍然通過補充零以補足N個數(shù)據(jù)塊。這些通過補充零得到的數(shù)據(jù)塊稱為無效數(shù)據(jù)塊。例如,如圖3所示,若N為4,Μ為2,即數(shù)據(jù)塊集合(圖中以分條為例)包括4個數(shù)據(jù)塊和2個校驗塊,在文件數(shù)據(jù)只夠一個數(shù)據(jù)塊(即T為I)時,補充3個無效數(shù)據(jù)塊,從而根據(jù)冗余計算得到校驗塊,以形成分條。
[0055]在S130中,存儲文件的裝置存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0056]存儲文件的裝置只存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊,即只將該文件的T個數(shù)據(jù)塊和該M個校驗塊存儲到磁盤,而不存儲無效數(shù)據(jù)塊。也就是說,盡管在根據(jù)冗余關(guān)系組織數(shù)據(jù)塊集合時,會產(chǎn)生N個數(shù)據(jù)塊和M個校驗塊,在本發(fā)明實施例中只存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0057]如圖3所示,在文件只有一個數(shù)據(jù)塊時,只存儲這一個數(shù)據(jù)塊和兩個校驗塊,不存儲另外三個無效數(shù)據(jù)塊。
[0058]為了便于后續(xù)的讀取,存儲文件的裝置記錄該N個數(shù)據(jù)塊的存儲情況。N個數(shù)據(jù)塊的存儲情況用于表示數(shù)據(jù)塊集合中的N個數(shù)據(jù)塊被存儲的情況。根據(jù)該存儲情況能夠在讀取文件時確定文件有幾個數(shù)據(jù)塊。
[0059]在本發(fā)明實施例中,記錄該N個數(shù)據(jù)塊的存儲情況可以有多種方式。
[0060]可選地,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0061]通過位圖Bitmap標(biāo)識該N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
[0062]具體而言,利用Bitmap中的各個位分別標(biāo)識各個數(shù)據(jù)塊的存儲情況。例如,I表示數(shù)據(jù)塊被存儲,O表示數(shù)據(jù)塊沒有被存儲。應(yīng)理解,由于校驗塊都需要存儲,因此不需要記錄校驗塊的存儲情況,即可以只記錄數(shù)據(jù)塊集合中N個數(shù)據(jù)塊的存儲情況。如圖4所示,對于由4個數(shù)據(jù)塊和2個校驗塊構(gòu)成的分條,可以采用4位的Bitmap,每一位標(biāo)識一個數(shù)據(jù)塊。若4個數(shù)據(jù)塊都為文件的數(shù)據(jù)塊,即不是無效數(shù)據(jù)塊,則4個數(shù)據(jù)塊都要存儲到磁盤,因此Bitmap為1111 ;若只有第一數(shù)據(jù)塊為文件的數(shù)據(jù)塊,其他三個數(shù)據(jù)塊為無效數(shù)據(jù)塊,則只存儲第一個數(shù)據(jù)塊,因此Bitmap為1000。
[0063]應(yīng)理解,在通過Bitmap記錄存儲情況的方式中,Bitmap的位數(shù)也不限定,例如,Bitmap的位數(shù)可以多于數(shù)據(jù)塊的個數(shù),或者等于數(shù)據(jù)塊和校驗塊的總數(shù),Bitmap還可以同時記錄校驗塊的存儲情況等等。
[0064]可選地,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0065]記錄被存儲的該文件的T個數(shù)據(jù)塊的總大小。
[0066]數(shù)據(jù)塊集合中N個數(shù)據(jù)塊的存儲情況還可以通過記錄被存儲的T個數(shù)據(jù)塊的總大小而標(biāo)識。具體而言,將被存儲的所有數(shù)據(jù)塊的總大小記錄下來,然后對一個數(shù)據(jù)塊的大小取模,得到被存儲的數(shù)據(jù)塊的個數(shù),從而得到存儲情況。以分條為例,如果一個分條是1MB,包括8個數(shù)據(jù)塊(N為8), 2個校驗塊(M為2),那么一個數(shù)據(jù)塊為128KB??梢杂涗浺粋€分條中實際被存儲的數(shù)據(jù)塊的總大小,比如640KB,那么640/128等于5,所以存儲了 5個數(shù)據(jù)塊以及2個校驗塊,還有3個無效數(shù)據(jù)塊沒有存儲。
[0067]應(yīng)理解,記錄存儲情況的方式還可以有其他方式,比如,可以采用索引的方式,不同的值表示不同的存儲情況,本發(fā)明實施例不限定記錄存儲情況的方式。
[0068]在本發(fā)明實施例中,該N個數(shù)據(jù)塊的存儲情況記錄在哪兒也有多種情況。
[0069]可選地,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0070]在該文件的元數(shù)據(jù)中記錄該存儲情況。
[0071]在這種實施方式中,存儲情況記錄在文件的元數(shù)據(jù)中。這樣,就可以在讀取元數(shù)據(jù)時知道被存儲的文件有幾個數(shù)據(jù)塊。
[0072]可選地,記錄該N個數(shù)據(jù)塊的存儲情況,包括:
[0073]在被存儲的數(shù)據(jù)塊中記錄該存儲情況。
[0074]在這種實施方式中,存儲情況記錄在數(shù)據(jù)塊中。在存儲數(shù)據(jù)塊時,同時記錄存儲情況,如圖4所示。
[0075]應(yīng)理解,存儲情況記錄的方式還可以有其他方式,例如,可以將存儲情況存儲在上級塊中,存儲在文件索引節(jié)點(inode)中,或者構(gòu)建一個文件容器存儲在文件容器的屬性中
坐坐寸寸ο
[0076]在本發(fā)明實施例中,可選地,該方法100還包括:
[0077]在讀取該文件的數(shù)據(jù)時,獲取該存儲情況;
[0078]根據(jù)該存儲情況確定該文件被存儲的T個數(shù)據(jù)塊;
[0079]讀取該T個數(shù)據(jù)塊和該M個校驗塊。
[0080]具體而言,由于在存儲時只存儲了文件的T個數(shù)據(jù)塊以及M個校驗塊,在讀取文件時,也只需讀取T個數(shù)據(jù)塊以及M個校驗塊。存儲文件的裝置獲取與文件對應(yīng)的存儲情況,根據(jù)該存儲情況確定文件被存儲為T個數(shù)據(jù)塊,從而讀取該T個數(shù)據(jù)塊以及M個校驗塊,并根據(jù)該T個數(shù)據(jù)塊以及該M個校驗塊得到該文件的數(shù)據(jù)。若存儲情況記錄在元數(shù)據(jù)中,則在讀取元數(shù)據(jù)時一并獲取該存儲情況,然后根據(jù)該存儲情況讀取數(shù)據(jù)塊。若存儲情況記錄在被存儲的數(shù)據(jù)塊中,則在讀取數(shù)據(jù)塊時一并讀取該存儲情況。例如,訪問數(shù)據(jù)塊的時候,各數(shù)據(jù)塊可以一次讀取上來,然后,根據(jù)數(shù)據(jù)塊中記錄的存儲情況判斷文件應(yīng)該有多少個數(shù)據(jù)塊,從而收集齊文件的數(shù)據(jù)塊。
[0081]例如,如圖5所示,在讀取文件時,先讀取文件的元數(shù)據(jù),獲取存儲情況,根據(jù)該存儲情況確定文件只有一個數(shù)據(jù)塊,因此,讀取一個數(shù)據(jù)塊以及兩個校驗塊。
[0082]因此,本發(fā)明實施例的存儲文件的方法,在讀取文件時所讀取的數(shù)據(jù)塊的個數(shù)也減少,從而能夠提聞讀取效率。
[0083]采用本發(fā)明實施例的存儲文件的方法還能夠很好地實現(xiàn)大小文件的轉(zhuǎn)換。以分條為例,如圖6所示,當(dāng)文件增大時,文件的數(shù)據(jù)塊變多,直到占滿整個分條,即分條內(nèi)所有數(shù)據(jù)塊都變?yōu)槲募臄?shù)據(jù)塊。在存儲數(shù)據(jù)塊的同時,存儲情況也隨之調(diào)整,以便于后續(xù)的數(shù)據(jù)塊存儲和讀取。這樣,在文件的數(shù)據(jù)不滿一個分條時,能夠最少地占用存儲空間,隨著文件的數(shù)據(jù)的增多,逐漸占滿整個分條,從而達到自動調(diào)整的目的。因而,本發(fā)明實施例的存儲文件的方法能夠很好地實現(xiàn)大小文件的轉(zhuǎn)換。
[0084]因此,本發(fā)明實施例的存儲文件的方法,通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,并記錄數(shù)據(jù)塊集合中數(shù)據(jù)塊的存儲情況,能夠節(jié)省存儲空間,提高讀寫效率,還便于實現(xiàn)大小文件的轉(zhuǎn)換。。
[0085]應(yīng)理解,在本發(fā)明的各種實施例中,上述各過程的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實施例的實施過程構(gòu)成任何限定。
[0086]上文中結(jié)合圖1至圖6,詳細(xì)描述了根據(jù)本發(fā)明實施例的存儲文件的方法,下面將結(jié)合圖7至圖9,描述根據(jù)本發(fā)明實施例的存儲文件的裝置。
[0087]圖7示出了根據(jù)本發(fā)明實施例的存儲文件的裝置700的示意性框圖。如圖7所示,該裝置700包括:
[0088]確定模塊710,用于確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);
[0089]處理模塊720,用于在T小于N的情況下按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);
[0090]存儲模塊730,用于存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0091]在本發(fā)明實施例中,存儲文件的裝置700在按照冗余關(guān)系將待存儲文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合并存儲時,確定模塊710確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T。在T小于N時,即該文件的數(shù)據(jù)塊的個數(shù)小于上述數(shù)據(jù)塊集合所需要的數(shù)據(jù)塊的個數(shù)(這種情況中的文件成為小文件)時,處理模塊720組織的該數(shù)據(jù)塊集合的N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,其中,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零。也就是說,在這種情況下,數(shù)據(jù)塊集合包括待存儲文件的數(shù)據(jù)塊,無效數(shù)據(jù)塊以及校驗塊。存儲模塊730只存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊,即只將該文件的T個數(shù)據(jù)塊和該M個校驗塊存儲到磁盤,而不存儲無效數(shù)據(jù)塊。
[0092]在現(xiàn)有技術(shù)中,在T小于N時,也會存儲全部N個數(shù)據(jù)塊以及M個校驗塊。例如,如圖1所示,在文件的數(shù)據(jù)只夠一個數(shù)據(jù)塊時,后面三個無效數(shù)據(jù)塊也要存儲到磁盤上,在讀取數(shù)據(jù)時也要讀取所有的數(shù)據(jù)塊,這樣不但占用了空間,讀取效率也較低。
[0093]而在本發(fā)明實施例中,只存儲T個數(shù)據(jù)塊和M個校驗塊,因此,節(jié)省了存儲空間。并且,在讀寫文件時所讀寫的數(shù)據(jù)塊個數(shù)也減少,讀寫效率也能夠提高。
[0094]因此,本發(fā)明實施例的存儲文件的裝置,通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,能夠節(jié)省存儲空間和提高讀寫效率。
[0095]在本發(fā)明實施例中,如圖8所示,可選地,該裝置700還包括:
[0096]記錄模塊740,用于記錄該N個數(shù)據(jù)塊的存儲情況。
[0097]在存儲模塊730存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊時,記錄模塊740記錄該N個數(shù)據(jù)塊的存儲情況。也就是說,記錄該N個數(shù)據(jù)塊中各數(shù)據(jù)塊被存儲的情況。該存儲情況用于在讀取文件時確定文件有幾個數(shù)據(jù)塊。具體而言,由于沒有存儲全部N個數(shù)據(jù)塊,文件的數(shù)據(jù)塊個數(shù)不是固定的N個,因此,需要該存儲情況以便于在讀取文件時確定文件的數(shù)據(jù)塊個數(shù)。
[0098]在本發(fā)明實施例中,可選地,該記錄模塊740具體用于通過位圖Bitmap標(biāo)識該N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
[0099]具體而言,利用Bitmap中的各個位分別標(biāo)識各個數(shù)據(jù)塊的存儲情況。例如,I表示數(shù)據(jù)塊被存儲,O表示數(shù)據(jù)塊沒有被存儲。應(yīng)理解,由于校驗塊都需要存儲,因此不需要記錄校驗塊的存儲情況,即可以只記錄數(shù)據(jù)塊集合中N個數(shù)據(jù)塊的存儲情況。如圖4所示,對于由4個數(shù)據(jù)塊和2個校驗塊構(gòu)成的分條,可以采用4位的Bitmap,每一位標(biāo)識一個數(shù)據(jù)塊。若4個數(shù)據(jù)塊都為文件的數(shù)據(jù)塊,即不是無效數(shù)據(jù)塊,則4個數(shù)據(jù)塊都要存儲到磁盤,因此Bitmap為1111 ;若只有第一數(shù)據(jù)塊為文件的數(shù)據(jù)塊,其他三個數(shù)據(jù)塊為無效數(shù)據(jù)塊,則只存儲第一個數(shù)據(jù)塊,因此Bitmap為1000。
[0100]在本發(fā)明實施例中,可選地,該記錄模塊740具體用于記錄被存儲的該文件的T個數(shù)據(jù)塊的總大小。
[0101]數(shù)據(jù)塊集合中N個數(shù)據(jù)塊的存儲情況還可以通過記錄被存儲的T個數(shù)據(jù)塊的總大小而標(biāo)識。具體而言,將被存儲的所有數(shù)據(jù)塊的總大小記錄下來,然后對一個數(shù)據(jù)塊的大小取模,得到被存儲的數(shù)據(jù)塊的個數(shù),從而得到存儲情況。
[0102]在本發(fā)明實施例中,可選地,該記錄模塊740具體用于在該文件的元數(shù)據(jù)中記錄該存儲情況。
[0103]在本發(fā)明實施例中,如圖8所示,可選地,該裝置700還包括:
[0104]讀取模塊750,用于在讀取該文件的數(shù)據(jù)時,獲取該存儲情況,根據(jù)該存儲情況確定該文件被存儲的T個數(shù)據(jù)塊,讀取該T個數(shù)據(jù)塊和該M個校驗塊。
[0105]具體而言,由于在存儲時只存儲了文件的T個數(shù)據(jù)塊以及M個校驗塊,在讀取文件時,也只需讀取T個數(shù)據(jù)塊以及M個校驗塊。存儲文件的裝置獲取與文件對應(yīng)的存儲情況,根據(jù)該存儲情況確定文件被存儲為T個數(shù)據(jù)塊,從而讀取該T個數(shù)據(jù)塊以及M個校驗塊,并根據(jù)該T個數(shù)據(jù)塊以及該M個校驗塊得到該文件的數(shù)據(jù)。若存儲情況記錄在元數(shù)據(jù)中,則在讀取元數(shù)據(jù)時一并獲取該存儲情況,然后根據(jù)該存儲情況讀取數(shù)據(jù)塊。若存儲情況記錄在被存儲的數(shù)據(jù)塊中,則在讀取數(shù)據(jù)塊時一并讀取該存儲情況。
[0106]本發(fā)明實施例的存儲文件的裝置,在讀取文件時所讀取的數(shù)據(jù)塊的個數(shù)也減少,從而能夠提聞讀取效率。
[0107]在本發(fā)明實施例中,可選地,該冗余關(guān)系為糾刪碼Erasure Code冗余關(guān)系。
[0108]在本發(fā)明實施例中,可選地,該數(shù)據(jù)塊集合為分條stripe。
[0109]根據(jù)本發(fā)明實施例的存儲文件的裝置700可對應(yīng)于根據(jù)本發(fā)明實施例的存儲文件的方法的執(zhí)行主體,并且存儲文件的裝置700中的各個模塊的上述和其它操作和/或功能分別為了實現(xiàn)圖1至圖6中的各個方法的相應(yīng)流程,為了簡潔,在此不再贅述。
[0110]本發(fā)明實施例的存儲文件的裝置,通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,并記錄數(shù)據(jù)塊集合中數(shù)據(jù)塊的存儲情況,能夠節(jié)省存儲空間,提高讀寫效率,還便于實現(xiàn)大小文件的轉(zhuǎn)換。
[0111]圖9示出了本發(fā)明的另一實施例提供的存儲文件的裝置的結(jié)構(gòu),包括至少一個處理器902 (例如CPU),至少一個網(wǎng)絡(luò)接口 905或者其他通信接口,存儲器906,和至少一個通信總線903,用于實現(xiàn)這些裝置之間的連接通信。處理器902用于執(zhí)行存儲器906中存儲的可執(zhí)行模塊,例如計算機程序。存儲器906可能包含高速隨機存取存儲器(RAM =RandomAccess Memory),也可能還包括非不穩(wěn)定的存儲器(non-volatile memory),例如至少一個磁盤存儲器。通過至少一個網(wǎng)絡(luò)接口 905 (可以是有線或者無線)實現(xiàn)與至少一個其他網(wǎng)元之間的通信連接,可以使用互聯(lián)網(wǎng),廣域網(wǎng),本地網(wǎng),城域網(wǎng)等。
[0112]在一些實施方式中,存儲器906存儲了程序9061,處理器902執(zhí)行程序9061,用于:
[0113]確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù);
[0114]若T小于N,則按照冗余關(guān)系將該文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,該N個數(shù)據(jù)塊包括該文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,該無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù);
[0115]存儲該文件的T個數(shù)據(jù)塊和該M個校驗塊。
[0116]可選地,處理器902還用于記錄該N個數(shù)據(jù)塊的存儲情況。
[0117]可選地,處理器902具體用于通過位圖Bitmap標(biāo)識該N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
[0118]可選地,處理器902具體用于記錄被存儲的該文件的T個數(shù)據(jù)塊的總大小。
[0119]可選地,處理器902具體用于在該文件的元數(shù)據(jù)中記錄該存儲情況。
[0120]可選地,處理器902還用于:
[0121]在讀取該文件的數(shù)據(jù)時,獲取該存儲情況;
[0122]根據(jù)該存儲情況確定該文件被存儲的T個數(shù)據(jù)塊;
[0123]讀取該T個數(shù)據(jù)塊和該M個校驗塊。
[0124]可選地,該冗余關(guān)系為糾刪碼Erasure Code冗余關(guān)系。
[0125]可選地,該數(shù)據(jù)塊集合為分條stripe。
[0126]從本發(fā)明實施例提供的以上技術(shù)方案可以看出,本發(fā)明實施例通過在待存儲的文件的數(shù)據(jù)塊的個數(shù)小于組織數(shù)據(jù)塊集合所需的數(shù)據(jù)塊的個數(shù)時,只存儲數(shù)據(jù)塊集合中該文件的數(shù)據(jù)塊以及校驗塊,能夠節(jié)省存儲空間和提聞讀與效率。
[0127]應(yīng)理解,在本發(fā)明實施例中,術(shù)語“和/或”僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系。例如,A和/或B,可以表示:單獨存在A,同時存在A和B,單獨存在B這三種情況。另外,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
[0128]本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、計算機軟件或者二者的結(jié)合來實現(xiàn),為了清楚地說明硬件和軟件的可互換性,在上述說明中已經(jīng)按照功能一般性地描述了各示例的組成及步驟。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認(rèn)為超出本發(fā)明的范圍。
[0129]所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡潔,上述描述的系統(tǒng)、裝置和單元的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
[0130]在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的系統(tǒng)、裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的裝置實施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另外,所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過一些接口、裝置或單元的間接耦合或通信連接,也可以是電的,機械的或其它的形式連接。
[0131]所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本發(fā)明實施例方案的目的。
[0132]另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以是兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
[0133]所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分,或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-OnlyMemory)、隨機存取存儲器(RAM, Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
[0134]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)以權(quán)利要求的保護范圍為準(zhǔn)。
【權(quán)利要求】
1.一種存儲文件的方法,其特征在于,包括: 確定待存儲的文件的數(shù)據(jù)塊的個數(shù)Τ,T為正整數(shù); 若T小于N,則按照冗余關(guān)系將所述文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,所述N個數(shù)據(jù)塊包括所述文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,所述無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù); 存儲所述文件的T個數(shù)據(jù)塊和所述M個校驗塊。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 記錄所述N個數(shù)據(jù)塊的存儲情況。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述記錄所述N個數(shù)據(jù)塊的存儲情況,包括: 通過位圖Bitmap標(biāo)識所述N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
4.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述記錄所述N個數(shù)據(jù)塊的存儲情況,包括: 記錄被存儲的所述文件的T個數(shù)據(jù)塊的總大小。
5.根據(jù)權(quán)利要求2至4中任一項所述的方法,其特征在于,所述記錄所述N個數(shù)據(jù)塊的存儲情況,包括: 在所述文件的元數(shù)據(jù)中記錄所述存儲情況。
6.根據(jù)權(quán)利要求2至5中任一項所述的方法,其特征在于,所述方法還包括: 在讀取所述文件的數(shù)據(jù)時,獲取所述存儲情況; 根據(jù)所述存儲情況確定所述文件被存儲的T個數(shù)據(jù)塊; 讀取所述T個數(shù)據(jù)塊和所述M個校驗塊。
7.一種存儲文件的裝置,其特征在于,包括: 確定模塊,用于確定待存儲的文件的數(shù)據(jù)塊的個數(shù)T,T為正整數(shù); 處理模塊,用于在T小于N的情況下按照冗余關(guān)系將所述文件組織為包括N個數(shù)據(jù)塊和M個校驗塊的數(shù)據(jù)塊集合,其中,所述N個數(shù)據(jù)塊包括所述文件的T個數(shù)據(jù)塊以及無效數(shù)據(jù)塊,所述無效數(shù)據(jù)塊中的數(shù)據(jù)為零,N和M為正整數(shù); 存儲模塊,用于存儲所述文件的T個數(shù)據(jù)塊和所述M個校驗塊。
8.根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 記錄模塊,用于記錄所述N個數(shù)據(jù)塊的存儲情況。
9.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述記錄模塊具體用于通過位圖Bitmap標(biāo)識所述N個數(shù)據(jù)塊中的每一個數(shù)據(jù)塊是否被存儲。
10.根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述記錄模塊具體用于記錄被存儲的所述文件的T個數(shù)據(jù)塊的總大小。
11.根據(jù)權(quán)利要求8至10中任一項所述的裝置,其特征在于,所述記錄模塊具體用于在所述文件的元數(shù)據(jù)中記錄所述存儲情況。
12.根據(jù)權(quán)利要求8至11中任一項所述的裝置,其特征在于,所述裝置還包括: 讀取模塊,用于在讀取所述文件的數(shù)據(jù)時,獲取所述存儲情況,根據(jù)所述存儲情況確定所述文件被存儲的T個數(shù)據(jù)塊,讀取所述T個數(shù)據(jù)塊和所述M個校驗塊。
【文檔編號】G06F11/10GK103797455SQ201380002592
【公開日】2014年5月14日 申請日期:2013年11月6日 優(yōu)先權(quán)日:2013年11月6日
【發(fā)明者】曹宇 申請人:華為技術(shù)有限公司