一種海量小文件的處理方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種海量小文件的處理方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)、物聯(lián)網(wǎng)、云計(jì)算、大數(shù)據(jù)等技術(shù)的發(fā)展,用戶數(shù)據(jù)呈現(xiàn)爆炸式增長,其中小文件數(shù)量達(dá)到數(shù)千萬乃至數(shù)億的規(guī)模,并且逐年增長,而且這些小文件和大文件通常是混合地存儲在一起,極大的影響了文件存儲以及檢索的效率。
[0003]目前,針對文件的存儲與檢索,主要使用基于傳統(tǒng)磁盤之上建立的本地文件系統(tǒng)、分布式文件系統(tǒng)、對象存儲系統(tǒng)等來實(shí)現(xiàn)。然而,所述本地文件系統(tǒng)、分布式文件系統(tǒng)和對象存儲系統(tǒng)等磁盤文件系統(tǒng),主要是針對大文件的存儲與檢索而設(shè)計(jì)的,當(dāng)用來處理海量小文件時(shí),在存儲和檢索效率方面會大幅降低,甚至無法正常進(jìn)行。
【發(fā)明內(nèi)容】
[0004]鑒于此,本發(fā)明實(shí)施例提供一種海量小文件的處理方法及系統(tǒng),以提高海量小文件存儲以及檢索的效率。
[0005]本發(fā)明實(shí)施例是這樣實(shí)現(xiàn)的,一種海量小文件的處理方法,所述方法包括:
[0006]在文件處理功能啟動后,將大文件頭部結(jié)構(gòu)信息以及大文件數(shù)據(jù)存儲區(qū)內(nèi)的小文件存儲結(jié)構(gòu)信息以鏈表的方式緩存到內(nèi)存中;
[0007]在檢測到文件存儲時(shí),判斷待存儲的文件的大小是否小于預(yù)設(shè)值;
[0008]若是,將所述待存儲的文件合并成大文件進(jìn)行存儲,并更新所述內(nèi)存中的鏈表信息。
[0009]本發(fā)明實(shí)施例的另一目的在于提供一種海量小文件的處理系統(tǒng),所述系統(tǒng)包括:
[0010]緩存單元,用于在文件處理功能啟動后,將大文件頭部結(jié)構(gòu)信息以及大文件數(shù)據(jù)存儲區(qū)內(nèi)的小文件存儲結(jié)構(gòu)信息以鏈表的方式緩存到內(nèi)存中;
[0011]第一判斷單元,用于在檢測到文件存儲時(shí),判斷待存儲的文件的大小是否小于預(yù)設(shè)值;
[0012]合并單元,用于在第一判斷單元判斷結(jié)果為是時(shí),將所述待存儲的文件合并成大文件進(jìn)行存儲,并更新所述內(nèi)存中的鏈表信息。
[0013]本發(fā)明實(shí)施例與現(xiàn)有技術(shù)相比存在的有益效果是:本發(fā)明實(shí)施例通過將小文件合并成大文件進(jìn)行存儲,把大量的小文件數(shù)據(jù)變成大文件數(shù)據(jù),減少了文件數(shù)量,從而減少了元數(shù)據(jù)服務(wù)中的元數(shù)據(jù)數(shù)量,可有效提高文件檢索以及查詢的效率。而且,采用小文件合并存儲機(jī)制后,小文件的元數(shù)據(jù)和數(shù)據(jù)可以一并連續(xù)存儲在大文件中,從而可大大增強(qiáng)單個(gè)小文件內(nèi)部的數(shù)據(jù)局部性。另外,采用小文件合并存儲機(jī)制后,I/o訪問流程也將發(fā)生極大變化,很多小文件共享一個(gè)大文件,使得open操作可以轉(zhuǎn)換成開銷較小的seek操作,根據(jù)索引定位到大文件內(nèi)部相應(yīng)位置即可,從而有效節(jié)省系統(tǒng)開銷,具有較強(qiáng)的易用性和實(shí)用性。
【附圖說明】
[0014]為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0015]圖1是本發(fā)明實(shí)施例一提供的海量小文件處理方法的實(shí)現(xiàn)流程圖;
[0016]圖2是本發(fā)明實(shí)施例一提供的合并的大文件內(nèi)部結(jié)構(gòu)的示意圖;
[0017]圖3是本發(fā)明實(shí)施例二提供的海量小文件處理系統(tǒng)的組成結(jié)構(gòu)圖。
【具體實(shí)施方式】
[0018]以下描述中,為了說明而不是為了限定,提出了諸如特定系統(tǒng)結(jié)構(gòu)、技術(shù)之類的具體細(xì)節(jié),以便透切理解本發(fā)明實(shí)施例。然而,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)清楚,在沒有這些具體細(xì)節(jié)的其它實(shí)施例中也可以實(shí)現(xiàn)本發(fā)明。在其它情況中,省略對眾所周知的系統(tǒng)、裝置、電路以及方法的詳細(xì)說明,以免不必要的細(xì)節(jié)妨礙本發(fā)明的描述。
[0019]為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實(shí)施例來進(jìn)行說明。
[0020]實(shí)施例一:
[0021]圖1示出了本發(fā)明實(shí)施例一提供的海量小文件處理方法的實(shí)現(xiàn)流程,該方法過程詳述如下:
[0022]在步驟SlOl中,在文件處理功能啟動后,將大文件頭部結(jié)構(gòu)信息以及大文件數(shù)據(jù)存儲區(qū)內(nèi)的小文件存儲結(jié)構(gòu)信息以鏈表的方式緩存到內(nèi)存中。
[0023]在本發(fā)明實(shí)施例中,所述小文件是指文件大小小于預(yù)設(shè)值(例如1MB)的文件。需要說明的是,用戶可以根據(jù)實(shí)際情況調(diào)整所述預(yù)設(shè)值。
[0024]其中,所述大文件頭部結(jié)構(gòu)信息包括CheckSum(4字節(jié))校驗(yàn)總和、VolName (256字節(jié))名稱、VolSize (4字節(jié))總大小、VolId (4字節(jié))唯一 ID號以及LdateTime (4字節(jié))最后寫時(shí)間等。所述小文件存儲結(jié)構(gòu)信息包括小文件頭部結(jié)構(gòu)信息以及小文件數(shù)據(jù)存儲區(qū)信息,所述小文件存儲結(jié)構(gòu)信息包括Checksum (4字節(jié))校驗(yàn)總和、FiIeName (256字節(jié))名稱、FileSize (4字節(jié))總大小、FileAttr (4字節(jié))文件元數(shù)據(jù)、LdateTime (4字節(jié))最后寫時(shí)間以及Flag(l字節(jié))文件有效性標(biāo)記等;所述小文件數(shù)據(jù)存儲區(qū)用于存儲小文件二進(jìn)制數(shù)據(jù)。具體如圖2所示。
[0025]另外,本發(fā)明實(shí)施例將大文件頭部結(jié)構(gòu)信息以及大文件數(shù)據(jù)存儲區(qū)內(nèi)的小文件存儲結(jié)構(gòu)信息以鏈表的方式緩存到內(nèi)存中,可有效提高合并小文件的操作效率。
[0026]在步驟S102中,在檢測到文件存儲時(shí),判斷待存儲的文件的大小是否小于預(yù)設(shè)值;若判斷結(jié)果為“是”,則執(zhí)行步驟S103,否則執(zhí)行步驟S104。
[0027]在步驟S103中,將所述待存儲的文件合并成大文件進(jìn)行存儲,并更新所述內(nèi)存中的鏈表信息。
[0028]具體的可以是,將所述待存儲的文件追加寫到某個(gè)大文件的后面,并更新所述內(nèi)存中的鏈表信息以及該大文件的頭部結(jié)構(gòu)信息,具體如圖2所示。
[0029]在本發(fā)明實(shí)施例中,當(dāng)所述待存儲的文件的小于預(yù)設(shè)值時(shí),說明該待存儲的文件為小文件,則對該待存儲的文件進(jìn)行合并操作后再存儲。
[0030]進(jìn)一步的,在所述待存儲的文件的大小小于預(yù)設(shè)值時(shí),繼續(xù)判斷所述待存儲的文件是否為新產(chǎn)生的文件,若是,將所述待存儲的文件合并成大文件進(jìn)行存儲。
[0031]進(jìn)一步的,本發(fā)明實(shí)施例在更新所述內(nèi)存中的鏈表信息之后,還包括:
[0032]在檢測到對所述待存儲的文件的修改操作時(shí),將所述待存儲的文件的有效性標(biāo)記設(shè)置為修改狀態(tài);
[0033]在檢測到對所述待存儲的文件的刪除操作時(shí),將所述待存儲的文件的有效性標(biāo)記設(shè)置為刪除狀態(tài)。
[0034]本發(fā)明實(shí)施例對小文件的修改和刪除操作,通過大文件中的小文件頭部結(jié)構(gòu)信息中的文件有效性標(biāo)記來實(shí)現(xiàn)。由于對小文件的修改和刪除操作,會造成大文件內(nèi)部的碎片空洞,因此對修改操作,采用文件有效性標(biāo)記和數(shù)據(jù)追加寫的方式來實(shí)現(xiàn);對刪除操作,采用文件有效性標(biāo)記的方式來實(shí)現(xiàn),并定時(shí)對大文件的碎片空洞進(jìn)行處理,以保證大文件的數(shù)據(jù)局部性要求和提高存儲效率。
[0035]作為本發(fā)明的一較佳實(shí)施例,本發(fā)明實(shí)施例在更新所述內(nèi)存中的鏈表信息之后,還包括:
[0036]在接收到對所述待存儲文件的檢索請求時(shí),根據(jù)所述待存儲文件的位置偏移值讀取所述待存儲文件。
[0037]具體的可以是,在接收到對所述待存儲文件的檢索請求時(shí),在所述內(nèi)存的鏈表信息中查找所述待存儲文件所在的鏈表節(jié)點(diǎn),根據(jù)所述鏈表節(jié)點(diǎn)定位所述待存儲文件所處的合并大文件的位置偏移值,根據(jù)所述位置偏移值定位到所述待存儲文件的存儲位置,并讀取所述待存儲文件。
[0038]通過本發(fā)明可以有效提高小文件存儲和檢索的效率。
[0039]在步驟S104中,通過操作系統(tǒng)的文件系統(tǒng)處理所述待存儲的文件。
[0040]在本實(shí)施例中,當(dāng)所述待存儲文件不小于所述預(yù)設(shè)值時(shí),判定所述待存儲文件為大文件,對所述待存儲文件不做任何處理,直接通過操作系統(tǒng)的文件系統(tǒng)處理所述待存儲的文件。
[0041]需要說明的是,本發(fā)明實(shí)施例所提供的功能可以基于操作系統(tǒng)中文件系統(tǒng)的過濾驅(qū)動模塊運(yùn)行,接管操作系統(tǒng)的READ、WRITE、SEEK等文件操作函數(shù)。也可以作為一個(gè)小文件功能判斷模塊運(yùn)行,提供API由其它軟件調(diào)用,其它軟件通過API提供要處理的小文件信息。
[0042]本發(fā)明實(shí)施例通過把小文件合并成大文件進(jìn)行存儲和檢索,可充分發(fā)揮現(xiàn)有技術(shù)針對大文件管理而設(shè)計(jì)的各種策略,通過采用減少數(shù)據(jù)訪問次數(shù)和減少數(shù)據(jù)訪問時(shí)間的優(yōu)化思路來實(shí)現(xiàn)一種海量小文件的存儲與檢索方法。通過減少元數(shù)據(jù)操作、增加數(shù)據(jù)局部性、簡化I/o訪問流程、并在合并的大文件中加上文件有效性標(biāo)記等方法提高小文件的存儲效率和訪問效率,從而達(dá)到優(yōu)化海量小文件存儲與檢索的效果。本發(fā)明實(shí)施例適用于包括本地文件系統(tǒng)、分布式文件系統(tǒng)和對象存儲系統(tǒng),不受特定系統(tǒng)的限制,與基于不同文件系統(tǒng)自身的特性出發(fā)進(jìn)行局部優(yōu)化的方法相比,本發(fā)明實(shí)施例更加簡單、高效,具有有較強(qiáng)的易用性和實(shí)用性。
[0043]實(shí)施例二:
[0044]圖3示出了本發(fā)明實(shí)施例二提供的海量小文件處理系統(tǒng)的組成結(jié)構(gòu),為了便于說明,僅示出了與本發(fā)明實(shí)施例相關(guān)的部分。
[0045]該海量小文件處理系統(tǒng)可以是內(nèi)置于終端設(shè)備(如個(gè)人計(jì)算機(jī)、筆記本電腦等)中的軟件單元、硬件單元或者軟硬件相結(jié)合的單元,或者作為獨(dú)立的掛件集成到終端設(shè)備或者終端設(shè)備的應(yīng)用系統(tǒng)中。
[0046]該海量小文件處理系統(tǒng)包括:
[0047]緩存單元31,用于在文件處理功能啟動后,將大文件頭部結(jié)構(gòu)信息以及大文件數(shù)據(jù)存儲區(qū)內(nèi)的小文件存儲結(jié)構(gòu)信息以鏈表的方式緩存到內(nèi)存中;
[0048]判斷單元32,用于在檢測到文件存儲時(shí),判斷待存儲的文件的大小是否小于預(yù)設(shè)值;
[0049]合并單元33,用于在判斷單元32判斷結(jié)果為是時(shí),將所述待存儲的文件合并成大文件進(jìn)行存儲,并更新所述內(nèi)存中的鏈表信息。
[0050]進(jìn)一步的,所述合并單元33具體用于:
[0051]將所述待存儲的文件追加寫到某個(gè)大文件的后面,并更新所述內(nèi)存中的鏈表信息以及該大文件的頭部結(jié)構(gòu)信息。
[0052]進(jìn)一步的,所述系統(tǒng)還包括:
[0053]修改單元34,用于在檢測到對所述待存儲的文件的修改操作時(shí),將所述待存儲的文件的有效性標(biāo)記設(shè)置為修改狀態(tài);
[0054]刪除單元35,用于在檢測到對所述待存儲的文件的刪除操作時(shí),將所述待存儲的文件的有效性標(biāo)記設(shè)置為刪除狀態(tài);
[0055]檢索單元36,用于在更新所述內(nèi)存中的鏈表信息之后,若接收到對所述待存儲文件的檢索請求時(shí),根據(jù)所述待存儲文件的位置偏移值讀取所述待存儲文件。