一種文件索引存儲方法及裝置制造方法
【專利摘要】本發明涉及一種文件索引存儲方法,包括以下步驟:當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄;當判斷該索引主記錄未關聯有擴展記錄時,若該索引主記錄的數據段長度達到預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄;將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。本發明還提供一種文件索引存儲裝置。利用本發明可以提高文件索引的存儲效率及訪問性能。
【專利說明】一種文件索弓I存儲方法及裝置
【技術領域】
[0001]本發明具體實施例涉及數據存儲【技術領域】,特別涉及一種文件索引存儲方法及裝置。
【背景技術】
[0002]分布式文件系統提供的文件概念,通常是多個數據塊的組合。一個文件的文件索引即包括這些數據塊的索引。根據文件索引可以讀取該文件的相應數據塊中的數據。因此,文件的數據讀寫都需要維護文件索引和實際數據的一致性。在互聯網應用中,隨著帶寬、屏幕分辨率的提高,輸出設備和輸送管道等逐漸不再成為超清視頻點播、大文件傳輸等類似應用的瓶頸。但大文件涉及的數據塊較多,使得文件索引急劇膨脹。因此,如何有效地存儲文件索引,提升文件索引的訪問性能,成為大文件類應用設計重點需要考慮的問題。
【發明內容】
[0003]有鑒于此,有必要提供一種文件索引存儲方法及裝置,可以提高文件索引的存儲效率及訪問性能。
[0004]一種文件索引存儲方法,包括以下步驟:當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄;當判斷該索引主記錄未關聯有擴展記錄時,若該索引主記錄的數據段長度達到預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄;將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。
[0005]一種文件索引存儲裝置,包括:第一判斷模塊,用于當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄;第一存儲模塊,用于當判斷該索引主記錄未關聯有擴展記錄時,若該索引主記錄的數據段長度達到預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄;所述第一存儲模塊,還用于將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。
[0006]相較于現有技術,本發明文件索引存儲方法及裝置,在文件的索引主記錄中用于存儲數據塊索引的數據段長度達到預設閾值的情況下,將該數據段中的所有數據塊索引拆分成與該索引主記錄關聯的若干個擴展記錄進行存儲,從而可以提高文件索引的存儲效率,以及提升文件索引的訪問性能。
[0007]為讓本發明的上述和其他目的、特征和優點能更明顯易懂,下文特舉較佳實施例,并配合所附圖式,作詳細說明如下。
【專利附圖】
【附圖說明】
[0008]圖1為一種終端的結構框圖。
[0009]圖2為本發明第一實施例提供的文件索引存儲方法的流程圖。
[0010]圖3為文件對應的數據的寫入方法流程圖。
[0011]圖4為在索引主記錄的數據段中存儲數據塊索引的示意圖。
[0012]圖5為創建與索引主記錄關聯的擴展記錄的方法流程圖。
[0013]圖6為在擴展記錄中存儲數據塊索引的示意圖。
[0014]圖7為本發明第二實施例提供的文件索引存儲方法的流程圖。
[0015]圖8為在數據段中存儲對應于文件空洞的數據塊索引的示意圖。
[0016]圖9為在擴展記錄中存儲對應于文件空洞的數據塊索引的示意圖。
[0017]圖10為本發明第三實施例提供的文件索引存儲方法的流程圖。
[0018]圖11為本發明第四實施例提供的文件索引存儲裝置的框圖。
[0019]圖12為本發明第五實施例提供的文件索引存儲裝置的框圖。
[0020]圖13為本發明第六實施例提供的文件索引存儲裝置的框圖。
【具體實施方式】
[0021]為更進一步闡述本發明為實現預定發明目的所采取的技術手段及功效,以下結合附圖及較佳實施例,對依據本發明的【具體實施方式】、結構、特征及其功效,詳細說明如后。
[0022]圖1示出了一種終端的結構框圖。如圖1所示,終端I包括一個或多個(圖中僅示出一個)存儲器11、處理器12、存儲控制器13、外設接口 14、通信模塊15、輸入單元16及顯示單元17。這些組件通過一條或多條通訊總線/信號線相互通訊。
[0023]本領域普通技術人員可以理解,圖1所示的結構僅為示意,其并不對終端I的結構造成限定。例如,終端I還可包括比圖1所示更多或者更少的組件,或者具有與圖1所示不同的配置。圖1所示的各組件可以采用硬件、軟件或其組合實現。
[0024]存儲器11可用于存儲軟件程序以及模塊,如本發明實施例中的文件索引存儲方法及裝置對應的程序指令/模塊,處理器12通過運行存儲在存儲器11內的軟件程序以及模塊,從而執行各種功能應用以及數據處理,即實現上述的文件索引存儲方法。
[0025]存儲器11可包括高速隨機存儲器,還可包括非易失性存儲器,如一個或者多個磁性存儲裝置、閃存、或者其他非易失性固態存儲器。在一些實例中,存儲器11可進一步包括相對于處理器12遠程設置的存儲器,這些遠程設置的存儲器可以通過網絡連接至終端I。上述網絡的實例包括但不限于互聯網、企業內部網、局域網、移動通信網及其組合。處理器12以及其他可能的組件對存儲器11的訪問可在存儲控制器13的控制下進行。
[0026]外設接口 14將各種輸入/輸出裝置耦合至處理器12以及存儲器11。處理器12運行存儲器11內的各種軟件、指令以及執行終端I的各種功能以及進行數據處理。
[0027]通信模塊15用于與通信網絡或者其他設備進行通信。具體地,通信模塊15例如可以是網卡151或RF (Rad1 Frequency,射頻)模塊152。網卡151作為局域網中連接計算機和傳輸介質的接口,用于實現與局域網傳輸介質之間的物理連接與電信號匹配,從而建立局域網并連接到因特網(Internet),與各種網絡如局域網、城域網、廣域網進行通信。網卡151可包括各種現有的用于執行上述功能的電路元件,例如處理器和存儲器(包括ROM和RAM)等。RF模塊152用于接收以及發送電磁波,實現電磁波與電信號的相互轉換,從而與通信網絡或者其他設備進行通信。RF模塊152可包括各種現有的用于執行這些功能的電路元件,例如,天線、射頻收發器、數字信號處理器、加密/解密芯片、用戶身份模塊(SM)卡、存儲器等等。RF模塊152可與各種網絡如互聯網、企業內部網、無線網絡進行通信或者通過無線網絡與其他設備進行通信。上述的無線網絡可包括蜂窩式電話網、無線局域網或者城域網。上述的無線網絡可以使用各種通信標準、協議及技術,包括但并不限于全球移動通信系統(Global System for Mobile Communicat1n, GSM)、增強型移動通信技術(Enhanced Data GSM Environment, EDGE),寬帶碼分多址技術(wideband codedivis1n multiple access, W-CDMA),碼分多址技術(Code divis1n access, CDMA)、時分多址技術(time divis1n multiple access, TDMA),無線保真技術(Wireless, Fidelity,WiFi)(如美國電氣和電子工程師協會標準IEEE802.11a, IEEE802.lib, IEEE802.1lg和/或 IEEE802.lln)、網絡電話(Voice over internet protocal, VoIP)、全球微波互聯接入(Worldwide Interoperability for Microwave Access,W1-Max)、其他用于郵件、即時通信及短消息的協議,以及任何其他合適的通信協議,甚至可包括那些當前仍未被開發出來的協議。
[0028]輸入單元16可用于接收輸入的字符信息,以及產生與用戶設置以及功能控制有關的鍵盤、鼠標、操作桿、光學或者軌跡球信號輸入。具體地,輸入單元16可包括按鍵161以及觸控表面162。按鍵161例如可包括用于輸入字符的字符按鍵,以及用于觸發控制功能的控制按鍵。控制按鍵的實例包括“返回主屏”按鍵、開機/關機按鍵、拍照鍵等等。觸控表面162可收集用戶在其上或附近的觸摸操作(比如用戶使用手指、觸筆等任何適合的物體或附件在觸控表面162上或在觸控表面162附近的操作),并根據預先設定的程序驅動相應的連接裝置。可選的,觸控表面162可包括觸摸檢測裝置和觸摸控制器兩個部分。其中,觸摸檢測裝置檢測用戶的觸摸方位,并檢測觸摸操作帶來的信號,將信號傳送給觸摸控制器;觸摸控制器從觸摸檢測裝置上接收觸摸信息,并將它轉換成觸點坐標,再送給處理器12,并能接收處理器12發來的命令并加以執行。此外,可以采用電阻式、電容式、紅外線以及表面聲波等多種類型實現觸控表面162。除了觸控表面162,輸入單元16還可以包括其他輸入設備。上述的其他輸入設備包括但不限于物理鍵盤、軌跡球、鼠標、操作桿等中的一種或多種。
[0029]顯示單元17用于顯示由用戶輸入的信息、提供給用戶的信息以及終端I的各種圖形接口。這些圖形用戶接口可以由圖形、文本、圖標、視頻和其任意組合來構成。在一個實例中,顯示單元17包括一個顯示面板171。該顯示面板171例如可為一個液晶顯示面板(Liquid Crystal Display, LCD)、有機發光二極管(Organic Light-Emitting D1deDisplay, OLED)顯不面板、電泳顯不面板(Electro-Phoretic Display, EPD)等。進一步地,觸控表面162可設置于顯示面板171上從而與顯示面板171構成一個整體。
[0030]第一實施例
[0031]參閱圖2所示,本發明第一實施例提供一種文件索引存儲方法,其可以由上述終端I執行。該終端I的具體實例包括但并不限于臺式計算機、便攜式計算機、智能手機、平板電腦或者其他類似的運算裝置。在本實施例中,該文件索引存儲方法包括以下步驟:
[0032]步驟SI,當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄,若否,則執行步驟S2,若是,則執行步驟S5 ;
[0033]步驟S2,判斷該索引主記錄的數據段長度是否達到預設閾值,若是,則執行步驟S3,若否,則執行步驟S4 ;
[0034]步驟S3,創建若干個與該索引主記錄關聯的擴展記錄,并將該數據段中已存儲的的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄;
[0035]步驟S4,將該待存儲的數據塊索引存入索引主記錄的該數據段中;
[0036]步驟S5,將該待存儲的數據塊索引存入相應的擴展記錄中。
[0037]按照上述的文件索引存儲方法,在文件的索引主記錄中用于存儲數據塊索引的數據段長度達到預設閾值的情況下,將該數據段中的所有數據塊索引信息拆分成與該索引主記錄關聯的若干個擴展記錄進行存儲,從而可以提高文件索引的存儲效率,以及提升文件索引的訪問性能。
[0038]在一些實例中,上述方法的各步驟的實現細節如下:
[0039]步驟SI所述的文件為正在寫入所述存儲器11的文件,該文件可以為各種類型,例如視頻、文檔、圖片、程序等。在本實施例中,將該文件寫入存儲器11的過程包括:將該文件對應的數據寫入存儲器11,及在存儲器11中為該文件建立文件索引。該文件索引用于在存儲器11中定位到該文件。
[0040]具體而言,參閱圖3所示,所述將該文件對應的數據寫入存儲器11的過程可以由現有的數據存儲引擎,例如NoSQL (非關系型數據庫)存儲引擎,通過以下步驟實現:
[0041]步驟a,當接收到該文件的寫入請求時,獲取該文件待寫入數據的長度。所述文件的寫入請求例如可以在通過所述通信模塊15從互聯網上下載該文件時發出,也可以在通過所述輸入單元16接收用戶對該文件的創建及修改操作時發出,還可以在終端I中某一程序,例如攝像程序運行并產生該文件時發出,等等。
[0042]步驟b,根據針對該文件預先設定的數據塊的指定數據長度,以及所獲取的該文件待寫入數據的長度,在存儲器11中的數據存儲單元中為該文件分配若干個數據塊。所述數據塊的指定數據長度是指該數據塊可容納的最大數據長度,該數據塊的指定數據長度可以在首次接收到該文件的寫入請求,從而在該數據存儲單元中創建該文件時設定。所述數據存儲單元是指專門用于存儲文件對應的數據的存儲區域。該數據存儲單元可以以數據庫的形式存在。
[0043]步驟C,將該文件待寫入數據依次寫入所分配的數據塊中。若所分配的數據塊的指定數據長度之和大于該文件待寫入數據的長度,則所分配的數據塊中可能有若干個數據塊未被該文件待寫入數據填滿。
[0044]步驟d,返回所分配的各個數據塊對應的數據塊索引及該文件的標識信息。每個數據塊索引具有固定長度。該數據塊索引包括對應數據塊的ID及該數據塊的有效數據長度。該數據塊的有效數據長度是指該數據塊中實際存儲數據的長度。該文件的標識信息例如包括該文件的名稱、ID等。該文件的標識信息可以在接收該文件的寫入請求時獲得。
[0045]而所述在存儲器11中為該文件建立文件索引的過程可由本實施例提供的文件索弓I存儲方法來實現。由于該文件對應的數據被存儲在若干個數據塊中,因此該文件索引即包括各數據塊索引。該數據塊索引可以根據數量被存儲在該文件對應的索引主記錄的數據段中,或被存儲在與該索引主記錄關聯的擴展記錄中。該索引主記錄及擴展記錄可以被存儲在存儲器11中的索引存儲單元中。相對于所述數據存儲單元,該索引存儲單元專門用于存儲各文件的文件索引。
[0046]在本實施例中,每當所述數據存儲引擎返回一條數據塊索引及文件的標識信息時,即執行所述步驟SI。數據存儲引擎所返回的該數據塊索引即為待存儲的數據塊索引信息。該待存儲的數據塊索引對應該文件末尾的數據。因此,步驟SI接收到該文件的標識信息及該數據塊索引后,可以根據該文件的標識信息在所述索引存儲單元中找到該文件對應的索引主記錄。
[0047]在一個實例中,該索引主記錄包括頭部和數據段。其中該頭部具有固定長度,而該數據段可變長。該頭部包括文件元信息、結構標志和數據段長度信息。該文件元信息例如包括該文件的標識信息、該文件的創建時間和修改時間、該文件的總長度、對應數據塊的指定數據長度等。該結構標志指示該索引主記錄是否關聯有擴展記錄。該數據段長度信息指示索引主記錄的數據段長度。
[0048]因此,步驟SI可以先從該索引主記錄的頭部中讀取該結構標志,然后根據該結構標志判斷該索引主記錄是否關聯有擴展記錄。若該索引主記錄關聯有擴展記錄,則所關聯的該擴展記錄的ID,例如UUID (Universally Unique Identifier,通用唯一識別碼)被記錄在該索引主記錄的數據段中。該擴展記錄的ID具有唯一性。
[0049]步驟S2中,若該索引主記錄未關聯有擴展記錄,則該索引主記錄的該數據段用于以數組形式存儲該文件的數據塊索引,如圖4所示。隨著該文件的增大,組成該文件的數據塊越來越多,該文件的數據塊索引也越來越多,造成該索引主記錄的數據段越來越長。這種情況會造成從該數據段中拉取數據塊索引所需的時間呈線性增長的趨勢,因而該數據段過長會直接影響到數據塊索引的訪問效率。
[0050]因此,步驟S2需要進一步判斷該索引主記錄的數據段長度是否達到預設閾值。具體地,步驟S2可以從該索引主記錄的頭部中讀取該數據段長度信息,并根據該數據段長度信息判斷該數據段長度是否達到該預設閾值。在一個實例中,該預設閾值可以為所述數據塊索引的固定長度的整數倍。若該數據段長度未達到該預設閾值,則該數據段至少還可以存入一條數據塊索引,并且對數據塊索引的訪問效率影響較小。若該數據段長度達到該預設閾值,則就算再向該數據段存入一條數據塊索引,對數據塊索引的訪問效率影響都較大。
[0051]步驟S3中,若該數據段的長度達到該預設閾值,為了提高數據塊索引的訪問效率,可以以二級索引的方式存儲數據塊索引。具體地,參閱圖5所示,步驟S3包括以下步驟:
[0052]步驟S3.1,創建若干個擴展記錄,并分別為每個擴展記錄分配一個ID。所創建的擴展記錄都以數組的形式被存儲在索引存儲單元中。每個擴展記錄都用于存儲指定數量的數據塊索引。該指定數量可以記錄在索引主記錄的頭部中。由于每條數據塊索引具有固定長度,因此每個擴展記錄也具有固定長度。該數據塊索引的固定長度也可以記錄在索引主記錄的頭部中。該擴展記錄的創建數量需要根據數據段中已存儲的數據塊索引的數量以及所述待存儲的數據塊索引確定。例如,若每個擴展記錄用于存儲3條數據塊索引,而目前數據段中已存儲的數據塊索引為9條,加上該待存儲的數據塊索引,則需要創建4個擴展記錄。
[0053]步驟S3.2,將所創建的各擴展記錄的ID記錄在所述索引主記錄的數據段中,從而將各擴展記錄與索引主記錄關聯起來。
[0054]步驟S3.3,將該結構標志更新為指示索引主記錄關聯有擴展記錄。
[0055]步驟S3.4,將該數據段中已存儲的數據塊索引轉移到相應的擴展記錄中,并將所述待存儲的數據塊索引也存入相應的擴展記錄。數據塊索引在各擴展記錄中依然以數組形式存儲。具體而言,由于每個擴展記錄可以存儲指定數量的數據塊索引,可以將該待存儲的數據塊索引排在數據段中已存儲的數據塊索引的順序之后。然后按順序將數據段中已存儲的數據塊索引及待存儲的數據塊索引逐一寫入所創建的各個擴展記錄。
[0056]例如,若每個擴展記錄可以存儲3條數據塊索引,而目前數據段中已存儲了 9條數據塊索引,則需要先創建4個擴展記錄。然后,按照順序將數據段中已存儲的第一條至第三條數據塊索引轉移到所創建的第一個擴展記錄,將已存儲的第四條至第六條數據塊索引轉移到所創建的第二個擴展記錄,依此類推,最后將待存儲的數據塊索引寫入第四個擴展記錄,如圖6所示。
[0057]值得注意的是,由于每個擴展記錄的長度也要固定,因此,若最后一個擴展記錄中數據塊索引的數量不足,則先將該擴展記錄中未存有數據塊索引的字節都填上O。待要繼續存入數據塊索引時,再將最后一個擴展記錄中相應存儲區域的字節O替換為該待存儲的數據塊索引。延續上一個例子,第四個擴展記錄中僅有一條數據塊索引,則將第四個擴展記錄中用于存儲另外兩條數據塊索引的存儲區域的字節都填O。若后續又需要存儲一條數據塊索引,則按照順序將相應存儲區域的字節O替換為該數據塊索引,而在第四個擴展記錄中還剩余一個數據塊索引的長度的存儲區域對應的字節為O。
[0058]步驟S4中,若該數據段的長度未達到該預設閾值,則仍然將該待存儲的數據塊索引以數組形式存入該數據段中。值得注意的是,在將待存儲的數據塊索引存入該數據段中后,還需要更新該頭部中的數據段長度信息,以便后續判斷該數據段長度是否達到所述預設閾值。
[0059]步驟S5中,若該索引主記錄已關聯有擴展記錄,則將該待存儲的數據塊索引存入相應的擴展記錄中。具體而言,先判斷擴展記錄數組中最后一個擴展記錄存儲的數據塊索引是否達到所述的指定數量。若該最后一個擴展記錄存儲的數據塊索引達到該指定數量,則需要再創建一個與該索引主記錄關聯的擴展記錄,即將所創建的擴展記錄的ID記錄在該數據段中,并將該待存儲的數據塊索引存入所創建的該擴展記錄。若該最后一個擴展記錄存儲的數據塊索引未達到該指定數量,則將該待存儲的數據塊索引存入該最后一個擴展記錄。
[0060]通過上述過程在索引存儲單元中為該文件建立的文件索弓丨,便于高效地定位到該文件的任意一個數據塊索引。例如,已知某一目標數據塊在該文件中的偏移量為Fileoffset,而數據塊的指定數據長度為BlockSize,每個數據塊索引的長度為indexSize,每個擴展記錄用于存儲數據塊索引的數量為indexCount,FINT為取整操作。其中,BlockSize、indexSize 和 indexCount 分別為固定值。
[0061]當需要定位該目標數據塊對應的目標數據塊索引時,先根據索引主記錄的頭部中的結構標志判斷該索引主記錄是否關聯有擴展記錄,即該文件是大文件還是小文件。若該文件關聯有擴展記錄,則該文件被定義為大文件。若該文件未關聯有擴展記錄,則該文件被定義為小文件。
[0062]若該文件未關聯有擴展記錄,則可以通過以下公式定位該目標數據塊索引:
[0063]目標數據塊索引在索引主記錄的數據段中的偏移量
[0064]=(FINT(Fileoffset/BlockSize))*Indexsize。
[0065]若該文件關聯有擴展記錄,則先根據以下公式定位該目標數據塊索引所在擴展記錄的序號:
[0066]擴展記錄序號=FINT(Fileoffset/(BlockSize*IndexCount));
[0067]然后再根據以下公式在所定位的擴展記錄中定位該目標數據塊索引:
[0068]目標數據塊在該擴展記錄中的偏移量
[0069]= (Fileoffset-擴展記錄序號 * (BlockSize*IndexCount)) /Indexsize0
[0070]綜上所述,使用本實施例的文件索引存儲方法存儲文件的數據塊索引后,在小文件情況下,只需要讀取一次索引主記錄就能定位到數據塊索引,并且讀取性能較佳。在大文件情況下,讀取一次索引主記錄定位到擴展記錄后,再讀取一次該擴展記錄從而定位到數據塊索引,而不需要讀取全部擴展記錄。此外,由于通常可以緩存部分索引歷史記錄。因此,在一定時間內,由于文件的索引主記錄是熱數據,無需重復拉取,而擴展記錄可以按需緩存和按需讀取,使得整體的文件索引的訪問性能提升。
[0071]第二實施例
[0072]在文件存儲的過程中,通常會出現文件空洞的情況。該文件空洞是指由于設定的文件偏移量大于文件的當前長度,從而使對該文件的下一次寫操作在文件中構成的空洞。而位于文件中但沒有被實際寫入該文件的所有字節,即該空洞對應的字節都設定為重復的O。如果該文件的某個數據塊范圍內均為空洞,則數據存儲引擎不為該空洞分配數據塊以節省存儲空間。
[0073]針對這一情況,參閱圖7所示,本發明第二實施例提供一種文件索引存儲方法,其相較于本發明第一實施例的文件索引存儲方法,所述步驟S3、步驟S4或步驟S5中,將該待存儲的數據塊索引存入數據段或相應的擴展記錄的步驟還包括:
[0074]步驟S21,若該待存儲的數據塊索引對應該文件的空洞,例如數據存儲引擎返回的該數據塊索引信息為空值,則在該數據段或相應的擴展記錄中將該待存儲的數據塊索引的字節設為0,即將該待存儲的數據塊索引對應存儲區域的字節設為O。參閱圖8和圖9所示,圖8為在數據段中存儲對應于文件空洞的數據塊索引的示意圖。圖9為在擴展記錄中存儲對應于文件空洞的數據塊索引的示意圖。
[0075]考慮到定位數據段中存儲的最后一個數據塊索引的情況,由于數據段是根據所存儲的數據塊索引的數量而變長的,因此若數據段中最后一個數據塊索引的字節為0,則該最后一個數據塊索引對應于該文件的一個空洞。
[0076]而考慮到定位擴展記錄中存儲的最后一個數據塊索引的情況,由于已創建的最后一個擴展記錄中尚未存儲數據塊索引的存儲區域的字節也都將設為0,若最后一個擴展記錄中最后一個數據塊索引的字節也被設為0,則可能會引起將該字節被設為O的最后一個數據塊索引對應的存儲區域誤判為尚未存儲數據塊索引的問題。
[0077]為了解決這一問題,在一個實例中,可以在索引主記錄的頭部記錄擴展記錄中已存儲的數據塊索引的總數。當出現所述最后一個擴展記錄的一個存儲區域的字節被設為O而無法判斷該存儲區域是尚未存儲數據塊索引,還是存儲有對應文件空洞的數據塊索引的情況時,可以根據該數據塊索引的總數來進行判斷。例如,若該數據塊索引的總數為5,而在擴展記錄中該存儲區域之前的區域存儲的數據塊索引已達到5個,則該存儲區域尚未存儲數據塊索引。若在擴展記錄中該存儲區域之前的區域存儲的數據塊索引只有4個,則該存儲區域中存儲有對應文件空洞的數據塊索引。
[0078]步驟S22,當一擴展記錄中存儲的所有數據塊索引的字節都為O時,將數據段中該擴展記錄的ID更新為預設值,例如為將該擴展記錄的ID對應的字節都設為O,如圖9所示。
[0079]綜上所述,通過本發明實施例的文件索引存儲方法,將文件空洞對應的數據塊索引在索引主記錄的數據段中或所關聯的擴展記錄中以字節為O表示,可以在未給文件空洞分配數據塊的情況下,為該文件空洞建立相應的數據塊索引。此外,若一擴展記錄包括的所有數據塊索引的字節都為0,則將該擴展記錄的ID修改為預設值,從而在讀取到該擴展記錄的ID為該預設值時,即可獲知該擴展記錄對應于文件空洞,無需再繼續讀取該擴展記錄,從而提聞讀取效率。
[0080]第三實施例
[0081]根據上述第一及第二實施例存儲文件索引后,在定位到擴展記錄進行修改的過程中,可能會涉及到擴展記錄的多次寫操作。為了保證擴展記錄在多次寫操作情況下的原子性,即在擴展記錄未修改成功的情況下,該擴展記錄對應的數據與修改前保持一致,參閱圖10所示,本發明第三實施例提供一種文件索引存儲方法,其相較于第一或第二實施例的文件索引存儲方法,還包括:
[0082]步驟S31,當需要修改一目標擴展記錄時,先生成該目標擴展記錄的備份擴展記錄,并為該備份擴展記錄也分配一個ID。具體而言,在修改該目標擴展記錄時,需要先定位到該目標擴展記錄。定位到該目標擴展記錄的方法可以參考第一實施例中定位擴展記錄序號的公式,在此不再贅述。所生成的該備份擴展記錄與該目標擴展記錄一致。
[0083]步驟S32,根據修改操作修改該備份擴展記錄。該修改操作例如包括修改該備份擴展記錄中的一個或多個數據塊索引。
[0084]步驟S33,當修改操作結束后,將該數據段中該目標擴展記錄的ID替換為該備份擴展記錄的ID。從而使該目標擴展記錄與索引主記錄的關聯解除,而使該備份擴展記錄與該索引主記錄關聯。
[0085]綜上所述,本實施例的文件索引存儲方法,當需要修改一目標擴展記錄時,先生成一個與該目標擴展記錄一致的備份擴展記錄。然后根據修改操作修改該備份擴展記錄。當修改操作結束后,才將該備份擴展記錄替代目標擴展記錄與索引主記錄相關聯。因此,即使在對備份擴展記錄的修改過程中發生錯誤,使對備份擴展記錄的修改失敗,但由于并未修改該目標擴展記錄,且該目標擴展記錄仍與索引主記錄關聯,因此對該備份擴展記錄的修改失敗并不會影響目標擴展記錄對應數據的原子性。
[0086]第四實施例
[0087]參閱圖11所示,本發明第四實施例提供一種文件索引存儲裝置100,其包括第一判斷模塊101、第二判斷模塊102、第一存儲模塊103、第二存儲模塊104和第三存儲模塊105。可以理解,上述的各模塊是指計算機程序或者程序段,用于執行某一項或多項特定的功能。此外,上述各模塊的區分并不代表實際的程序代碼也必須是分開的。
[0088]第一判斷模塊101,用于當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄。該數據塊索引包括對應數據塊的ID及該數據塊的有效數據長度。該數據塊索引具有固定長度。該索引主記錄包括頭部和數據段。該頭部包括文件元信息、結構標志和數據段長度信息。該文件元信息例如包括該文件的標識信息、該文件的創建時間和修改時間、該文件的總長度、對應數據塊的指定數據長度等。該結構標志指示該索引主記錄是否關聯有擴展記錄。該數據段長度信息指示索引主記錄的數據段長度。因此,第一判斷模塊101可以先從該索引主記錄的頭部中讀取該結構標志,然后根據該結構標志判斷該索引主記錄是否關聯有擴展記錄。
[0089]第二判斷模塊102,用于若該索引主記錄未關聯有擴展記錄,則判斷該索引主記錄的數據段長度是否達到預設閾值。若該索引主記錄未關聯有擴展記錄,則該索引主記錄的該數據段用于以數組形式存儲該文件的數據塊索引。第二判斷模塊102可以從該索引主記錄的頭部中讀取該數據段長度信息,并根據該數據段長度信息判斷該數據段長度是否達到該預設閾值。在一個實例中,該預設閾值可以為所述數據塊索引的固定長度的整數倍。
[0090]第一存儲模塊103,用于若該數據段長度達到該預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄,并將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。每個擴展記錄都用于存儲指定數量的數據塊索引。所創建的擴展記錄也都以數組形式存儲。
[0091]具體而言,第一存儲模塊103先創建若干個擴展記錄,并分別為每個擴展記錄分配一個ID。然后,第一存儲模塊103將所創建的各擴展記錄的ID記錄在所述索引主記錄的數據段中,從而將各擴展記錄與索引主記錄關聯起來,并將該結構標志更新為指示索引主記錄關聯有擴展記錄。最后,第一存儲模塊103將該數據段中已存儲的數據塊索引轉移到相應的擴展記錄中,并將所述待存儲的數據塊索引也存入相應的擴展記錄。
[0092]第二存儲模塊104,用于若該數據段長度未達到該預設閾值,則將該待存儲的數據塊索引存入索引主記錄的該數據段中。在將待存儲的數據塊索引存入該數據段中后,第二存儲模塊104還需要更新該頭部中的數據段長度信息。
[0093]第三存儲模塊105,用于若該索引主記錄關聯有擴展記錄,則將該待存儲的數據塊索引存入相應的擴展記錄中。具體而言,第三存儲模塊105先判斷擴展記錄數組中最后一個擴展記錄存儲的數據塊索引是否達到所述的指定數量。若該最后一個擴展記錄存儲的數據塊索引達到該指定數量,則需要再創建一個與該索引主記錄關聯的擴展記錄,即將所創建的擴展記錄的ID記錄在該數據段中,并將該待存儲的數據塊索引存入所創建的該擴展記錄。若該最后一個擴展記錄存儲的數據塊索引未達到該指定數量,則將該待存儲的數據塊索引存入該最后一個擴展記錄。
[0094]對于以上各模塊的具體工作過程,可進一步參考本發明第一實施例提供的文件索引存儲方法,在此不再重復。
[0095]綜上所述,本實施例提供的文件索引存儲方法,在文件的索引主記錄中用于存儲數據塊索引的數據段長度達到預設閾值的情況下,將該數據段中的所有數據塊索引信息拆分成與該索引主記錄關聯的若干個擴展記錄進行存儲,從而可以提高文件索引的存儲效率,以及提升文件索引的訪問性能。
[0096]第五實施例
[0097]參閱圖12所示,本發明第五實施例提供一種文件索引存儲裝置200,其相較于第四實施例的文件索引存儲裝置100,所述第一存儲模塊103、第二存儲模塊104和第三存儲模塊105分別還包括第一存儲子模塊201。
[0098]該第一存儲子模塊201,用于在該待存儲的數據塊索引存入數據段或相應的擴展記錄時,若該待存儲的數據塊索引對應該文件的空洞,則在該數據段或相應的擴展記錄中將該待存儲的數據塊索引的字節設為O。
[0099]此外,所述第一存儲模塊103和第三存儲模塊105分別還包括第二存儲子模塊202,該第二存儲子模塊202用于當一擴展記錄中存儲的所有數據塊索引的字節都為O時,將數據段中該擴展記錄的ID更新為預設值。
[0100]對于以上各模塊的具體工作過程,可進一步參考本發明第二實施例提供的文件索引存儲方法,在此不再重復。
[0101]綜上所述,通過本發明實施例的文件索引存儲裝置200,將文件空洞對應的數據塊索引在索引主記錄的數據段中或所關聯的擴展記錄中以字節為O表示,可以在未給文件空洞分配數據塊的情況下,為該文件空洞建立相應的數據塊索引。此外,若一擴展記錄包括的所有數據塊索引的字節都為0,則將該擴展記錄的ID修改為預設值,從而在讀取到該擴展記錄的ID為該預設值時,即可獲知該擴展記錄對應于文件空洞,無需再繼續讀取該擴展記錄,從而提聞讀取效率。
[0102]第六實施例
[0103]參閱圖13所示,本發明第六實施例提供一種文件索引存儲裝置300,其相較于第四實施例的文件索引存儲裝置100或第五實施例的文件索引存儲裝置200,還進一步包括修改模塊301。該修改模塊301用于:
[0104]當需要修改一目標擴展記錄時,先生成該目標擴展記錄的備份擴展記錄,并為該備份擴展記錄也分配一個ID ;
[0105]根據修改操作修改該備份擴展記錄;以及
[0106]當修改操作結束后,將該數據段中該目標擴展記錄的ID替換為該備份擴展記錄的ID。從而使該目標擴展記錄與索引主記錄的關聯解除,而使該備份擴展記錄與該索引主記錄關聯。
[0107]對于以上各模塊的具體工作過程,可進一步參考本發明第三實施例提供的文件索引存儲方法,在此不再重復。
[0108]綜上所述,本實施例的文件索引存儲裝置300,當需要修改一目標擴展記錄時,先生成一個與該目標擴展記錄一致的備份擴展記錄。然后根據修改操作修改該備份擴展記錄。當修改操作結束后,才將該備份擴展記錄替代目標擴展記錄與索引主記錄相關聯。因此,即使在對備份擴展記錄的修改過程中發生錯誤,使對備份擴展記錄的修改失敗,但由于并未修改該目標擴展記錄,且該目標擴展記錄仍與索引主記錄關聯,因此對該備份擴展記錄的修改失敗并不會影響目標擴展記錄對應數據的原子性。
[0109]此外,本發明實施例還提供一種計算機可讀存儲介質,其內存儲有計算機可執行指令,上述的計算機可讀存儲介質例如為非易失性存儲器例如光盤、硬盤、或者閃存。上述的計算機可執行指令用于讓計算機或者類似的運算裝置完成上述的文件索引存儲方法中的各種操作。
[0110]以上所述,僅是本發明的較佳實施例而已,并非對本發明作任何形式上的限制,雖然本發明已以較佳實施例揭示如上,然而并非用以限定本發明,任何本領域技術人員,在不脫離本發明技術方案范圍內,當可利用上述揭示的技術內容做出些許更動或修飾為等同變化的等效實施例,但凡是未脫離本發明技術方案內容,依據本發明的技術實質對以上實施例所作的任何簡介修改、等同變化與修飾,均仍屬于本發明技術方案的范圍內。
【權利要求】
1.一種文件索引存儲方法,其特征在于,該方法包括以下步驟: 當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄; 當判斷該索引主記錄未關聯有擴展記錄時,若該索引主記錄的數據段長度達到預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄; 將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。
2.如權利要求1所述的文件索引存儲方法,其特征在于,還包括: 當判斷該索引主記錄未關聯有擴展記錄時,若該數據段長度未達到該預設閾值,則將該待存儲的數據塊索引存入索引主記錄的該數據段中。
3.如權利要求2所述的文件索引存儲方法,其特征在于,還包括: 當判斷該索引主記錄關聯有擴展記錄時,將該待存儲的數據塊索引存入相應的擴展記錄中。
4.如權利要求3所述的文件索引存儲方法,其特征在于,所述的數據塊索引包括該數據塊的ID和有效數據長度。
5.如權利要求3所述的文件索引存儲方法,其特征在于,所述數據塊索引具有固定長度。
6.如權利要求3所述的文件索引存儲方法,其特征在于,所述數據塊索引在該數據段或擴展記錄中以數組形式存儲,與索引主記錄關聯的該擴展記錄也以數組形式存儲。
7.如權利要求6所述的文件索引存儲方法,其特征在于,每個所述擴展記錄都用于存儲指定數量的數據塊索引。
8.如權利要求7所述的文件索引存儲方法,其特征在于,所述當判斷該索引主記錄關聯有擴展記錄時,將該待存儲的數據塊索引存入相應的擴展記錄中的步驟包括: 判斷擴展記錄數組中的最后一個擴展記錄存儲的數據塊索引是否達到該指定數量; 若該最后一個擴展記錄存儲的數據塊索引達到該指定數量,則再創建一個與該索引主記錄關聯的擴展記錄,并將該待存儲的數據塊索引存入所創建的該擴展記錄; 若該最后一個擴展記錄存儲的數據塊索引未達到該指定數量,則將該待存儲的數據塊索引存入該最后一個擴展記錄。
9.如權利要求3所述的文件索引存儲方法,其特征在于,該索引主記錄包括頭部和所述數據段,該頭部包括結構標志和數據段長度信息; 該結構標志指示該索引主記錄是否關聯有擴展記錄。
10.如權利要求9所述的文件索引存儲方法,其特征在于,所述判斷該文件對應的索引主記錄是否關聯有擴展記錄的步驟包括: 從該頭部中讀取該結構標志; 根據該結構標志判斷該索引主記錄是否關聯有擴展記錄。
11.如權利要求9所述的文件索引存儲方法,其特征在于,當判斷該索引主記錄未關聯有擴展記錄時,還包括: 從該頭部中讀取該數據段長度信息; 根據該數據段長度信息判斷該數據長度是否達到該預設閾值。
12.如權利要求9所述的文件索引存儲方法,其特征在于,所述創建若干個與該索引主記錄關聯的擴展記錄的步驟包括: 創建若干個擴展記錄,并分別為每個擴展記錄分配一個ID ; 將各擴展記錄的ID記錄在該數據段中; 將該結構標志更新為指示索引主記錄關聯有擴展記錄。
13.如權利要求12所述的文件索引存儲方法,其特征在于,將所述待存儲的數據塊索引存入數據段或相應的擴展記錄的步驟還包括: 若該待存儲的數據塊索引對應該文件中的空洞,則在數據段或相應的擴展記錄中將該待存儲的數據塊索引的字節設為O。
14.如權利要求13所述的文件索引存儲方法,其特征在于,還包括: 當一擴展記錄中存儲的所有數據塊索引的字節都為O時,將數據段中該擴展記錄的ID更新為預設值。
15.如權利要求9所述的文件索引存儲方法,其特征在于,還包括: 當將所述待存儲的數據塊索引存入數據段后,更新該頭部中的數據段長度。
16.如權利要求12所述的文件索引存儲方法,其特征在于,還包括: 當需要修改一目標擴展記錄時,生成該目標擴展記錄的備份擴展記錄,并為該備份擴展記錄分配一個ID ; 根據修改操作修改該備份擴展記錄; 當該修改操作結束后,將該數據段中該目標擴展記錄的ID替換為該備份擴展記錄的ID0
17.一種文件索引存儲裝置,其特征在于,該裝置包括: 第一判斷模塊,用于當接收到一文件待存儲的數據塊索引時,判斷該文件對應的索引主記錄是否關聯有擴展記錄; 第一存儲模塊,用于當判斷該索引主記錄未關聯有擴展記錄時,若該索引主記錄的數據段長度達到預設閾值,則創建若干個與該索引主記錄關聯的擴展記錄; 所述第一存儲模塊,還用于將該數據段中已存儲的數據塊索引與所述待存儲的數據塊索引存入相應的擴展記錄。
18.如權利要求17所述的文件索引存儲裝置,其特征在于,還包括: 第二存儲模塊,用于當判斷該索引主記錄未關聯有擴展記錄時,若該數據段長度未達到該預設閾值,則將該待存儲的數據塊索引存入索引主記錄的該數據段中。
19.如權利要求18所述的文件索引存儲裝置,其特征在于,還包括: 第三存儲模塊,用于當判斷該索引主記錄關聯有擴展記錄時,將該待存儲的數據塊索引存入相應的擴展記錄中。
20.如權利要求19所述的文件索引存儲裝置,其特征在于,所述的數據塊索引包括該數據塊的ID和有效數據長度。
21.如權利要求19所述的文件索引存儲裝置,其特征在于,所述數據塊索引具有固定長度。
22.如權利要求19所述的文件索引存儲裝置,其特征在于,所述數據塊索引在該數據段或擴展記錄中以數組形式存儲,與索引主記錄關聯的該擴展記錄也以數組形式存儲。
23.如權利要求22所述的文件索引存儲裝置,其特征在于,每個所述擴展記錄都用于存儲指定數量的數據塊索引。
24.如權利要求23所述的文件索引存儲裝置,其特征在于,所述第三存儲模塊用于: 當判斷該索引主記錄關聯有擴展記錄時,判斷擴展記錄數組中的最后一個擴展記錄存儲的數據塊索引是否達到該指定數量; 若該最后一個擴展記錄存儲的數據塊索引達到該指定數量,則再創建一個與該索引主記錄關聯的擴展記錄,并將該待存儲的數據塊索引存入所創建的該擴展記錄; 若該最后一個擴展記錄存儲的數據塊索引未達到該指定數量,則將該待存儲的數據塊索引存入該最后一個擴展記錄。
25.如權利要求19所述的文件索引存儲裝置,其特征在于,該索引主記錄包括頭部和所述數據段,該頭部包括結構標志和數據段長度信息; 該結構標志指示該索引主記錄是否關聯有擴展記錄。
26.如權利要求25所述的文件索引存儲裝置,其特征在于,所述判斷該文件對應的索引主記錄是否關聯有擴展記錄包括: 從該頭部中讀取該結構標志; 根據該結構標志判斷該索引主記錄是否關聯有擴展記錄。
27.如權利要求25所述的文件索引存儲裝置,其特征在于,還包括第二判斷模塊,用于: 當判斷該索引主記錄未關聯有擴展記錄時,從該頭部中讀取該數據段長度信息; 根據該數據段長度信息判斷該數據長度是否達到該預設閾值。
28.如權利要求25所述的文件索引存儲裝置,其特征在于,所述創建若干個與該索引主記錄關聯的擴展記錄包括: 創建若干個擴展記錄,并分別為每個擴展記錄分配一個ID ; 將各擴展記錄的ID記錄在該數據段中; 將該結構標志更新為指示索引主記錄關聯有擴展記錄。
29.如權利要求28所述的文件索引存儲裝置,其特征在于,所述第一存儲模塊、第二存儲模塊和第三存儲模塊分別還包括: 第一存儲子模塊,用于在該待存儲的數據塊索引存入數據段或相應的擴展記錄時,若該待存儲的數據塊索引對應該文件中的空洞,則在數據段或相應的擴展記錄中將該待存儲的數據塊索引的字節設為O。
30.如權利要求29所述的文件索引存儲裝置,其特征在于,所述第一存儲模塊和第三存儲模塊分別還包括: 第二存儲子模塊,用于當一擴展記錄中存儲的所有數據塊索引的字節都為O時,將數據段中該擴展記錄的ID更新為預設值。
31.如權利要求25所述的文件索引存儲裝置,其特征在于,所述第二存儲模塊,還用于: 當將所述待存儲的數據塊索引存入數據段后,更新該頭部中的數據段長度。
32.如權利要求28所述的文件索引存儲裝置,其特征在于,還包括修改模塊,用于: 當需要修改一目標擴展記錄時,生成該目標擴展記錄的備份擴展記錄,并為該備份擴展記錄分配一個ID ;根據修改操作修改該備份擴展記錄;當該修改操作結束后,將該數據段中該目標擴展記錄的ID替換為該備份擴展記錄的
ID0
【文檔編號】G06F17/30GK104424224SQ201310375596
【公開日】2015年3月18日 申請日期:2013年8月26日 優先權日:2013年8月26日
【發明者】婁繼冰, 李博, 黃偉, 黃楚加 申請人:深圳市騰訊計算機系統有限公司