專利名稱:文件緩存方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及文件緩存領(lǐng)域,特別涉及一種文件緩存方法及裝置。
背景技術(shù):
隨著信息化社會(huì)的發(fā)展,計(jì)算機(jī)病毒的威脅日益嚴(yán)重。那么,為了降低及避免計(jì)算機(jī)病毒對(duì)計(jì)算機(jī)所存儲(chǔ)文件的威脅,目前常用的解決辦法是使用殺毒軟件來(lái)實(shí)時(shí)監(jiān)控和掃描計(jì)算機(jī)磁盤上所存儲(chǔ)的文件,以及時(shí)查殺病毒,保障存儲(chǔ)文件的安全。為了提高掃描計(jì)算機(jī)磁盤上所存儲(chǔ)文件的速度,大部分的殺毒軟件會(huì)將曾掃描過(guò)的文件內(nèi)容(包括文件名、存儲(chǔ)路徑等資源)存放在內(nèi)存里,此時(shí)被占用的內(nèi)存空間被稱為緩存。以后每次掃描計(jì)算機(jī)磁盤上所存儲(chǔ)的文件時(shí),殺毒軟件會(huì)首先搜索緩存,如果緩存中存儲(chǔ)有本次掃描的文件內(nèi)容,則不必從計(jì)算機(jī)磁盤上獲取,直接從緩存中取出即可,從而提高掃描速度?,F(xiàn)有技術(shù)中,采用基于文件名的緩存方法。具體地,整個(gè)計(jì)算機(jī)磁盤共用一個(gè)緩存,且緩存的空間大小固定;將文件的文件名作為關(guān)鍵值來(lái)進(jìn)行哈希運(yùn)算,得到的哈希值便對(duì)應(yīng)一塊連續(xù)的存儲(chǔ)空間,將文件存入到該哈希值對(duì)應(yīng)的內(nèi)存中,緩存中則存儲(chǔ)文件的文件名與文件存儲(chǔ)地址間對(duì)應(yīng)關(guān)系的哈希表。由上可知,一旦文件被重命名,就需要重新計(jì)算其哈希值,尤其是對(duì)于多級(jí)文件目錄下的文件,一旦某一級(jí)文件目錄的名字發(fā)生變化,將導(dǎo)致該變化文件目錄下的所有文件都需要重新計(jì)算其哈希值,帶來(lái)很大的工作量,從而影響文件緩存的效率。
發(fā)明內(nèi)容
為了解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供了一種文件緩存方法及裝置。所述技術(shù)方案如下一種文件緩存的方法,所述方法包括獲取文件節(jié)點(diǎn),所述文件節(jié)點(diǎn)包括文件ID ;根據(jù)所述文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到所述文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址;判斷緩存哈希表中所述哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn),如果未存儲(chǔ)有所述文件節(jié)點(diǎn),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。一種文件緩存的裝置,所述裝置包括獲取模塊、計(jì)算模塊、判斷模塊和執(zhí)行模塊;所述獲取模塊,用于獲取文件節(jié)點(diǎn),所述文件節(jié)點(diǎn)包括文件ID ;所述計(jì)算模塊,用于根據(jù)所述獲取模塊獲得的文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到所述文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址;所述判斷模塊,用于判斷緩存哈希表中所述計(jì)算模塊計(jì)算得到的哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn);所述執(zhí)行模塊,用于當(dāng)所述判斷模塊的判斷結(jié)果為未存儲(chǔ)有所述文件節(jié)點(diǎn)時(shí),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。通過(guò)采用基于文件ID的文件緩存方法,當(dāng)文件名被重命名時(shí),文件ID并不會(huì)發(fā)生變化,使得文件的緩存不會(huì)受文件重命名的影響,并且文件ID與文件名相比,在利用哈希函數(shù)進(jìn)行哈希地址的運(yùn)算時(shí),使得計(jì)算更為簡(jiǎn)單。
圖I是本發(fā)明實(shí)施例I中提供的一種文件緩存的方法流程圖;圖2是本發(fā)明實(shí)施例2中提供的一種文件緩存的方法流程圖;圖3是本發(fā)明實(shí)施例2中提供的基于每個(gè)卷獨(dú)立的緩存結(jié)構(gòu)圖;圖4是本發(fā)明實(shí)施例2中提供的一種URL索引表不意圖;
圖5是本發(fā)明實(shí)施例3中提供的一種文件緩存的裝置框圖;圖6是本發(fā)明實(shí)施例4中提供的一種文件緩存的裝置框圖。
具體實(shí)施例方式為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施方式作進(jìn)一步地詳細(xì)描述。實(shí)施例I參見(jiàn)圖1,一種文件緩存的方法,該方法的執(zhí)行主體包括但不限于計(jì)算機(jī)等設(shè)備,具體步驟如下步驟101 :獲取文件節(jié)點(diǎn),該文件節(jié)點(diǎn)包括文件ID ;步驟102 :根據(jù)該文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到該文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址;步驟103 :判斷緩存哈希表中該哈希地址中是否存儲(chǔ)有該文件節(jié)點(diǎn);步驟104 :如果未存儲(chǔ)有該文件節(jié)點(diǎn),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。通過(guò)采用基于文件ID的文件緩存方法,當(dāng)文件名被重命名時(shí),文件ID并不會(huì)發(fā)生變化,使得文件的緩存不會(huì)受文件重命名的影響,并且文件ID與文件名相比,在利用哈希函數(shù)進(jìn)行哈希地址的運(yùn)算時(shí),使得計(jì)算更為簡(jiǎn)單。實(shí)施例2本發(fā)明提出了一種文件緩存的方法,主要指導(dǎo)思想是為磁盤的每個(gè)卷分配一個(gè)預(yù)定大小的緩存,即每個(gè)卷都對(duì)應(yīng)一個(gè)緩存哈希表;根據(jù)文件ID對(duì)文件進(jìn)行本地緩存,即在緩存哈希表中根據(jù)文件ID對(duì)文件節(jié)點(diǎn)進(jìn)行插入、查找及刪除等操作;另外,當(dāng)緩存被占滿時(shí),首先釋放緩存中那些最長(zhǎng)時(shí)間未被使用的文件,再釋放那些按照一定統(tǒng)計(jì)規(guī)則估計(jì)出來(lái)的未來(lái)被使用的可能性最低的文件,如此就能實(shí)現(xiàn)對(duì)緩存文件進(jìn)行選擇性淘汰,以提高掃描的響應(yīng)效率。參見(jiàn)圖2,一種文件緩存的方法,該方法的執(zhí)行主體包括但不限于計(jì)算機(jī)等設(shè)備,具體步驟如下步驟201 :為磁盤的每個(gè)卷建立一個(gè)緩存哈希表,該緩存哈希表包括文件節(jié)點(diǎn)和文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址,其中,緩存哈希表采用平衡二叉樹(shù)或鏈表的存儲(chǔ)結(jié)構(gòu);這里,將一個(gè)磁盤分區(qū)稱為一個(gè)卷,卷由卷ID來(lái)唯一標(biāo)識(shí),通常有兩大類型系統(tǒng)卷和普通卷。其中,系統(tǒng)卷通常用于存儲(chǔ)系統(tǒng)文件,如計(jì)算機(jī)C盤便是一個(gè)系統(tǒng)卷,普通卷通常用于存儲(chǔ)用戶文件,如計(jì)算機(jī)上的本地磁盤D和E等均是普通卷。
具體地,系統(tǒng)卷的緩存默認(rèn)可以存儲(chǔ)50000個(gè)文件節(jié)點(diǎn),普通卷的緩存默認(rèn)可以存儲(chǔ)5000個(gè)文件節(jié)點(diǎn)。其中,文件節(jié)點(diǎn)包括文件ID和文件的訪問(wèn)次數(shù),除此之外還可以包括文件插入時(shí)間、文件信任度和文件連接關(guān)系等內(nèi)容;本發(fā)明實(shí)施例重點(diǎn)利用文件節(jié)點(diǎn)中的文件ID和文件的訪問(wèn)次數(shù)來(lái)實(shí)現(xiàn)文件緩存,文件節(jié)點(diǎn)中的其他內(nèi)容不再本發(fā)明實(shí)施例的保護(hù)范圍之內(nèi),此處就不再敘述。參見(jiàn)圖3,圖3示例性地給出了一個(gè)系統(tǒng)卷、兩個(gè)普通卷所對(duì)應(yīng)的緩存哈希表的情況。 這里,緩存哈希表采用平衡二叉樹(shù)或鏈表的存儲(chǔ)結(jié)構(gòu)的好處在于若哈希函數(shù)f對(duì)不同節(jié)點(diǎn)的關(guān)鍵字得到相同的哈希地址時(shí),如關(guān)鍵字Kl古K2,而哈希地址f (Kl)=f(K2),可以將哈希地址相同的不同的關(guān)鍵字連接在同一個(gè)單鏈表中,這種存儲(chǔ)結(jié)構(gòu)為平衡二叉樹(shù)或鏈表結(jié)構(gòu)。本發(fā)明實(shí)施例采用哈希(即關(guān)鍵字-地址轉(zhuǎn)換法)法來(lái)建立文件的緩存哈希表。哈希法的基本思想是以節(jié)點(diǎn)的關(guān)鍵字K為自變量,通過(guò)一個(gè)確定的函數(shù)關(guān)系f,計(jì)算出對(duì)應(yīng)的函數(shù)值f (K),把函數(shù)值f (K)解釋為節(jié)點(diǎn)的存儲(chǔ)地址,將節(jié)點(diǎn)存入f (K)所指的存儲(chǔ)位置上。用哈希法存儲(chǔ)的線性表叫做哈希表,哈希表項(xiàng)給出了節(jié)點(diǎn)的關(guān)鍵字與存儲(chǔ)地址間的對(duì)應(yīng)關(guān)系,函數(shù)f稱為哈希函數(shù),f (K)稱為哈希地址。具體地,本發(fā)明實(shí)施例對(duì)文件進(jìn)行緩存時(shí),采用文件節(jié)點(diǎn)中的文件ID作為關(guān)鍵字。下面以構(gòu)建QQ殺毒軟件已掃描文件的緩存哈希表為例來(lái)說(shuō)明緩存哈希表的構(gòu)建過(guò)程QQ殺毒軟件已掃描過(guò)的文件有{文件1,文件2,......,文件25,......},而文件
ID對(duì)應(yīng)的集合K= {0,1,......,25,......},選擇哈希函數(shù)F,該哈希函數(shù)F (K)的取值為
K,即F(K) = K。那么,構(gòu)建的緩存哈希表如表I所示表I
權(quán)利要求
1.一種文件緩存的方法,其特征在于,所述方法包括 獲取文件節(jié)點(diǎn),所述文件節(jié)點(diǎn)包括文件ID ; 根據(jù)所述文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到所述文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址; 判斷緩存哈希表中所述哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn), 如果未存儲(chǔ)有所述文件節(jié)點(diǎn),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述將所述文件節(jié)點(diǎn)放入所述緩存哈希表中,包括 計(jì)算所述緩存哈希表的剩余容量; 判斷所述剩余容量是否小于所述文件節(jié)點(diǎn)的大小, 如果小于,釋放所述緩存哈希表中訪問(wèn)次數(shù)小于預(yù)設(shè)值的文件節(jié)點(diǎn),返回所述計(jì)算所述緩存哈希表的剩余容量的操作; 如果不小于,將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于,所述將所述文件節(jié)點(diǎn)放入所述緩存哈希表中,包括將所述文件節(jié)點(diǎn)放入所述緩存哈希表中所述哈希地址對(duì)應(yīng)的平衡二叉樹(shù)或鏈表中。
4.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述方法還包括 建立卷對(duì)應(yīng)的緩存哈希表,所述卷對(duì)應(yīng)的緩存哈希表由卷ID標(biāo)識(shí); 相應(yīng)地,所述判斷緩存哈希表中所述哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn)之前包括 獲取所述文件節(jié)點(diǎn)所在卷的卷ID ; 根據(jù)獲取的卷ID查找得到所述文件節(jié)點(diǎn)所在卷對(duì)應(yīng)的緩存哈希表。
5.一種文件緩存的裝置,其特征在于,所述裝置包括獲取模塊、計(jì)算模塊、判斷模塊和執(zhí)行模塊; 所述獲取模塊,用于獲取文件節(jié)點(diǎn),所述文件節(jié)點(diǎn)包括文件ID ; 所述計(jì)算模塊,用于根據(jù)所述獲取模塊獲得的文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到所述文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址; 所述判斷模塊,用于判斷緩存哈希表中所述計(jì)算模塊計(jì)算得到的哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn); 所述執(zhí)行模塊,用于當(dāng)所述判斷模塊的判斷結(jié)果為未存儲(chǔ)有所述文件節(jié)點(diǎn)時(shí),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。
6.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述執(zhí)行模塊,包括 計(jì)算單元,用于計(jì)算所述緩存哈希表的剩余容量; 判斷單元,用于判斷所述計(jì)算單元得到的剩余容量是否小于所述文件節(jié)點(diǎn)的大小;第一執(zhí)行單元,用于當(dāng)所述判斷單元的判斷結(jié)果為小于時(shí),釋放所述緩存哈希表中訪問(wèn)次數(shù)小于預(yù)設(shè)值的文件節(jié)點(diǎn),返回所述計(jì)算單元; 第二執(zhí)行單元,用于當(dāng)所述判斷單元的判斷結(jié)果為不小于時(shí),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。
7.根據(jù)權(quán)利要求6所述的裝置,其特征在于,所述第二執(zhí)行單元,具體用于將所述文件節(jié)點(diǎn)放入所述緩存哈希表中所述哈希地址對(duì)應(yīng)的平衡二叉樹(shù)或鏈表中。
8.根據(jù)權(quán)利要求5所述的裝置,其特征在于,所述裝置還包括建立模塊,用于建立卷對(duì)應(yīng)的緩存哈希表,所述卷對(duì)應(yīng)的緩存哈希表由卷ID標(biāo)識(shí); 第二獲取模塊,用于獲取所述文件節(jié)點(diǎn)所在卷的卷ID ; 查找模塊,用于根據(jù)所述第二獲取模塊獲取的卷ID查找得到所述文件節(jié)點(diǎn)所在卷對(duì)應(yīng)的緩存哈希表。
全文摘要
本發(fā)明公開(kāi)了一種文件緩存的方法及裝置,屬于文件緩存領(lǐng)域。方法包括獲取文件節(jié)點(diǎn),所述文件節(jié)點(diǎn)包括文件ID;根據(jù)所述文件ID及預(yù)設(shè)哈希函數(shù)計(jì)算得到所述文件節(jié)點(diǎn)對(duì)應(yīng)的哈希地址;判斷緩存哈希表中所述哈希地址中是否存儲(chǔ)有所述文件節(jié)點(diǎn),如果未存儲(chǔ)有所述文件節(jié)點(diǎn),將所述文件節(jié)點(diǎn)放入所述緩存哈希表中。實(shí)現(xiàn)了基于文件ID的文件緩存,使得文件的緩存不會(huì)受文件重命名的影響,并且文件ID與文件名相比,在利用哈希函數(shù)進(jìn)行哈希地址的運(yùn)算時(shí),使得計(jì)算更為簡(jiǎn)單。
文檔編號(hào)G06F17/30GK102737064SQ20111009547
公開(kāi)日2012年10月17日 申請(qǐng)日期2011年4月15日 優(yōu)先權(quán)日2011年4月15日
發(fā)明者謝飛, 高小明 申請(qǐng)人:騰訊科技(深圳)有限公司