本發(fā)明涉及分布式存儲系統(tǒng)技術(shù)領(lǐng)域,更具體地說,涉及一種文件刪除方法及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)時(shí)代的到來,微博、微信、網(wǎng)購等面向普通互聯(lián)網(wǎng)用戶的網(wǎng)站正在蓬勃興起,互聯(lián)網(wǎng)界的巨頭公司向數(shù)以億計(jì)的用戶提供著基于互聯(lián)網(wǎng)的各種服務(wù)。遍布世界各地的互聯(lián)網(wǎng)用戶每天都在網(wǎng)上發(fā)布信息,他們產(chǎn)生的這些數(shù)據(jù)是個(gè)人計(jì)算機(jī)的數(shù)據(jù)量的數(shù)倍。
為了隨時(shí)應(yīng)對激增的用戶請求,越來越多的公司采用分布式存儲系統(tǒng)。分布式存儲系統(tǒng)具有高可靠性、高可用性和高擴(kuò)展性,可以避免由于單個(gè)節(jié)點(diǎn)失效而使整個(gè)系統(tǒng)崩潰的危險(xiǎn)。傳統(tǒng)方案中,當(dāng)多個(gè)客戶端同時(shí)訪問分布式文件系統(tǒng),文件系統(tǒng)會記錄每一個(gè)文件的索引節(jié)點(diǎn)的計(jì)數(shù),當(dāng)索引節(jié)點(diǎn)引用計(jì)數(shù)為0時(shí),回收線程會把該文件刪除。但是如果編寫客戶端程序的開發(fā)人員因?yàn)槟承┰蛲浟酸尫乓茫瑢?dǎo)致后端的文件永遠(yuǎn)無法刪除。因此,如何有效的對分布式存儲系統(tǒng)中的文件進(jìn)行刪除是一項(xiàng)亟待解決的問題。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明的目的在于提供一種文件刪除方法及系統(tǒng),能夠有效的對分布式存儲系統(tǒng)中的文件進(jìn)行刪除,能夠有效解決系統(tǒng)空間不釋放的問題。
為實(shí)現(xiàn)上述目的,本發(fā)明提供如下技術(shù)方案:
一種文件刪除方法,應(yīng)用于分布式存儲系統(tǒng),所述方法包括:
將所述分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用所述分布式存儲系統(tǒng)的接口讀寫文件;
所述分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至所述客戶端;
基于所述索引節(jié)點(diǎn)指針刪除所述分布式存儲系統(tǒng)中的文件。
優(yōu)選地,所述索引節(jié)點(diǎn)指針為智能指針。
優(yōu)選地,所述基于所述索引節(jié)點(diǎn)指針刪除所述分布式存儲系統(tǒng)中的文件具體為:
智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類共享同一指針的對象;
創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1,當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);
對一個(gè)對象進(jìn)行賦值是,賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),并增加右操作數(shù)所指對象的引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除對象;
在調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除基礎(chǔ)對象。
一種文件刪除系統(tǒng),應(yīng)用于分布式存儲系統(tǒng),所述系統(tǒng)包括:
調(diào)用模塊,用于將所述分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用所述分布式存儲系統(tǒng)的接口讀寫文件;
分配模塊,用于所述分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至所述客戶端;
刪除模塊,用于基于所述索引節(jié)點(diǎn)指針刪除所述分布式存儲系統(tǒng)中的文件。
優(yōu)選地,所述索引節(jié)點(diǎn)指針為智能指針。
優(yōu)選地,所述刪除模塊具體用于:
智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類共享同一指針的對象;
創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1,當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);
對一個(gè)對象進(jìn)行賦值是,賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),并增加右操作數(shù)所指對象的引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除對象;
在調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除基礎(chǔ)對象。
由上述技術(shù)方案可知,本發(fā)明提供了一種文件刪除方法,當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件,然后分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端,然后基于索引節(jié)點(diǎn)指針刪除分布式存儲系統(tǒng)中的文件,能夠有效的對分布式存儲系統(tǒng)中的文件進(jìn)行刪除,能夠有效解決系統(tǒng)空間不釋放的問題。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
圖1為本發(fā)明公開的一種文件刪除方法實(shí)施例1的方法流程圖;
圖2為本發(fā)明公開的一種文件刪除方法實(shí)施例2的方法流程圖;
圖3為本發(fā)明公開的一種文件刪除系統(tǒng)實(shí)施例1的結(jié)構(gòu)示意圖;
圖4為本發(fā)明公開的一種文件刪除系統(tǒng)實(shí)施例2的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
為了更加特定地強(qiáng)調(diào)實(shí)施的獨(dú)立性,本說明書涉及許多模塊或單元。舉例而言,模塊或單元可由硬件電路實(shí)現(xiàn),該硬件電路包括特制vlsi電路或門陣列,比如邏輯芯片、晶體管,或其它組件。模塊或單元也可在可編程的硬設(shè)備中實(shí)現(xiàn),比如場效可編程門陣列、可編程陣列邏輯、可編程邏輯設(shè)備等等。
模塊或單元也可在藉由各種形式的處理器所執(zhí)行的軟件中實(shí)現(xiàn)。比如說,一可執(zhí)行碼模塊可包括一個(gè)或多個(gè)實(shí)體的或邏輯的計(jì)算機(jī)指令區(qū)塊,該區(qū)塊可能形成為,比如說,對象、程序或函數(shù)。然而,鑒別模塊或單元的可執(zhí)行部分不需要物理上放置在一起,但可由存于不同位置的不同指令所組成,當(dāng)邏輯上組合在一起時(shí),形成模塊或單元且達(dá)到該模塊或單元所要求的目的。
實(shí)際上,可執(zhí)行碼模塊或單元可以是一單一指令或多個(gè)指令,甚至可以分布在位于不同的程序的數(shù)個(gè)不同的碼區(qū)段,并且橫跨數(shù)個(gè)存儲設(shè)備。同樣地,操作數(shù)據(jù)可被辨識及顯示于此模塊或單元中,并且可以以任何合適的形式實(shí)施且在任何合適的數(shù)據(jù)結(jié)構(gòu)形式內(nèi)組織。操作數(shù)據(jù)可以集合成單一數(shù)據(jù)集,或可分布在具有不同的存儲設(shè)備的不同的位置,且至少部分地只以電子信號方式存在于一系統(tǒng)或網(wǎng)絡(luò)。
本說明書所提及的“實(shí)施例”或類似用語表示與實(shí)施例有關(guān)的特性、結(jié)構(gòu)或特征,包括在本發(fā)明的至少一實(shí)施例中。因此,本說明書所出現(xiàn)的用語“在一實(shí)施例中”、“在實(shí)施例中”以及類似用語可能但不必然都指向相同實(shí)施例。
再者,本發(fā)明所述特性、結(jié)構(gòu)或特征可以以任何方式結(jié)合在一個(gè)或多個(gè)實(shí)施例中。以下說明將提供許多特定的細(xì)節(jié),比如編程序、軟件模塊、用戶選擇、網(wǎng)絡(luò)交易、數(shù)據(jù)庫查詢、數(shù)據(jù)庫結(jié)構(gòu)、硬件模塊、硬件電路、硬件芯片等例子,以提供對本發(fā)明實(shí)施例的了解。然而相關(guān)領(lǐng)域的普通技術(shù)人員將看出本發(fā)明,即使沒有利用其中一個(gè)或多個(gè)特定細(xì)節(jié),或利用其它方法、組件、材料等亦可實(shí)施。另一方面,為避免混淆本發(fā)明,公知的結(jié)構(gòu)、材料或操作并沒有詳細(xì)描述。
如圖1所示,為本發(fā)明公開的一種文件刪除方法實(shí)施例1的流程圖,該方法應(yīng)用于分布式存儲系統(tǒng),本方法包括以下步驟:
s101、將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件;
當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,然后客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件。
s102、分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端;
然后分布式存儲系統(tǒng)給客戶端分配inode指針。
s103、基于索引節(jié)點(diǎn)指針刪除分布式存儲系統(tǒng)中的文件。
然后根據(jù)分配的inode指針對分布式存儲系統(tǒng)中的文件進(jìn)行刪除處理,其中,分配的inode指針為智能指針。智能指針是存儲指向動態(tài)分配對象指針的類,用于生存期控制,能夠確保自動正確的銷毀動態(tài)分配的對象,防止內(nèi)存泄露,它的一種通用實(shí)現(xiàn)技術(shù)是使用引用計(jì)數(shù)。
綜上所述,在上述實(shí)施例中,當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件,然后分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端,然后基于索引節(jié)點(diǎn)指針刪除分布式存儲系統(tǒng)中的文件,能夠有效的對分布式存儲系統(tǒng)中的文件進(jìn)行刪除,能夠有效解決系統(tǒng)空間不釋放的問題。
如圖2所示,為本發(fā)明公開的一種文件刪除方法實(shí)施例2的流程圖,該方法應(yīng)用于分布式存儲系統(tǒng),本方法包括以下步驟:
s201、將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件;
當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,然后客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件。
s202、分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端;
然后分布式存儲系統(tǒng)給客戶端分配inode指針。
s203、智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類共享同一指針的對象;
創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1,當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);
對一個(gè)對象進(jìn)行賦值是,賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),并增加右操作數(shù)所指對象的引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除對象;
在調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除基礎(chǔ)對象。
智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類有多少個(gè)對象共享同一指針。每次創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1;當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);對一個(gè)對象進(jìn)行賦值時(shí),賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),如果引用計(jì)數(shù)為減至0,則刪除對象,并增加右操作數(shù)所指對象的引用計(jì)數(shù);調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),如果引用計(jì)數(shù)減至0,則刪除基礎(chǔ)對象。
文件系統(tǒng)后端先通過智能指針分配一個(gè)全局的inode,當(dāng)客戶端訪問文件系統(tǒng)時(shí),該客戶端獲取該智能指針的引用,即引用計(jì)數(shù)自動加1。當(dāng)客戶端自動釋放或者與文件系統(tǒng)的鏈接斷開時(shí),inode的引用自動減1。
通過定義一個(gè)全局空間來保存所以inode的狀態(tài)。例如,采用以下的方式:
shared_ptr<inode>factory(targ){
returnmake_shared<inode>(arg);
}
factory是文件系統(tǒng)為所有客戶端分配inode的函數(shù),所有的客戶端都可以共享。
voiduse_inode(targ){
shared_ptr<inode>i=factory(arg);
}
use_inode是文件系統(tǒng)為某個(gè)客戶端分配inode的函數(shù),客戶端之間是獨(dú)立的,即arg包括客戶端端信息,比如ip、socket等。
綜上所述,本發(fā)明提供的一種文件刪除方法,基于智能指針,可以有效解決空間不釋放的問題。
如圖3所示,為本發(fā)明公開的一種文件刪除系統(tǒng)實(shí)施例1的結(jié)構(gòu)示意圖,該系統(tǒng)應(yīng)用于分布式存儲系統(tǒng),本系統(tǒng)包括:
調(diào)用模塊301,用于將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件;
當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,然后客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件。
分配模塊302,用于分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端;
然后分布式存儲系統(tǒng)給客戶端分配inode指針。
刪除模塊303,用于基于索引節(jié)點(diǎn)指針刪除分布式存儲系統(tǒng)中的文件。
然后根據(jù)分配的inode指針對分布式存儲系統(tǒng)中的文件進(jìn)行刪除處理,其中,分配的inode指針為智能指針。智能指針是存儲指向動態(tài)分配對象指針的類,用于生存期控制,能夠確保自動正確的銷毀動態(tài)分配的對象,防止內(nèi)存泄露,它的一種通用實(shí)現(xiàn)技術(shù)是使用引用計(jì)數(shù)。
綜上所述,在上述實(shí)施例中,當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件,然后分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端,然后基于索引節(jié)點(diǎn)指針刪除分布式存儲系統(tǒng)中的文件,能夠有效的對分布式存儲系統(tǒng)中的文件進(jìn)行刪除,能夠有效解決系統(tǒng)空間不釋放的問題。
如圖4所示,為本發(fā)明公開的一種文件刪除系統(tǒng)實(shí)施例2的結(jié)構(gòu)示意圖,該系統(tǒng)應(yīng)用于分布式存儲系統(tǒng),本系統(tǒng)包括:
調(diào)用模塊401,用于將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件;
當(dāng)需要對分布式存儲系統(tǒng)中的文件進(jìn)行刪除時(shí),首先將分布式存儲系統(tǒng)作為存儲系統(tǒng)的后端,然后客戶端調(diào)用分布式存儲系統(tǒng)的接口讀寫文件。
分配模塊402,用于分布式存儲系統(tǒng)分配索引節(jié)點(diǎn)指針至客戶端;
然后分布式存儲系統(tǒng)給客戶端分配inode指針。
刪除模塊403,用于智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類共享同一指針的對象;
創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1,當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);
對一個(gè)對象進(jìn)行賦值是,賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),并增加右操作數(shù)所指對象的引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除對象;
在調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),當(dāng)引用計(jì)數(shù)減至0時(shí),刪除基礎(chǔ)對象。
智能指針類將一個(gè)計(jì)數(shù)器與類指向的對象相關(guān)聯(lián),引用計(jì)數(shù)跟蹤該類有多少個(gè)對象共享同一指針。每次創(chuàng)建類的新對象時(shí),初始化指針并將引用計(jì)數(shù)置為1;當(dāng)對象作為另一對象的副本而創(chuàng)建時(shí),拷貝構(gòu)造函數(shù)拷貝指針并增加與之相應(yīng)的引用計(jì)數(shù);對一個(gè)對象進(jìn)行賦值時(shí),賦值操作符減少左操作數(shù)所指對象的引用計(jì)數(shù),如果引用計(jì)數(shù)為減至0,則刪除對象,并增加右操作數(shù)所指對象的引用計(jì)數(shù);調(diào)用析構(gòu)函數(shù)時(shí),構(gòu)造函數(shù)減少引用計(jì)數(shù),如果引用計(jì)數(shù)減至0,則刪除基礎(chǔ)對象。
文件系統(tǒng)后端先通過智能指針分配一個(gè)全局的inode,當(dāng)客戶端訪問文件系統(tǒng)時(shí),該客戶端獲取該智能指針的引用,即引用計(jì)數(shù)自動加1。當(dāng)客戶端自動釋放或者與文件系統(tǒng)的鏈接斷開時(shí),inode的引用自動減1。
通過定義一個(gè)全局空間來保存所以inode的狀態(tài)。例如,采用以下的方式:
shared_ptr<inode>factory(targ){
returnmake_shared<inode>(arg);
}
factory是文件系統(tǒng)為所有客戶端分配inode的函數(shù),所有的客戶端都可以共享。
voiduse_inode(targ){
shared_ptr<inode>i=factory(arg);
}
use_inode是文件系統(tǒng)為某個(gè)客戶端分配inode的函數(shù),客戶端之間是獨(dú)立的,即arg包括客戶端端信息,比如ip、socket等。
綜上所述,本發(fā)明提供的一種文件刪除系統(tǒng),基于智能指針,可以有效解決空間不釋放的問題。
本說明書中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說明的都是與其它實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見即可。
對所公開的實(shí)施例的上述說明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對這些實(shí)施例的多種修改對本領(lǐng)域的專業(yè)技術(shù)人員來說將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。