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