專利名稱:一種磁盤空間管理方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,特別涉及一種磁盤空間管理方法及對應(yīng)的裝置。
背景技術(shù):
隨著現(xiàn)代信息產(chǎn)業(yè)的不斷深入發(fā)展,對于信息的集成和共享的需求也變得日益迫切。XML(全稱Extensible Markup Language),是一種專門為internet而設(shè)計的一種標(biāo)記語言。XML的重點不在于數(shù)據(jù)的形式本身,而在于管理數(shù)據(jù)信息,因此,XML使得不同數(shù)據(jù)庫模式的統(tǒng)一成為可能,為異構(gòu)數(shù)據(jù)庫的集成問題提供了途徑。因此,XML在近幾年得到了發(fā)展和廣泛的應(yīng)用。XML數(shù)據(jù)庫管理系統(tǒng)(XMLDBMS)也是近年來發(fā)展迅速的一種新型的數(shù)據(jù)庫管理系統(tǒng),它以存儲和檢索符合W3C標(biāo)準(zhǔn)的XML文檔數(shù)據(jù)為目標(biāo)的數(shù)據(jù)庫管理系統(tǒng),并且可以更新XML文檔。由于它存儲的對象是XML文檔庫,因此XMLDBMS本質(zhì)上就是一種XML文檔庫。
存儲引擎是數(shù)據(jù)庫管理系統(tǒng)(DBMS)中的核心子系統(tǒng),其用于數(shù)據(jù)表的創(chuàng)建,刪除,數(shù)據(jù)表的存儲空間管理和數(shù)據(jù)的查詢,插入,更新,刪除等基本的數(shù)據(jù)管理操作,同時實現(xiàn)事務(wù)語義。其中,數(shù)據(jù)表的磁盤空間管理(DSM)是存儲引擎的核心功能之一,其目標(biāo)是讓上層的數(shù)據(jù)訪問方法模塊可以實現(xiàn)高性能的數(shù)據(jù)查詢和修改操作。磁盤空間管理模塊的工作機(jī)制依賴于磁盤的工作機(jī)制。目前,由于大量使用的磁盤出現(xiàn)的較大的性能瓶頸是尋道時間,而后是旋轉(zhuǎn)時間,所以磁盤空間管理模塊應(yīng)該盡量將一個數(shù)據(jù)表的數(shù)據(jù)放置在同一個磁道的連續(xù)的扇區(qū)上面。在最理想的情況下,每一個數(shù)據(jù)表的所有數(shù)據(jù)塊都連續(xù)地放置在若干個磁道上面,這樣,可以最大限度地實現(xiàn)數(shù)據(jù)讀寫訪問操作。存儲引擎的數(shù)據(jù)訪問方法模塊需要頻繁地獲取當(dāng)前數(shù)據(jù)表的數(shù)據(jù)塊的塊數(shù),此操作的如果利用文件系統(tǒng)固有的功能實現(xiàn)的話固然簡單,但是,由于在此操作的過程中會涉及到頻繁的IO操作,因此會出現(xiàn)性能低下的缺點。因此,存儲引擎迫切需要一種以更加高效的方式維護(hù)每個數(shù)據(jù)表文件的當(dāng)前總塊
數(shù)信息。
發(fā)明內(nèi)容
為解決上述問題,本發(fā)明技術(shù)方案提供一種磁盤空間管理方法,其用于數(shù)據(jù)庫管理系統(tǒng)中的存儲弓I擎的數(shù)據(jù)表文件的磁盤空間的管理,包括在內(nèi)存中設(shè)置文件信息表,所述文件信息表為內(nèi)存中的后臺線程所共享;在所述文件信息表中存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息;利用所述文件信息表,查找和擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息??蛇x地,在內(nèi)存中設(shè)置所述的文件信息表具體為在所述存儲引擎初始化時,初始化所述文件信息表為空表;若文件信息表文件中不存在一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息時,則調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件
信息表。可選地,所述的文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值。其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表的數(shù)據(jù)塊信息。可選地,所述的數(shù)據(jù)塊信息包括所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已經(jīng)使用的數(shù)據(jù)塊數(shù)??蛇x地,利用所述文件信息表查找數(shù)據(jù)表文件的數(shù)據(jù)塊信息具體包括以所述RelationID為鍵值在所述文件信息表中查找所述數(shù)據(jù)表文件的FileInfo 數(shù)據(jù)結(jié)構(gòu);從所述FileInfo數(shù)據(jù)結(jié)構(gòu)中取出所述數(shù)據(jù)表文件的已使用數(shù)據(jù)塊數(shù)??蛇x地,利用所述文件信息表擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息具體包括比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)若所述已使用數(shù)據(jù)塊數(shù)小于所述總數(shù)據(jù)塊數(shù),則直接遞增所述已使用數(shù)據(jù)塊數(shù);若所述已使用數(shù)據(jù)塊數(shù)等于所述總數(shù)據(jù)塊數(shù),則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)??蛇x地,所述的一次性為所述數(shù)據(jù)表文件增加的數(shù)據(jù)塊數(shù)為所述總數(shù)據(jù)塊數(shù)的線性函數(shù)。本發(fā)明還提供了一種磁盤空間管理裝置,用于與所述存儲引擎中的數(shù)據(jù)訪問方法模塊交互,包括文件信息表創(chuàng)建模塊,用于在內(nèi)存中設(shè)置文件信息表;文件信息表,用于存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息;磁盤空間管理模塊,用于利用所述文件信息表獲取和擴(kuò)展所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊,以提供給上層數(shù)據(jù)訪問方法控制模塊使用??蛇x地,所述的文件信息表創(chuàng)建模塊具體用于在所述存儲引擎初始化時,初始化所述文件信息表為空表;當(dāng)需要查找文件信息表文件獲取一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息而不能時,調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件信息表。可選地,所述的文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值;其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表的數(shù)據(jù)塊信息??蛇x地,所述的數(shù)據(jù)塊信息包括總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)。可選地,所述的磁盤空間管理模塊進(jìn)一步包括數(shù)據(jù)塊信息獲取模塊,用于以所述RelationID為鍵值在所述文件信息表中查找所述數(shù)據(jù)表文件的FileInfo數(shù)據(jù)結(jié)構(gòu),并從所述FileInfo數(shù)據(jù)結(jié)構(gòu)中取出所述數(shù)據(jù)表文件的已使用數(shù)據(jù)塊數(shù)。數(shù)據(jù)塊擴(kuò)展模塊,用于比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)若所述已使用數(shù)據(jù)塊數(shù)小于所述總數(shù)據(jù)塊數(shù),則為所述數(shù)據(jù)表文件直接遞增數(shù)據(jù)塊,并更新所述文件信息表中的已使用數(shù)據(jù)塊數(shù);若所述已使用數(shù)據(jù)塊數(shù)等于所述總數(shù)據(jù)塊數(shù),則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)。可選地,所述的一次性為所述數(shù)據(jù)表文件增加的若干數(shù)據(jù)塊數(shù)為所述總數(shù)據(jù)塊數(shù)的線性函數(shù)。與現(xiàn)有技術(shù)相比,上述技術(shù)方案具有下優(yōu)點—方面,本發(fā)明的技術(shù)方案由于將文件信息表設(shè)置在內(nèi)存中,在利用本發(fā)明的磁盤管理方法進(jìn)行數(shù)據(jù)表文件的數(shù)據(jù)塊數(shù)的獲取操作時,將現(xiàn)有技術(shù)中擴(kuò)展數(shù)據(jù)表時需要進(jìn)行IO操作轉(zhuǎn)換成為可以忽略的內(nèi)存操作,在很大程度上減少了擴(kuò)展數(shù)據(jù)表所導(dǎo)致的IO開銷,節(jié)省了系統(tǒng)資源,另一方面,由于在擴(kuò)展數(shù)據(jù)表時,一次性為數(shù)據(jù)表文件增加若干數(shù)據(jù)塊而非一個數(shù)據(jù)塊,使得各個數(shù)據(jù)表文件的數(shù)據(jù)塊盡可能連續(xù)地放置在磁盤的塊中,從而在很大限度地實現(xiàn)數(shù)據(jù)的讀寫和訪問操作,提高了系統(tǒng)的性能。
圖I是本發(fā)明實施方式的磁盤空間管理方法的流程圖;圖2是本發(fā)明實施方式的磁盤空間管理裝置的組成結(jié)構(gòu)框架示意圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點能夠更為明顯易懂,下面結(jié)合附圖對本發(fā)明的具體實施方式
做詳細(xì)的說明。在以下描述中闡述了具體細(xì)節(jié)以便于充分理解本發(fā)明。但是本發(fā)明能夠以多種不同于在此描述的其它方式來實施,本領(lǐng)域技術(shù)人員可以在不違背本發(fā)明內(nèi)涵的情況下做類似推廣。因此本發(fā)明不受下面公開的具體實施方式
的限制。我們知道,存儲引擎的核心功能之一是磁盤空間管理,其目標(biāo)是讓上層的數(shù)據(jù)訪問方法模塊可以實現(xiàn)高性能的數(shù)據(jù)查詢和修改操作。而數(shù)據(jù)訪問方法模塊通常情況下需要頻繁地獲取當(dāng)前數(shù)據(jù)表的數(shù)據(jù)塊數(shù)信息,從而才可實現(xiàn)數(shù)據(jù)的查詢和修改操作。但是,如果利用系統(tǒng)固有的功能來實現(xiàn)上述功能的話,一般會涉及到IO操作,這樣將會導(dǎo)致系統(tǒng)性能低下。為解決現(xiàn)有技術(shù)中的問題,本發(fā)明的發(fā)明人經(jīng)過研究,提出了一種基于磁盤空間管理方法。參閱圖1,圖I是本發(fā)明實施方式的磁盤空間管理的流程圖。本發(fā)明實施方式的磁盤空間管理方法,其用于數(shù)據(jù)庫管理系統(tǒng)中的存儲引擎的數(shù)據(jù)表文件的磁盤空間的管理,包括在內(nèi)存中設(shè)置文件信息表,所述文件信息表為內(nèi)存中的所有后臺線程所共享;在所述文件信息表中存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息;利用所述文件信息表,查找和擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息。其中,優(yōu)選地,本發(fā)明的實施方式的磁盤空間管理方法中,在內(nèi)存中創(chuàng)建文件信息表具體包括在所述存儲引擎初始化時,初始化所述文件信息表為空表;當(dāng)文件信息表文件中不存在一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息時,則調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件信息表。
文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值;其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息;而存儲在所述FileInfo數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)塊信息具體為總數(shù)據(jù)塊數(shù)(以下用M表示)和已使用數(shù)據(jù)塊數(shù)(以下用N表示)。首先,當(dāng)存儲引擎中的數(shù)據(jù)訪問方法模塊需要獲取一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息時,通過數(shù)據(jù)表文件的RelationID為鍵值查找相對應(yīng)的FileInfo數(shù)據(jù)結(jié)構(gòu),從而從中取出數(shù)據(jù)表文件當(dāng)前已使用的數(shù)據(jù)塊數(shù)N。而數(shù)據(jù)表文件當(dāng)前已使用的數(shù)據(jù)塊數(shù)N實際表示數(shù)據(jù)訪問方法已經(jīng)使用了的數(shù)據(jù)塊數(shù),也即是存已經(jīng)存儲數(shù)據(jù)的數(shù)據(jù)塊數(shù),其總是小于FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的相應(yīng)的總數(shù)據(jù)塊數(shù)M,而M-N個數(shù)據(jù)塊(例如,可以位于數(shù)據(jù)表文件的尾部)則是上層模塊即數(shù)據(jù)訪問方法模塊不知道的數(shù)據(jù)塊,而這些數(shù)據(jù)訪問方法模塊在需要擴(kuò)展數(shù)據(jù)表的時候,可以由數(shù)據(jù)訪問方法模塊進(jìn)一步加以利用。當(dāng)需要擴(kuò)展數(shù)據(jù)表文件時,數(shù)據(jù)訪問方法模塊通常只要求增加一個數(shù)據(jù)塊。此時, 本發(fā)明的實施方式的磁盤空間管理方法,首先比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)M和已使用數(shù)據(jù)塊數(shù)N:若所述已使用數(shù)據(jù)塊數(shù)N小于所述總數(shù)據(jù)塊數(shù)M,則表示數(shù)據(jù)表文件中有已經(jīng)分配好的數(shù)據(jù)塊可供使用,也即還有尚未被數(shù)據(jù)訪問方法是用的數(shù)據(jù)塊,此時,只需直接遞增已使用數(shù)據(jù)塊數(shù)N即可,同時更新FileInfo數(shù)據(jù)結(jié)構(gòu)中的已使用數(shù)據(jù)塊數(shù)N的數(shù)值。若所述已使用數(shù)據(jù)塊數(shù)N等于所述總數(shù)據(jù)塊數(shù)M,則表示需要為數(shù)據(jù)表文件分配更多的數(shù)據(jù)塊,本發(fā)明實施方式的磁盤管理方法則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)M的數(shù)值。其中,優(yōu)選地,本發(fā)明實施方式的磁盤管理方法一次性增加的數(shù)據(jù)塊數(shù)就可以是原FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)M的線性函數(shù),例如每次可以增加增加O. 5*M塊,這樣更新后的FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的M值就是原來的I. 5倍。這樣,由于在擴(kuò)展數(shù)據(jù)表時,一次性為數(shù)據(jù)表文件增加若干數(shù)據(jù)塊而非一個數(shù)據(jù)塊,使得各個數(shù)據(jù)表文件的數(shù)據(jù)塊盡可能連續(xù)地放置在磁盤的塊中,從而在很大限度地實現(xiàn)數(shù)據(jù)的讀寫和訪問操作,提高了系統(tǒng)的性能。同時,由于每一個數(shù)據(jù)表最初沒有任何數(shù)據(jù)塊,所以至少增加M0塊,以避免最初的數(shù)據(jù)塊增長緩慢。例如,每次至少增加128塊數(shù)據(jù)塊,這樣每次增加的數(shù)據(jù)塊數(shù)目X = Max (O. 5M,128)。參閱圖2,圖2為本發(fā)明實施方式的磁盤管理裝置的框架是示意圖。本發(fā)明實施方式的磁盤管理裝置,包括文件信息表創(chuàng)建模塊,用于在內(nèi)存中設(shè)置文件信息表;文件信息表,用于存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息;磁盤空間管理模塊,用于利用所述文件信息表獲取和擴(kuò)展所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊,以提供給上層數(shù)據(jù)訪問方法控制模塊使用。其中,優(yōu)選地,本發(fā)明實施方式的磁盤管理裝置中的文件信息表創(chuàng)建模塊具體用于在所述存儲引擎初始化時,初始化所述文件信息表為空表;當(dāng)文件信息表文件中不存在一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息時,調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件信息表。
其中,優(yōu)選地,本發(fā)明實施方式中的文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值。其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表的數(shù)據(jù)塊信息,F(xiàn)ileInfo數(shù)據(jù)結(jié)構(gòu)中所存儲的數(shù)據(jù)表文件的數(shù)據(jù)塊信息包括其中,優(yōu)選地,本發(fā)明實施方式中的磁盤空間管理模塊進(jìn)一步包括數(shù)據(jù)塊信息獲取模塊,用于以所述RelationID為鍵值在所述文件信息表中查找所述數(shù)據(jù)表文件的FileInfo數(shù)據(jù)結(jié)構(gòu),并從所述FileInfo數(shù)據(jù)結(jié)構(gòu)中取出所述數(shù)據(jù)表文件的已使用數(shù)據(jù)塊數(shù)。數(shù)據(jù)塊擴(kuò)展模塊,用于比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)若所述已使用數(shù)據(jù)塊數(shù)小于所述總數(shù)據(jù)塊數(shù),則為所述數(shù)據(jù)表文件直接遞增數(shù)據(jù)塊,并更新所述文件信息表中的已使用數(shù)據(jù)塊數(shù);若所述已使用數(shù)據(jù)塊數(shù)等于所述總數(shù)據(jù)塊數(shù),則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中所述數(shù)據(jù)表文件 的總數(shù)據(jù)塊數(shù)。 其中,優(yōu)選地,本發(fā)明實施方式中的數(shù)據(jù)塊擴(kuò)展模塊一次性增加的數(shù)據(jù)塊數(shù)就可以是原FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)M的線性函數(shù),例如每次可以增加增加O. 5*M塊,這樣更新后的FileInfo數(shù)據(jù)結(jié)構(gòu)中存儲的M值就是原來的I. 5倍。這樣,由于在擴(kuò)展數(shù)據(jù)表時,一次性為數(shù)據(jù)表文件增加若干數(shù)據(jù)塊而非一個數(shù)據(jù)塊,使得各個數(shù)據(jù)表文件的數(shù)據(jù)塊盡可能連續(xù)地放置在磁盤的塊中,從而在很大限度地實現(xiàn)數(shù)據(jù)的讀寫和訪問操作,提高了系統(tǒng)的性能。同時,由于每一個數(shù)據(jù)表最初沒有任何數(shù)據(jù)塊,所以至少增加M0塊,以避免最初的數(shù)據(jù)塊增長緩慢。例如,每次至少增加128塊數(shù)據(jù)塊,這樣每次增加的數(shù)據(jù)塊數(shù)目X = Max (O. 5M,128)。綜上所述,本發(fā)明技術(shù)方案具有下優(yōu)點一方面,由于文件信息表設(shè)置在內(nèi)存中,在利用本發(fā)明的磁盤管理方法進(jìn)行數(shù)據(jù)表文件的數(shù)據(jù)塊數(shù)的獲取操作時,將現(xiàn)有技術(shù)中擴(kuò)展數(shù)據(jù)表時需要進(jìn)行IO操作轉(zhuǎn)換成為可以忽略的內(nèi)存操作,在很大程度上減少了擴(kuò)展數(shù)據(jù)表所導(dǎo)致的IO開銷,節(jié)省了系統(tǒng)資源,另一方面,由于在擴(kuò)展數(shù)據(jù)表時,一次性為數(shù)據(jù)表文件增加若干數(shù)據(jù)塊而非一個數(shù)據(jù)塊,使得各個數(shù)據(jù)表文件的數(shù)據(jù)塊盡可能連續(xù)地放置在磁盤的塊中從而在很大限度地實現(xiàn)數(shù)據(jù)的讀寫和訪問操作,提高了系統(tǒng)的性能。應(yīng)當(dāng)理解的是這里所描述的方法和系統(tǒng)可以以各種形式的硬件、軟件、固件、專用處理機(jī)或者它們的組合實現(xiàn)。尤其是,至少本發(fā)明的一部分包括程序指令的應(yīng)用程序優(yōu)選實現(xiàn)。這些程序指令被確實地包括在一個或者多個程序存儲設(shè)備(包括但不限于硬盤,磁性軟盤,RAM, ROM,⑶,ROM等)里,并且可由任何包括適當(dāng)結(jié)構(gòu)的設(shè)備或者機(jī)器,例如一種具有處理器、內(nèi)存和輸入/輸出接口的通用數(shù)字計算機(jī)執(zhí)行。還應(yīng)當(dāng)理解由于附圖中描述的一些系統(tǒng)的組成部件和處理步驟優(yōu)選地以軟件實現(xiàn),所以,系統(tǒng)模塊(或者方法步驟的邏輯流程)之間的連接可能不同,這取決于本發(fā)明的編程方式。根據(jù)這里給出的指導(dǎo),相關(guān)領(lǐng)域的普通技術(shù)人員將能夠設(shè)計出本發(fā)明的這些以及類似的實施方式。以上公開了本發(fā)明的多個方面和實施方式,本領(lǐng)域的技術(shù)人員會明白本發(fā)明的其它方面和實施方式。本發(fā)明中公開的多個方面和實施方式只是用于舉例說明,并非是對本發(fā)明的限定,本發(fā)明的真正保護(hù)范圍和精神應(yīng)當(dāng)以權(quán)利要 求書為準(zhǔn)。
權(quán)利要求
1.一種磁盤空間管理方法,其用于數(shù)據(jù)庫管理系統(tǒng)中的存儲引擎的數(shù)據(jù)表文件的磁盤空間的管理,其特征在于,包括 在內(nèi)存中設(shè)置文件信息表,所述文件信息表為內(nèi)存中的后臺線程所共享; 在所述文件信息表中存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息; 利用所述文件信息表,查找和擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息。
2.如權(quán)利要求I所述的磁盤空間管理方法,其特征在于,在內(nèi)存中設(shè)置所述的文件信息表具體為 在所述存儲引擎初始化時,初始化所述文件信息表為空表; 若文件信息表文件中不存在一數(shù)據(jù)表文件的數(shù)據(jù)塊信息時,調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件信息表。
3.如權(quán)利要求I或2所述的磁盤空間管理方法,其特征在于,所述的文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值, 其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表的數(shù)據(jù)塊信息。
4.如權(quán)利要求I所述的磁盤空間管理方法,其特征在于,所述的數(shù)據(jù)塊信息包括所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已經(jīng)使用的數(shù)據(jù)塊數(shù)。
5.如權(quán)利要求3所述的磁盤空間管理方法,其特征在于,利用所述文件信息表查找數(shù)據(jù)表文件的數(shù)據(jù)塊信息具體包括 以所述RelationID為鍵值在所述文件信息表中查找所述數(shù)據(jù)表文件的FileInfo數(shù)據(jù)結(jié)構(gòu); 從所述FileInfo數(shù)據(jù)結(jié)構(gòu)中取出所述數(shù)據(jù)表文件的已使用數(shù)據(jù)塊數(shù)。
6.如權(quán)利要求I所述的磁盤空間管理方法,其特征在于,利用所述文件信息表擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息具體包括 比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù) 若所述已使用數(shù)據(jù)塊數(shù)小于所述總數(shù)據(jù)塊數(shù),則直接遞增所述已使用數(shù)據(jù)塊數(shù); 若所述已使用數(shù)據(jù)塊數(shù)等于所述總數(shù)據(jù)塊數(shù),則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)。
7.如權(quán)利要求I所述的磁盤空間管理方法,其特征在于,所述的一次性為所述數(shù)據(jù)表文件增加的數(shù)據(jù)塊數(shù)為所述總數(shù)據(jù)塊數(shù)的線性函數(shù)。
8.—種磁盤空間管理裝置,用于與所述存儲引擎中的數(shù)據(jù)訪問方法模塊交互,其特征在于,包括 文件信息表創(chuàng)建模塊,用于在內(nèi)存中設(shè)置文件信息表; 文件信息表,用于存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息; 磁盤空間管理模塊,用于利用所述文件信息表獲取和擴(kuò)展所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊,以提供給上層數(shù)據(jù)訪問方法控制模塊使用。
9.如權(quán)利要求8所述的磁盤空間管理裝置,其特征在于,所述的文件信息表創(chuàng)建模塊具體用于在所述存儲引擎初始化時,初始化所述文件信息表為空表;當(dāng)文件信息表不存在一個數(shù)據(jù)表文件的數(shù)據(jù)塊信息而不能時,調(diào)用操作系統(tǒng)的fseek系統(tǒng)獲取所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息,并所述獲取的數(shù)據(jù)塊信息存儲至所述文件信息表。
10.如權(quán)利要求8所述的磁盤空間管理裝置,其特征在于,所述的文件信息表為哈希表,以數(shù)據(jù)表文件的RelationID為鍵值,以FileInfo數(shù)據(jù)結(jié)構(gòu)為值;其中,所述RelationID為由數(shù)據(jù)庫ID,表空間ID和數(shù)據(jù)表ID構(gòu)成的標(biāo)識對象,用于標(biāo)識所述數(shù)據(jù)表文件;所述FileInfo數(shù)據(jù)結(jié)構(gòu),用于存儲所述數(shù)據(jù)表的數(shù)據(jù)塊信息。
11.如權(quán)利要求8或9或10或所述的磁盤空間管理裝置,其特征在于,所述的數(shù)據(jù)塊信息包括總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)。
12.如權(quán)利要求8所述的磁盤空間管理裝置,其特征在于,所述的磁盤空間管理模塊進(jìn)一步包括 數(shù)據(jù)塊信息獲取模塊,用于以所述RelationID為鍵值在所述文件信息表中查找所述數(shù)據(jù)表文件的FileInfo數(shù)據(jù)結(jié)構(gòu),并從所述FileInfo數(shù)據(jù)結(jié)構(gòu)中取出所述數(shù)據(jù)表文件的已使用數(shù)據(jù)塊數(shù); 數(shù)據(jù)塊擴(kuò)展模塊,用于比較待擴(kuò)展的數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)和已使用數(shù)據(jù)塊數(shù)若所述已使用數(shù)據(jù)塊數(shù)小于所述總數(shù)據(jù)塊數(shù),則為所述數(shù)據(jù)表文件直接遞增數(shù)據(jù)塊,并更新所述文件信息表中的已使用數(shù)據(jù)塊數(shù);若所述已使用數(shù)據(jù)塊數(shù)等于所述總數(shù)據(jù)塊數(shù),則一次性地為所述數(shù)據(jù)表文件增加若干數(shù)據(jù)塊,并更新所述文件信息表中所述數(shù)據(jù)表文件的總數(shù)據(jù)塊數(shù)。
13.如權(quán)利要求12所述的磁盤空間管理裝置,其特征在于,所述的一次性為所述數(shù)據(jù)表文件增加的若干數(shù)據(jù)塊數(shù)為所述總數(shù)據(jù)塊數(shù)的線性函數(shù)。
全文摘要
本發(fā)明提供一種磁盤空間管理方法和裝置,用于數(shù)據(jù)庫管理系統(tǒng)中的存儲引擎的數(shù)據(jù)表文件的磁盤空間的管理,包括在內(nèi)存中設(shè)置文件信息表,所述文件信息表為內(nèi)存中的所有后臺線程所共享;在所述文件信息表中存儲所述存儲引擎數(shù)據(jù)表文件的數(shù)據(jù)塊信息;利用所述文件信息表,查找和擴(kuò)展所述數(shù)據(jù)表文件的數(shù)據(jù)塊信息。采用本發(fā)明的技術(shù)方案具有以下的優(yōu)點在很大程度上減少了擴(kuò)展數(shù)據(jù)表所導(dǎo)致的IO開銷,節(jié)省了系統(tǒng)資源,使得各個數(shù)據(jù)表文件的數(shù)據(jù)塊盡可能連續(xù)地放置在磁盤的塊中,從而在很大限度地實現(xiàn)數(shù)據(jù)的讀寫和訪問操作,提高了系統(tǒng)的性能。
文檔編號G06F17/30GK102768672SQ20121019387
公開日2012年11月7日 申請日期2012年6月12日 優(yōu)先權(quán)日2012年6月12日
發(fā)明者孫偉豐, 李書淦, 李泉, 李 浩, 程仁波, 羅正海, 趙偉, 鄭程光 申請人:上海方正數(shù)字出版技術(shù)有限公司