專利名稱:一種提高搜索信息速度的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)及通信技術(shù)領(lǐng)域,尤其涉及一種提高搜索信息速度的方法及系統(tǒng)。
背景技術(shù):
目前對(duì)象緩存架構(gòu)大都使用Java實(shí)現(xiàn),開(kāi)源的項(xiàng)目主要有Jive、OSCache、Java Caching System、EHCache、ShiftOne、SwarmCache、TreeCache/JBossCache、WhirlyCache。
Jive是一個(gè)開(kāi)放的Java源代碼項(xiàng)目。Jive緩存信息為把所要緩存的對(duì)象加到哈希映射表HashMap中,用兩個(gè)雙向鏈表分別維持著緩存對(duì)象和每個(gè)緩存對(duì)象的生命周期。如果一個(gè)緩存對(duì)象被訪問(wèn)到,那么就把它放到鏈表的最前面,然后不定時(shí)地把要緩存的對(duì)象加入鏈表中,把過(guò)期對(duì)象刪除,如此反復(fù)。
由于Java是使用虛擬機(jī)動(dòng)態(tài)分配和回收內(nèi)存,執(zhí)行效率不高,而且大都為網(wǎng)站系統(tǒng)而設(shè)計(jì),不太適用于對(duì)性能要求很高的搜索系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明提供一種提高搜索信息速度的方法及系統(tǒng),以解決現(xiàn)有技術(shù)在搜索信息時(shí)存在效率低的問(wèn)題。
本發(fā)明提供以下技術(shù)方案一種存儲(chǔ)信息的方法,包括如下步驟將與信息相關(guān)的關(guān)鍵詞生成哈希值;從預(yù)先設(shè)定的數(shù)組中分配一個(gè)空閑的下標(biāo)值,該數(shù)組中的各元素用于標(biāo)識(shí)數(shù)組內(nèi)存池中的一個(gè)存儲(chǔ)單元;在哈希表中建立所述哈希值與下標(biāo)值間的映射關(guān)系,并將與所述關(guān)鍵詞相關(guān)的信息存儲(chǔ)到所述下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中標(biāo)識(shí)的存儲(chǔ)單元內(nèi),使通過(guò)所述哈希值能夠索引到存儲(chǔ)單元中的信息。
其中根據(jù)所有已存儲(chǔ)信息的存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素的下標(biāo)值形成最近最少使用鏈表,鏈表頭對(duì)應(yīng)最近最常使用的存儲(chǔ)單元的下標(biāo)值,鏈表尾對(duì)應(yīng)最近最少使用的存儲(chǔ)單元的下標(biāo)值。
分配空閑存儲(chǔ)單元存儲(chǔ)信息時(shí),或使用所述最近最少使用鏈表中的節(jié)點(diǎn)所對(duì)應(yīng)的存儲(chǔ)單元內(nèi)的信息時(shí),將該存儲(chǔ)單元對(duì)應(yīng)的節(jié)點(diǎn)添加或移動(dòng)到鏈表頭。
當(dāng)需要釋放存儲(chǔ)單元時(shí),從所述最近最少使用鏈表的尾部取出節(jié)點(diǎn)值并重置對(duì)應(yīng)的存儲(chǔ)單元,以及從所述密集哈希表中刪除對(duì)應(yīng)的哈希值和下標(biāo)值的對(duì)應(yīng)關(guān)系。
根據(jù)所有空閑的存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素的下標(biāo)值形成空閑鏈表;當(dāng)分配存儲(chǔ)單元時(shí)從該空閑鏈表中取出頭節(jié)點(diǎn),當(dāng)最近最少使用鏈表中釋放存儲(chǔ)單元的下標(biāo)值時(shí),在該空閑鏈表的尾部添加該下標(biāo)值。
所述哈希表為密集型哈希表。
一種提高搜索信息速度的方法,包括如下步驟A、根據(jù)搜索請(qǐng)求,將用于搜索信息的關(guān)鍵詞生成哈希值;B、利用所述哈希值查詢用于索引緩存的搜索結(jié)果信息的哈希表,判斷是否緩存有該關(guān)鍵詞的搜索結(jié)果信息;若是,則進(jìn)行步驟C、D,否則,進(jìn)行步驟E、F;C、從所述哈希表中獲得所述哈希值所對(duì)應(yīng)的數(shù)值,并將該數(shù)值作為用于標(biāo)識(shí)數(shù)組內(nèi)存池中的存儲(chǔ)單元的數(shù)組的下標(biāo)值;D、從所述下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息,將該信息返回給請(qǐng)求方;E、由搜索引擎利用所述關(guān)鍵詞進(jìn)行搜索,獲得的搜索結(jié)果信息;F、分配一個(gè)空閑的數(shù)組下標(biāo)值,在型哈希表中建立所述哈希值與下標(biāo)值間的映射關(guān)系,將所述搜索結(jié)果信息存儲(chǔ)到該下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中標(biāo)識(shí)的存儲(chǔ)單元內(nèi),并將搜索結(jié)果信息返回給請(qǐng)求方。
其中根據(jù)所有已存儲(chǔ)搜索結(jié)果信息的存儲(chǔ)單元形成最近最少使用鏈表,鏈表中的每個(gè)節(jié)點(diǎn)關(guān)聯(lián)一個(gè)已緩存搜索結(jié)果信息的存儲(chǔ)單元,其中,鏈表頭對(duì)應(yīng)最近最常使用的存儲(chǔ)單元的下標(biāo)值,鏈表尾對(duì)應(yīng)最近最少使用的存儲(chǔ)單元的下標(biāo)值。
分配存儲(chǔ)單元存儲(chǔ)搜索結(jié)果信息時(shí),或所述最近最少使用鏈表中的節(jié)點(diǎn)所對(duì)應(yīng)的存儲(chǔ)單元內(nèi)的搜索結(jié)果信息被使用時(shí),將該存儲(chǔ)單元對(duì)應(yīng)的節(jié)點(diǎn)添加或移動(dòng)到鏈表頭。
當(dāng)需要釋放存儲(chǔ)單元時(shí),從所述最近最少使用鏈表的尾部取出節(jié)點(diǎn)并重置對(duì)應(yīng)的存儲(chǔ)單元,以及從所述哈希表中刪除對(duì)應(yīng)的哈希值和下標(biāo)值的對(duì)應(yīng)關(guān)系。
根據(jù)所有空閑的存儲(chǔ)單元形成空閑鏈表,該鏈表中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)數(shù)組內(nèi)存池中的一個(gè)存儲(chǔ)單元;當(dāng)分配存儲(chǔ)單元存儲(chǔ)搜索結(jié)果信息時(shí)從該空閑鏈表中取出頭節(jié)點(diǎn),當(dāng)最近最少使用鏈表中釋放存儲(chǔ)單元的下標(biāo)值時(shí),在該空閑鏈表的尾部添加該下標(biāo)值。
從存儲(chǔ)單元讀取搜索結(jié)果信息時(shí),還對(duì)該搜索結(jié)果信息進(jìn)行有效性檢查,并根據(jù)檢查結(jié)果按下述情況分別處理若確定所述搜索結(jié)果信息的已保存時(shí)間在配置的信息有效時(shí)間內(nèi),則將搜索結(jié)果信息返回給請(qǐng)求方;若確定所述搜索結(jié)果信息的已保存時(shí)間大于配置的信息有效時(shí)間并且小于最大生命周期時(shí)間,則在讀取該搜索結(jié)果信息后釋放該存儲(chǔ)單元,并利用所述關(guān)鍵詞重搜索信息并緩存;若確定所述搜索結(jié)果信息的已保存時(shí)間不小于配置的最大生命周期時(shí)間,則釋放存儲(chǔ)單元,利用所述關(guān)鍵詞重搜索信息,并將搜索結(jié)果提供給請(qǐng)求方并緩存。
所述哈希表為密集型哈希表。
一種緩存系統(tǒng),包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息;哈希值生成模塊,用于將與信息相關(guān)的關(guān)鍵詞生成哈希值;哈希表,用于保存哈希值與數(shù)組中元素的下標(biāo)識(shí)值之間的映射關(guān)系;管理模塊,用于管理所述數(shù)組內(nèi)存池中的已存儲(chǔ)信息的存儲(chǔ)單元和空閑的存儲(chǔ)單元;保存信息模塊,將信息存儲(chǔ)到所述存儲(chǔ)單元,并在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值之間的映射關(guān)系。
一種搜索系統(tǒng),包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息;哈希值生成模塊,用于將搜索關(guān)鍵詞生成哈希值;哈希表,用于保存哈希值與數(shù)組中元素的下標(biāo)識(shí)值之間的映射關(guān)系,以及根據(jù)所述哈希值進(jìn)行查詢并提供查詢結(jié)果;管理模塊,用于管理所述數(shù)組內(nèi)存池中的存儲(chǔ)單元,將哈希值提供給所述哈希表和根據(jù)哈希表的查詢結(jié)果判斷是否緩存有所述關(guān)鍵詞的搜索結(jié)果信息,以及將搜索結(jié)果信息返回給請(qǐng)求方;搜索引擎,用于在所述管理模塊確定未緩存有搜索結(jié)果信息時(shí),利用所述關(guān)鍵詞搜索信息,并返回給管理模塊;信息存取模塊,用于在所述查詢模塊確定緩存有搜索結(jié)果信息時(shí),從所述下標(biāo)值確定的數(shù)組元素在數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息;或者,將搜索引擎搜索的結(jié)果信息存儲(chǔ)到所述存儲(chǔ)單元,以及在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值的映射關(guān)系。
本發(fā)明具有以下有益效果1、本發(fā)明在哈希表中使用需要查詢的關(guān)鍵詞的散列值作為關(guān)鍵(key)值,存儲(chǔ)單元所在的內(nèi)存池?cái)?shù)組下標(biāo)值作為哈希表key值的對(duì)應(yīng)值(value),能夠?qū)崿F(xiàn)從查詢關(guān)鍵字到數(shù)組內(nèi)存池索引值的快速定位和降低系統(tǒng)的負(fù)載,同時(shí)還能提高對(duì)查詢和存儲(chǔ)請(qǐng)求的并發(fā)處理能力。
2、由于密集型哈希表是一個(gè)使用C數(shù)組作為內(nèi)部存儲(chǔ)結(jié)構(gòu)的哈希表,這樣的存儲(chǔ)結(jié)構(gòu)與標(biāo)準(zhǔn)哈希表相比可以帶來(lái)近50%的速度提升,因此,本發(fā)明采用密集型哈希表索引緩存信息,能夠大幅度提高系統(tǒng)搜索的響應(yīng)速度。
3、本發(fā)明中數(shù)組和對(duì)應(yīng)存儲(chǔ)單元采用靜態(tài)配置,因此,還可降低動(dòng)態(tài)分配所帶來(lái)的損耗。
圖1為本發(fā)明中存儲(chǔ)信息的關(guān)系示意圖;圖2為本發(fā)明中存儲(chǔ)信息的流程圖;圖3為本發(fā)明搜索信息的流程;圖4為本發(fā)明中緩存系統(tǒng)的結(jié)構(gòu)示意圖;圖5為本發(fā)明中搜索系統(tǒng)的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為了提高搜索信息的效率,本發(fā)明利用數(shù)組內(nèi)存池緩存搜索結(jié)果信息,利用哈希表作索引。當(dāng)需要搜索時(shí)先通過(guò)哈希表查詢是否緩存有相應(yīng)的搜索結(jié)果信息,若有則直接讀取,若無(wú)則進(jìn)行搜索,并將搜索后的搜索結(jié)果信息返回給請(qǐng)求方和緩存該搜索結(jié)果信息。本發(fā)明中的存儲(chǔ)關(guān)系如圖1所示。
數(shù)組內(nèi)存池是由緩存對(duì)象構(gòu)成的數(shù)組,數(shù)組內(nèi)存池包括多個(gè)用于存儲(chǔ)信息的存儲(chǔ)單元(或稱元素),數(shù)組中的每個(gè)數(shù)組元素標(biāo)識(shí)一個(gè)存儲(chǔ)單元。每個(gè)存儲(chǔ)單元還包含有用于輔助管理的信息,這些包括建立時(shí)間、緩存信息和前后索引信息等。該內(nèi)存池是在程序啟動(dòng)時(shí)根據(jù)配置分配固定的內(nèi)存,以降低動(dòng)態(tài)分配所帶來(lái)的損耗。
為了提供效率,最佳方式是使用密集型哈希表。密集型哈希表是一個(gè)使用C數(shù)組作為內(nèi)部存儲(chǔ)結(jié)構(gòu)的哈希表,這樣的存儲(chǔ)結(jié)構(gòu)與標(biāo)準(zhǔn)哈希表相比可以帶來(lái)近50%的速度提升。哈希表中使用需要查詢的關(guān)鍵詞的散列值作為它的key值,而查詢結(jié)果所在的內(nèi)存池?cái)?shù)組下標(biāo)值作為哈希表key值的對(duì)應(yīng)value,實(shí)現(xiàn)從查詢關(guān)鍵字到數(shù)組內(nèi)存池索引值的快速定位。可以通過(guò)MD5算法將關(guān)鍵詞生成哈希值(散列值)。
最近最少使用列表(LRU list)為雙向鏈表結(jié)構(gòu),用于管理內(nèi)存池,鏈表節(jié)點(diǎn)存儲(chǔ)的是數(shù)組內(nèi)存池的數(shù)組下標(biāo)值,即每一個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)存儲(chǔ)單元。鏈表頭為最近最常使用(MRU)端,鏈表尾為最近最少使用(LRU)端。每當(dāng)一個(gè)緩沖區(qū)被引用時(shí),將該節(jié)點(diǎn)置于鏈表的MRU端,若數(shù)組內(nèi)存池中沒(méi)有空閑的緩沖區(qū)可用是釋放LRU端的節(jié)點(diǎn)。
空閑列表(Free list)為普通的鏈表,系統(tǒng)初始化時(shí)將數(shù)組內(nèi)存池的索引值(即數(shù)組下標(biāo)值)都放置在該鏈表中,當(dāng)需要保存新的查詢結(jié)果時(shí),它從空閑鏈表的頭部摘出一個(gè)緩沖區(qū),同時(shí)將該緩沖區(qū)加到LRU list的MRU端。當(dāng)數(shù)組內(nèi)存池沒(méi)有空閑緩沖區(qū)可用時(shí),則從LRU list釋放LRU節(jié)點(diǎn)到free list中。
數(shù)組內(nèi)存池的數(shù)組元素個(gè)數(shù)根據(jù)需要存儲(chǔ)的信息量決定設(shè)置,該值是靜態(tài)配置,在程序運(yùn)行期間不能修改。初始化時(shí),數(shù)組內(nèi)存池中緩存單元沒(méi)有前/后向元素(如其初始值為-1),最近最少使用列表(LRU list)中沒(méi)有元素,而所有的數(shù)組下標(biāo)值均保存在空閑列表(Free list)中。
參閱圖2所示,在搜索系統(tǒng)中,采用以上方式緩存搜索結(jié)果信息的主要流程如下步驟100、利用MD5算法將需要搜索信息的關(guān)鍵詞生成哈希值;該值為一個(gè)128位的串。
步驟110、從空閑列表(Free list)中分配一個(gè)未使用的數(shù)組下標(biāo)值。
步驟120、在密集哈希表中建立哈希值與數(shù)組下標(biāo)值之間的映射關(guān)系。
步驟130、將需要保存的信息存儲(chǔ)到所述下標(biāo)值在數(shù)組確定的元素所對(duì)應(yīng)的緩存單元內(nèi)。
步驟140、在最近最少使用列表(LRU list)中的MRU端增加節(jié)點(diǎn),并將所述下標(biāo)值保存在該節(jié)點(diǎn)中。
上述方法不僅局限于存儲(chǔ)搜索結(jié)果信息,可以用于保存與關(guān)鍵詞相關(guān)的其他任何信息。
參閱圖3所示,在搜索系統(tǒng)中,采用上述方式搜索和緩存信息的主要處理過(guò)程如下步驟200、接收搜索請(qǐng)求,并將用于搜索信息的關(guān)鍵詞生成哈希值,如該值為一個(gè)128位的串。
步驟210、利用所述哈希值查詢用于索引緩存的搜索結(jié)果信息的密集型哈希表,判斷是否緩存有該關(guān)鍵詞的搜索結(jié)果信息;若是,則進(jìn)行步驟220;否則,進(jìn)行步驟250。
步驟220、利用所述哈希值查詢密集型哈希表,獲得所述哈希值所對(duì)應(yīng)的數(shù)組元素的下標(biāo)值。
步驟230、根據(jù)所述下標(biāo)值在數(shù)組中確定的數(shù)組元素,定位到該數(shù)組元素所標(biāo)識(shí)的數(shù)組內(nèi)存池中的存儲(chǔ)單元。
步驟240、從所述存儲(chǔ)單元讀取搜索結(jié)果信息并提供給請(qǐng)求方。
步驟250、根據(jù)所述存儲(chǔ)單元的下標(biāo)值,將最近最少使用列表(LRU list)中對(duì)應(yīng)的節(jié)點(diǎn)移動(dòng)到的MRU端。
步驟260、將所述關(guān)鍵詞傳送給搜索引擎,由搜索引擎獲得的搜索結(jié)果信息。
步驟270、從空閑列表(Free list)中分配一個(gè)空閑的數(shù)組元素的下標(biāo)值。
步驟290、在密集哈希表中建立哈希值與數(shù)組下標(biāo)值之間的映射關(guān)系。
步驟300、將搜索到的結(jié)果信息存儲(chǔ)到所述下標(biāo)值在數(shù)組確定的元素所對(duì)應(yīng)的緩存單元內(nèi),并將搜索結(jié)果信息返回給請(qǐng)求方。
步驟310、在最近最少使用列表(LRU list)中的MRU端增加節(jié)點(diǎn),并將所述下標(biāo)值保存在該節(jié)點(diǎn)中,使該節(jié)點(diǎn)對(duì)應(yīng)所述存儲(chǔ)單元。
為了保證緩存信息的新鮮度,還可在將緩存數(shù)據(jù)返回給客戶端前要對(duì)其進(jìn)行有效性檢測(cè),如果緩存數(shù)據(jù)已失效則必須重新查詢和緩存。其具體方式是在從數(shù)組內(nèi)存的存儲(chǔ)單元讀取數(shù)據(jù)時(shí),根據(jù)用戶配置的有效時(shí)間(ExpireTime)和MaxLifeTime(最大生命周期)判斷當(dāng)前的查詢時(shí)間與該緩存結(jié)果創(chuàng)建時(shí)間差值落在哪個(gè)時(shí)間段內(nèi)。若時(shí)間差小于ExpireTime則從內(nèi)存池中取出緩存結(jié)果返回給客戶端;如果時(shí)間差大于等于ExpireTime而小于MaxLifeTime時(shí)先將緩存結(jié)果返回給客戶端,然后釋放該緩存元素節(jié)點(diǎn),包括完成從密集型哈希表中刪除映射關(guān)系、從LRU鏈表中刪除該節(jié)點(diǎn)和追加至空閑鏈表尾等一系列操作;然后由搜索引擎利用關(guān)鍵詞進(jìn)行搜索,并將結(jié)果重新保存至內(nèi)存池中,但此時(shí)不再返回給客戶端,以此保證緩存內(nèi)容的新鮮度;若時(shí)間差值大于MaxLifeTime則馬上釋放該緩存元素節(jié)點(diǎn),接著按沒(méi)有緩存結(jié)果的處理過(guò)程處理該查詢請(qǐng)求。
對(duì)于數(shù)組內(nèi)存中已存儲(chǔ)數(shù)據(jù)的存儲(chǔ)單元,并不限于采用上述的鏈表結(jié)構(gòu)進(jìn)行管理,也可以對(duì)數(shù)組緩存池中保存的每一個(gè)對(duì)象進(jìn)行引用計(jì)數(shù)及最近查詢時(shí)間,當(dāng)該緩沖區(qū)被引用的次數(shù)達(dá)到一定值后重新查詢并保存查詢結(jié)果,而釋放很久都沒(méi)有再進(jìn)行引用的緩沖區(qū)。
相應(yīng)的,一種緩存系統(tǒng)如圖4所示,該系統(tǒng)包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息。
哈希值生成模塊,用于將與信息相關(guān)的關(guān)鍵詞生成哈希值;哈希表,利用散列算法(如MD5)將與信息相關(guān)的關(guān)鍵詞生成哈希值。
管理模塊,與哈希值生成模塊和哈希表具有邏輯上的連接關(guān)系,用于管理所述數(shù)組內(nèi)存池中的已存儲(chǔ)信息的存儲(chǔ)單元和空閑的存儲(chǔ)單元。較佳的方式是,管理模塊通過(guò)雙向鏈表管理存儲(chǔ)單元。
保存信息模塊,與所述數(shù)組內(nèi)存池和管理模塊具有邏輯上的連接關(guān)系,用于將信息存儲(chǔ)到所述存儲(chǔ)單元,并在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值之間的映射關(guān)系。
相應(yīng)的,一種搜索系統(tǒng)如圖5所示,該系統(tǒng)包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息。
哈希值生成模塊,用于將搜索關(guān)鍵詞生成哈希值。
哈希表,用于保存哈希值與數(shù)組中元素的下標(biāo)識(shí)值之間的映射關(guān)系,以及根據(jù)所述哈希值進(jìn)行查詢并提供查詢結(jié)果。
管理模塊,與哈希值生成模塊和哈希表具有邏輯上的連接關(guān)系,用于管理所述數(shù)組內(nèi)存池中的存儲(chǔ)單元,將哈希值提供給所述哈希表和根據(jù)哈希表的查詢結(jié)果判斷是否緩存有所述關(guān)鍵詞的搜索結(jié)果信息,以及將搜索結(jié)果信息返回給請(qǐng)求方。
搜索引擎,與所述管理模塊具有邏輯上的連接關(guān)系,用于在所述管理模塊確定未緩存有搜索結(jié)果信息時(shí),利用所述關(guān)鍵詞搜索信息,并返回給管理模塊。
信息存取模塊,與所述管理模塊和數(shù)組內(nèi)存池具有邏輯上的連接關(guān)系,用于在所述查詢模塊確定緩存有搜索結(jié)果信息時(shí),從所述下標(biāo)值確定的數(shù)組元素在數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息;或者,將搜索引擎搜索的結(jié)果信息存儲(chǔ)到所述存儲(chǔ)單元,以及在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值的映射關(guān)系。
顯然,本領(lǐng)域的技術(shù)人員可以對(duì)本發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若對(duì)本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種存儲(chǔ)信息的方法,其特征在于,包括如下步驟將與信息相關(guān)的關(guān)鍵詞生成哈希值;從預(yù)先設(shè)定的數(shù)組中分配一個(gè)空閑的下標(biāo)值,該數(shù)組中的各元素用于標(biāo)識(shí)數(shù)組內(nèi)存池中的一個(gè)存儲(chǔ)單元;在哈希表中建立所述哈希值與下標(biāo)值間的映射關(guān)系,并將與所述關(guān)鍵詞相關(guān)的信息存儲(chǔ)到所述下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中標(biāo)識(shí)的存儲(chǔ)單元內(nèi),使通過(guò)所述哈希值能夠索引到存儲(chǔ)單元中的信息。
2.如權(quán)利要求1所述的方法,其特征在于,根據(jù)所有已存儲(chǔ)信息的存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素的下標(biāo)值形成最近最少使用鏈表,鏈表頭對(duì)應(yīng)最近最常使用的存儲(chǔ)單元的下標(biāo)值,鏈表尾對(duì)應(yīng)最近最少使用的存儲(chǔ)單元的下標(biāo)值。
3.如權(quán)利要求2所述的方法,其特征在于,分配空閑存儲(chǔ)單元存儲(chǔ)信息時(shí),或使用所述最近最少使用鏈表中的節(jié)點(diǎn)所對(duì)應(yīng)的存儲(chǔ)單元內(nèi)的信息時(shí),將該存儲(chǔ)單元對(duì)應(yīng)的節(jié)點(diǎn)添加或移動(dòng)到鏈表頭。
4.如權(quán)利要求2所述的方法,其特征在于,當(dāng)需要釋放存儲(chǔ)單元時(shí),從所述最近最少使用鏈表的尾部取出節(jié)點(diǎn)值并重置對(duì)應(yīng)的存儲(chǔ)單元,以及從所述密集哈希表中刪除對(duì)應(yīng)的哈希值和下標(biāo)值的對(duì)應(yīng)關(guān)系。
5.如權(quán)利要求2所述的方法,其特征在于,根據(jù)所有空閑的存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素的下標(biāo)值形成空閑鏈表;當(dāng)分配存儲(chǔ)單元時(shí)從該空閑鏈表中取出頭節(jié)點(diǎn),當(dāng)最近最少使用鏈表中釋放存儲(chǔ)單元的下標(biāo)值時(shí),在該空閑鏈表的尾部添加該下標(biāo)值。
6.如權(quán)利要求1至5任一項(xiàng)所述的方法,其特征在于,所述哈希表為密集型哈希表。
7.一種提高搜索信息速度的方法,其特征在于,包括如下步驟A、根據(jù)搜索請(qǐng)求,將用于搜索信息的關(guān)鍵詞生成哈希值;B、利用所述哈希值查詢用于索引緩存的搜索結(jié)果信息的哈希表,判斷是否緩存有該關(guān)鍵詞的搜索結(jié)果信息;若是,則進(jìn)行步驟C、D,否則,進(jìn)行步驟E、F;C、從所述哈希表中獲得所述哈希值所對(duì)應(yīng)的數(shù)值,并將該數(shù)值作為用于標(biāo)識(shí)數(shù)組內(nèi)存池中的存儲(chǔ)單元的數(shù)組的下標(biāo)值;D、從所述下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息,將該信息返回給請(qǐng)求方;E、由搜索引擎利用所述關(guān)鍵詞進(jìn)行搜索,獲得的搜索結(jié)果信息;F、分配一個(gè)空閑的數(shù)組下標(biāo)值,在型哈希表中建立所述哈希值與下標(biāo)值間的映射關(guān)系,將所述搜索結(jié)果信息存儲(chǔ)到該下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中標(biāo)識(shí)的存儲(chǔ)單元內(nèi),并將搜索結(jié)果信息返回給請(qǐng)求方。
8.如權(quán)利要求7所述的方法,其特征在于,根據(jù)所有已存儲(chǔ)搜索結(jié)果信息的存儲(chǔ)單元形成最近最少使用鏈表,鏈表中的每個(gè)節(jié)點(diǎn)關(guān)聯(lián)一個(gè)已緩存搜索結(jié)果信息的存儲(chǔ)單元,其中,鏈表頭對(duì)應(yīng)最近最常使用的存儲(chǔ)單元的下標(biāo)值,鏈表尾對(duì)應(yīng)最近最少使用的存儲(chǔ)單元的下標(biāo)值。
9.如權(quán)利要求8所述的方法,其特征在于,分配存儲(chǔ)單元存儲(chǔ)搜索結(jié)果信息時(shí),或所述最近最少使用鏈表中的節(jié)點(diǎn)所對(duì)應(yīng)的存儲(chǔ)單元內(nèi)的搜索結(jié)果信息被使用時(shí),將該存儲(chǔ)單元對(duì)應(yīng)的節(jié)點(diǎn)添加或移動(dòng)到鏈表頭。
10.如權(quán)利要求8所述的方法,其特征在于,當(dāng)需要釋放存儲(chǔ)單元時(shí),從所述最近最少使用鏈表的尾部取出節(jié)點(diǎn)并重置對(duì)應(yīng)的存儲(chǔ)單元,以及從所述哈希表中刪除對(duì)應(yīng)的哈希值和下標(biāo)值的對(duì)應(yīng)關(guān)系。
11.如權(quán)利要求8所述的方法,其特征在于,根據(jù)所有空閑的存儲(chǔ)單元形成空閑鏈表,該鏈表中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)數(shù)組內(nèi)存池中的一個(gè)存儲(chǔ)單元;當(dāng)分配存儲(chǔ)單元存儲(chǔ)搜索結(jié)果信息時(shí)從該空閑鏈表中取出頭節(jié)點(diǎn),當(dāng)最近最少使用鏈表中釋放存儲(chǔ)單元的下標(biāo)值時(shí),在該空閑鏈表的尾部添加該下標(biāo)值。
12.如權(quán)利要求7所述的方法,其特征在于,從存儲(chǔ)單元讀取搜索結(jié)果信息時(shí),還對(duì)該搜索結(jié)果信息進(jìn)行有效性檢查,并根據(jù)檢查結(jié)果按下述情況分別處理若確定所述搜索結(jié)果信息的已保存時(shí)間在配置的信息有效時(shí)間內(nèi),則將搜索結(jié)果信息返回給請(qǐng)求方;若確定所述搜索結(jié)果信息的已保存時(shí)間大于配置的信息有效時(shí)間并且小于最大生命周期時(shí)間,則在讀取該搜索結(jié)果信息后釋放該存儲(chǔ)單元,并利用所述關(guān)鍵詞重搜索信息并緩存;若確定所述搜索結(jié)果信息的已保存時(shí)間不小于配置的最大生命周期時(shí)間,則釋放存儲(chǔ)單元,利用所述關(guān)鍵詞重搜索信息,并將搜索結(jié)果提供給請(qǐng)求方并緩存。
13.如權(quán)利要求1至12任一項(xiàng)所述的方法,其特征在于,所述哈希表為密集型哈希表。
14.一種緩存系統(tǒng),其特征在于,包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息;哈希值生成模塊,用于將與信息相關(guān)的關(guān)鍵詞生成哈希值;哈希表,用于保存哈希值與數(shù)組中元素的下標(biāo)識(shí)值之間的映射關(guān)系;管理模塊,用于管理所述數(shù)組內(nèi)存池中的已存儲(chǔ)信息的存儲(chǔ)單元和空閑的存儲(chǔ)單元;保存信息模塊,將信息存儲(chǔ)到所述存儲(chǔ)單元,并在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值之間的映射關(guān)系。
15.如權(quán)利要求14所述的緩存系統(tǒng),其特征在于,所述哈希表為密集型哈希表。
16.一種搜索系統(tǒng),其特征在于,包括數(shù)組內(nèi)存池,包含多個(gè)存儲(chǔ)單元,用于緩存信息;哈希值生成模塊,用于將搜索關(guān)鍵詞生成哈希值;哈希表,用于保存哈希值與數(shù)組中元素的下標(biāo)識(shí)值之間的映射關(guān)系,以及根據(jù)所述哈希值進(jìn)行查詢并提供查詢結(jié)果;管理模塊,用于管理所述數(shù)組內(nèi)存池中的存儲(chǔ)單元,將哈希值提供給所述哈希表和根據(jù)哈希表的查詢結(jié)果判斷是否緩存有所述關(guān)鍵詞的搜索結(jié)果信息,以及將搜索結(jié)果信息返回給請(qǐng)求方;搜索引擎,用于在所述管理模塊確定未緩存有搜索結(jié)果信息時(shí),利用所述關(guān)鍵詞搜索信息,并返回給管理模塊;信息存取模塊,用于在所述查詢模塊確定緩存有搜索結(jié)果信息時(shí),從所述下標(biāo)值確定的數(shù)組元素在數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息;或者,將搜索引擎搜索的結(jié)果信息存儲(chǔ)到所述存儲(chǔ)單元,以及在所述哈希表中建立關(guān)鍵詞的哈希值與該存儲(chǔ)單元對(duì)應(yīng)的數(shù)組元素下標(biāo)值的映射關(guān)系。
17.如權(quán)利要求16所述的搜索系統(tǒng),其特征在于,所述哈希表為密集型哈希表。
全文摘要
本發(fā)明公開(kāi)了一種提高搜索信息速度的方法,該方法將用于搜索信息的關(guān)鍵詞生成哈希值;利用所述哈希值查詢哈希表判斷是否已緩存有對(duì)應(yīng)的搜索結(jié)果;若緩存有,從所述哈希表中獲得所述對(duì)應(yīng)、并用于標(biāo)識(shí)數(shù)組內(nèi)存池中的存儲(chǔ)單元的數(shù)組元素下標(biāo)值;從數(shù)組元素在所述數(shù)組內(nèi)存池中所標(biāo)識(shí)的存儲(chǔ)單元內(nèi)讀取搜索結(jié)果信息返回給請(qǐng)求方;若未緩存,由搜索引擎利用所述關(guān)鍵詞進(jìn)行搜索并獲得搜索結(jié)果,在型哈希表中建立所述哈希值與下標(biāo)值間的映射關(guān)系,將所述搜索結(jié)果信息存儲(chǔ)到該下標(biāo)值確定的數(shù)組元素在所述數(shù)組內(nèi)存池中標(biāo)識(shí)的存儲(chǔ)單元內(nèi)并將搜索結(jié)果信息返回給請(qǐng)求方。本發(fā)明還同時(shí)公開(kāi)了一種提高搜索信息速度的方法及系統(tǒng)。
文檔編號(hào)G06F12/08GK1940922SQ20051010779
公開(kāi)日2007年4月4日 申請(qǐng)日期2005年9月30日 優(yōu)先權(quán)日2005年9月30日
發(fā)明者林海榮 申請(qǐng)人:騰訊科技(深圳)有限公司