本發(fā)明涉及存儲(chǔ)技術(shù)領(lǐng)域,特別是涉及一種用于文件系統(tǒng)的文件碎片整理方法及系統(tǒng)。
背景技術(shù):
隨著數(shù)據(jù)的爆炸式發(fā)展,人們常常會(huì)遇到海量小文件的存儲(chǔ)場(chǎng)景,而小文件的頻繁創(chuàng)建、讀寫、下盤引出了很多問(wèn)題。目前,很多用戶針對(duì)這種場(chǎng)景將這些小文件打包存儲(chǔ)到一個(gè)大文件中,該大文件常常稱之為聚合文件,而打包的各小文件均稱為源文件。
當(dāng)對(duì)聚合文件中的源文件進(jìn)行刪除時(shí),為了達(dá)到快速刪除的目的,并不將聚合文件中對(duì)應(yīng)源文件的數(shù)據(jù)清除,而是做個(gè)標(biāo)記表明源文件已經(jīng)刪除即可。因而會(huì)造成大量刪除源文件之后,聚合文件中存儲(chǔ)了大量無(wú)效的源文件數(shù)據(jù)。伴隨著用戶不停的創(chuàng)建、刪除源文件操作,聚合文件中會(huì)有很大的一部分空間存儲(chǔ)著無(wú)效的源文件數(shù)據(jù),造成空間浪費(fèi),并且在用戶通過(guò)預(yù)讀讀取文件時(shí),命中率會(huì)下降很多,這樣就需要定時(shí)對(duì)這些無(wú)效的源文件數(shù)據(jù)做一個(gè)清理操作,即聚合文件的碎片整理??紤]到文件系統(tǒng)可以部署在多個(gè)節(jié)點(diǎn)上,碎片整理的進(jìn)程也可能會(huì)同時(shí)部署到多個(gè)節(jié)點(diǎn)上。因?yàn)椴煌目蛻舳嗽L問(wèn)的是同一個(gè)文件系統(tǒng),多個(gè)客戶端可能會(huì)對(duì)同一個(gè)聚合文件進(jìn)行碎片整理操作。造成資源的浪費(fèi)。
因此,如何避免在碎片整理過(guò)程中對(duì)同一個(gè)源文件重復(fù)處理,是本領(lǐng)域技術(shù)人員目前需要解決的技術(shù)問(wèn)題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種用于文件系統(tǒng)的文件碎片整理方法及系統(tǒng),可以避免在碎片整理過(guò)程中對(duì)同一個(gè)源文件重復(fù)處理。
為解決上述技術(shù)問(wèn)題,本發(fā)明提供了如下技術(shù)方案:
一種用于文件系統(tǒng)的文件碎片整理方法,包括:
預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量;
獲取第一客戶端對(duì)目標(biāo)聚合文件的讀寫請(qǐng)求信息;
判斷當(dāng)前是否有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作;
若否,則賦予所述第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)所述第一客戶端獲取所述目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)所述目標(biāo)聚合文件進(jìn)行碎片整理;
在所述第一客戶端結(jié)束對(duì)所述目標(biāo)聚合文件的碎片整理操作時(shí),獲取所述第一客戶端讀取的文件長(zhǎng)度,并計(jì)算所述目標(biāo)聚合文件的偏移量和讀取的文件長(zhǎng)度之和作為所述目標(biāo)聚合文件新的偏移量進(jìn)行偏移量更新。
優(yōu)選地,所述預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量,包括:
預(yù)先在各聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中擴(kuò)展一個(gè)用于記錄客戶端讀取進(jìn)度的偏移量;
將各聚合文件的偏移量初始化為零。
優(yōu)選地,所述賦予所述第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)所述第一客戶端獲取所述目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)所述目標(biāo)聚合文件進(jìn)行碎片整理,包括:
賦予所述第一客戶端對(duì)所述目標(biāo)聚合文件的讀寫操作的獨(dú)享權(quán)限;
通過(guò)所述第一客戶端獲取所述目標(biāo)聚合文件的當(dāng)前偏移量的位置;
從該當(dāng)前偏移量的位置開(kāi)始讀取所述目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象,對(duì)該對(duì)象進(jìn)行碎片整理。
一種用于文件系統(tǒng)的文件碎片整理系統(tǒng),包括:
預(yù)處理模塊,用于預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量;
獲取模塊,用于獲取第一客戶端對(duì)目標(biāo)聚合文件的讀寫請(qǐng)求信息;
判斷模塊,用于判斷當(dāng)前是否有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作;
碎片處理模塊,用于在所述判斷模塊判定當(dāng)前沒(méi)有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作時(shí),賦予所述第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)所述第一客戶端獲取所述目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)所述目標(biāo)聚合文件進(jìn)行碎片整理;
偏移量更新模塊,用于在所述第一客戶端結(jié)束對(duì)所述目標(biāo)聚合文件的碎片整理操作時(shí),獲取所述第一客戶端讀取的文件長(zhǎng)度,并計(jì)算所述目標(biāo)聚合文件的偏移量和讀取的文件長(zhǎng)度之和作為所述目標(biāo)聚合文件新的偏移量進(jìn)行偏移量更新。
優(yōu)選地,所述預(yù)處理模塊包括:
偏移量建立單元,用于預(yù)先在各聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中擴(kuò)展一個(gè)用于記錄客戶端讀取進(jìn)度的偏移量;
偏移量初始化單元,用于將各聚合文件的偏移量初始化為零。
優(yōu)選地,所述碎片處理模塊包括:
授權(quán)單元,用于賦予所述第一客戶端對(duì)所述目標(biāo)聚合文件的讀寫操作的獨(dú)享權(quán)限;
位置讀取單元,用于通過(guò)所述第一客戶端獲取所述目標(biāo)聚合文件的當(dāng)前偏移量的位置;
碎片整理單元,用于從該當(dāng)前偏移量的位置開(kāi)始讀取所述目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象,對(duì)該對(duì)象進(jìn)行碎片整理。
與現(xiàn)有技術(shù)相比,上述技術(shù)方案具有以下優(yōu)點(diǎn):
本發(fā)明所提供的一種用于文件系統(tǒng)的文件碎片整理方法,包括:預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量;獲取第一客戶端對(duì)目標(biāo)聚合文件的讀寫請(qǐng)求信息;判斷當(dāng)前是否有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作;若否,則賦予第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)第一客戶端獲取目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)目標(biāo)聚合文件進(jìn)行碎片整理;在第一客戶端結(jié)束對(duì)目標(biāo)聚合文件的碎片整理操作時(shí),獲取第一客戶端讀取的文件長(zhǎng)度,并計(jì)算目標(biāo)聚合文件的偏移量和讀取的文件長(zhǎng)度之和作為目標(biāo)聚合文件新的偏移量進(jìn)行偏移量更新。當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行讀取以進(jìn)行碎片整理時(shí),該客戶端被賦予讀寫?yīng)毾頇?quán)限,此時(shí)其他的客戶端沒(méi)有權(quán)限對(duì)該聚合文件進(jìn)行讀寫操作,而每當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行碎片整理操作,該聚合文件的偏移量會(huì)標(biāo)記以被讀取過(guò)的進(jìn)度,從而在其他客戶端對(duì)該聚合文件讀取時(shí),由更新后的偏移量進(jìn)行讀取,從而避免了多個(gè)客戶端對(duì)同一個(gè)源文件的重復(fù)讀取,大大提高了聚合文件碎片整理的效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明一種具體實(shí)施方式所提供的用于文件系統(tǒng)的文件碎片整理方法流程圖;
圖2為本發(fā)明一種具體實(shí)施方式所提供的用于文件系統(tǒng)的文件碎片整理系統(tǒng)結(jié)構(gòu)示意圖。
具體實(shí)施方式
本發(fā)明的核心是提供一種用于文件系統(tǒng)的文件碎片整理方法及系統(tǒng),可以避免在碎片整理過(guò)程中對(duì)同一個(gè)源文件重復(fù)處理。
為了使本發(fā)明的上述目的、特征和優(yōu)點(diǎn)能夠更為明顯易懂,下面結(jié)合附圖對(duì)本發(fā)明的具體實(shí)施方式做詳細(xì)的說(shuō)明。
在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來(lái)實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開(kāi)的具體實(shí)施的限制。
請(qǐng)參考圖1,圖1為本發(fā)明一種具體實(shí)施方式所提供的用于文件系統(tǒng)的文件碎片整理方法流程圖。
本發(fā)明的一種具體實(shí)施方式提供了一種用于文件系統(tǒng)的文件碎片整理方法,包括:
s11:預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量。
其中,預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量,包括:預(yù)先在各聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中擴(kuò)展一個(gè)用于記錄客戶端讀取進(jìn)度的偏移量;將各聚合文件的偏移量初始化為零。
s12:獲取第一客戶端對(duì)目標(biāo)聚合文件的讀寫請(qǐng)求信息。
s13:判斷當(dāng)前是否有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作。
s14:若否,則賦予第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)第一客戶端獲取目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)目標(biāo)聚合文件進(jìn)行碎片整理。
其中,賦予第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)第一客戶端獲取目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)目標(biāo)聚合文件進(jìn)行碎片整理,包括:賦予第一客戶端對(duì)目標(biāo)聚合文件的讀寫操作的獨(dú)享權(quán)限;通過(guò)第一客戶端獲取目標(biāo)聚合文件的當(dāng)前偏移量的位置;從該當(dāng)前偏移量的位置開(kāi)始讀取目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象,對(duì)該對(duì)象進(jìn)行碎片整理。
s15:在第一客戶端結(jié)束對(duì)目標(biāo)聚合文件的碎片整理操作時(shí),獲取第一客戶端讀取的文件長(zhǎng)度,并計(jì)算目標(biāo)聚合文件的偏移量和讀取的文件長(zhǎng)度之和作為目標(biāo)聚合文件新的偏移量進(jìn)行偏移量更新。
在本實(shí)施方式中,在聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中擴(kuò)展一個(gè)字段以記錄客戶端讀到的偏移量,在客戶端打開(kāi)聚合文件時(shí),獲取偏移量,從偏移量的位置讀取文件,并將偏移量加上讀取的文件的長(zhǎng)度更新偏移量,最后關(guān)閉文件。這樣,其他客戶端讀取該聚合文件時(shí)獲取到的是更新后的偏移量,讀取的內(nèi)容也是緊跟著上一個(gè)客戶端讀取的內(nèi)容,這在多客戶端讀取文件的過(guò)程中避免了重復(fù)讀或漏讀的可能性。
需要說(shuō)明的是,所謂的第一客戶端可以是任一客戶端,“第一”只是為了區(qū)分此時(shí)讀取目標(biāo)聚合文件的客戶端和其他客戶端。
在本實(shí)施方式中,聚合文件是由多個(gè)固定大小的對(duì)象obj組成,每個(gè)對(duì)象obj由多個(gè)源文件組成,源文件大小限定小于對(duì)象obj的大小,以源文件最大為512kb為例,當(dāng)在客戶端寫小于512kb的小源文件時(shí),源文件數(shù)據(jù)不直接下盤,而是被打包到聚合文件中的一個(gè)對(duì)象obj中,具體下盤時(shí)間由聚合文件決定。
當(dāng)一個(gè)客戶端以讀寫的方式打開(kāi)聚合文件時(shí),在關(guān)閉該聚合文件之前,該客戶端擁有讀寫?yīng)毾頇?quán)限,禁止其他的客戶端對(duì)該聚合文件進(jìn)行讀寫操作,該客戶端獲取聚合文件的偏移量,在聚合文件首次被讀取時(shí)偏移量為0,從偏移量位置開(kāi)始讀取一個(gè)對(duì)象obj,如4mb長(zhǎng)度的對(duì)象,偏移量則增加4mb的長(zhǎng)度,更新偏移量的信息后關(guān)閉聚合文件,在此期間,其他的客戶端進(jìn)入等待或處理其他業(yè)務(wù)。也就是說(shuō)聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中的偏移量只能在聚合文件被打開(kāi)的時(shí)候修改。
在本實(shí)施方式中,當(dāng)一個(gè)客戶端讀取目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象時(shí),可以由多個(gè)客戶端順序進(jìn)行文件的讀取進(jìn)行碎片整理。如第一個(gè)客戶端整理完一個(gè)固定長(zhǎng)度的聚合文件對(duì)象,則下一個(gè)客戶端順序進(jìn)行下一個(gè)對(duì)象的碎片整理。當(dāng)偏移量的不小于聚合文件的總大小時(shí),表面該聚合文件已經(jīng)被全部讀取出來(lái),多客戶端順序讀取聚合文件的流程也就結(jié)束了。
當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行讀取以進(jìn)行碎片整理時(shí),該客戶端被賦予讀寫?yīng)毾頇?quán)限,此時(shí)其他的客戶端沒(méi)有權(quán)限對(duì)該聚合文件進(jìn)行讀寫操作,而每當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行碎片整理操作,該聚合文件的偏移量會(huì)標(biāo)記已被讀取過(guò)的進(jìn)度,從而在其他客戶端對(duì)該聚合文件讀取時(shí),由更新后的偏移量進(jìn)行讀取,從而避免了多個(gè)客戶端對(duì)同一個(gè)源文件的重復(fù)讀取,大大提高了聚合文件碎片整理的效率。
請(qǐng)參考圖2,圖2為本發(fā)明一種具體實(shí)施方式所提供的用于文件系統(tǒng)的文件碎片整理系統(tǒng)結(jié)構(gòu)示意圖。
相應(yīng)地,本發(fā)明一種實(shí)施方式還提供了一種用于文件系統(tǒng)的文件碎片整理系統(tǒng),包括:預(yù)處理模塊21,用于預(yù)先在各聚合文件中設(shè)置一個(gè)用于標(biāo)識(shí)聚合文件自身已被讀取的進(jìn)度的偏移量;獲取模塊22,用于獲取第一客戶端對(duì)目標(biāo)聚合文件的讀寫請(qǐng)求信息;判斷模塊23,用于判斷當(dāng)前是否有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作;碎片處理模塊24,用于在判斷模塊判定當(dāng)前沒(méi)有其他客戶端對(duì)該目標(biāo)聚合文件進(jìn)行讀寫操作時(shí),賦予第一客戶端讀寫?yīng)毾頇?quán)限,通過(guò)第一客戶端獲取目標(biāo)聚合文件的偏移量,并從該偏移量的位置開(kāi)始對(duì)目標(biāo)聚合文件進(jìn)行碎片整理;偏移量更新模塊25,用于在第一客戶端結(jié)束對(duì)目標(biāo)聚合文件的碎片整理操作時(shí),獲取第一客戶端讀取的文件長(zhǎng)度,并計(jì)算目標(biāo)聚合文件的偏移量和讀取的文件長(zhǎng)度之和作為目標(biāo)聚合文件新的偏移量進(jìn)行偏移量更新。
其中,預(yù)處理模塊包括:偏移量建立單元,用于預(yù)先在各聚合文件的元數(shù)據(jù)或擴(kuò)展屬性中擴(kuò)展一個(gè)用于記錄客戶端讀取進(jìn)度的偏移量;偏移量初始化單元,用于將各聚合文件的偏移量初始化為零。
碎片處理模塊包括:授權(quán)單元,用于賦予第一客戶端對(duì)目標(biāo)聚合文件的讀寫操作的獨(dú)享權(quán)限;位置讀取單元,用于通過(guò)第一客戶端獲取目標(biāo)聚合文件的當(dāng)前偏移量的位置;碎片整理單元,用于從該當(dāng)前偏移量的位置開(kāi)始讀取目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象,對(duì)該對(duì)象進(jìn)行碎片整理。
在本實(shí)施方式中,當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行讀取以進(jìn)行碎片整理時(shí),該客戶端被賦予讀寫?yīng)毾頇?quán)限,此時(shí)其他的客戶端沒(méi)有權(quán)限對(duì)該聚合文件進(jìn)行讀寫操作,而每當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行碎片整理操作,該聚合文件的偏移量會(huì)標(biāo)記已被讀取過(guò)的進(jìn)度,從而在其他客戶端對(duì)該聚合文件讀取時(shí),由更新后的偏移量進(jìn)行讀取,從而避免了多個(gè)客戶端對(duì)同一個(gè)源文件的重復(fù)讀取,大大提高了聚合文件碎片整理的效率。
當(dāng)一個(gè)客戶端讀取目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象時(shí),可以由多個(gè)客戶端順序進(jìn)行文件的讀取進(jìn)行碎片整理。如第一個(gè)客戶端整理完一個(gè)固定長(zhǎng)度的聚合文件對(duì)象,則下一個(gè)客戶端順序進(jìn)行下一個(gè)對(duì)象的碎片整理。當(dāng)偏移量的不小于聚合文件的總大小時(shí),表面該聚合文件已經(jīng)被全部讀取出來(lái),多客戶端順序讀取聚合文件的流程也就結(jié)束了。多客戶端順序讀取文件的方法在文件的元數(shù)據(jù)或擴(kuò)展屬性中標(biāo)記讀取進(jìn)度,解決了不同客戶端同時(shí)讀同一個(gè)文件時(shí)重讀或漏讀數(shù)據(jù)的問(wèn)題。
綜上所述,本發(fā)明所提供的用于文件系統(tǒng)的文件碎片整理方法和系統(tǒng),當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行讀取以進(jìn)行碎片整理時(shí),該客戶端被賦予讀寫?yīng)毾頇?quán)限,此時(shí)其他的客戶端沒(méi)有權(quán)限對(duì)該聚合文件進(jìn)行讀寫操作,而每當(dāng)一個(gè)客戶端對(duì)一個(gè)聚合文件進(jìn)行碎片整理操作,該聚合文件的偏移量會(huì)標(biāo)記已被讀取過(guò)的進(jìn)度,從而在其他客戶端對(duì)該聚合文件讀取時(shí),由更新后的偏移量進(jìn)行讀取,從而避免了多個(gè)客戶端對(duì)同一個(gè)源文件的重復(fù)讀取,大大提高了聚合文件碎片整理的效率。尤其是當(dāng)一個(gè)客戶端讀取目標(biāo)聚合文件中的一個(gè)固定長(zhǎng)度的對(duì)象時(shí),可以由多個(gè)客戶端順序進(jìn)行文件的讀取進(jìn)行碎片整理。多客戶端順序讀取文件的方法在文件的元數(shù)據(jù)或擴(kuò)展屬性中標(biāo)記讀取進(jìn)度,解決了不同客戶端同時(shí)讀同一個(gè)文件時(shí)重讀或漏讀數(shù)據(jù)的問(wèn)題。
以上對(duì)本發(fā)明所提供的一種用于文件系統(tǒng)的文件碎片整理方法和系統(tǒng)進(jìn)行了詳細(xì)介紹。本文中應(yīng)用了具體個(gè)例對(duì)本發(fā)明的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本發(fā)明的方法及其核心思想。應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明原理的前提下,還可以對(duì)本發(fā)明進(jìn)行若干改進(jìn)和修飾,這些改進(jìn)和修飾也落入本發(fā)明權(quán)利要求的保護(hù)范圍內(nèi)。