本發(fā)明涉及網(wǎng)頁存儲(chǔ)和網(wǎng)頁搜索技術(shù)領(lǐng)域,更具體地,涉及一種用于更新網(wǎng)頁存儲(chǔ)的方法、用于更新網(wǎng)頁存儲(chǔ)的設(shè)備、網(wǎng)頁存儲(chǔ)系統(tǒng)和網(wǎng)頁搜索系統(tǒng)。
背景技術(shù):
在互聯(lián)網(wǎng)應(yīng)用的網(wǎng)頁搜索系統(tǒng)中,通常需要以網(wǎng)頁摘要的形式將網(wǎng)頁數(shù)據(jù)存儲(chǔ)在網(wǎng)頁搜索系統(tǒng)的網(wǎng)頁存儲(chǔ)系統(tǒng)中。由于在互聯(lián)網(wǎng)中網(wǎng)頁數(shù)量巨大,因此,通常以鍵值對(duì)的形式將所述網(wǎng)頁數(shù)據(jù)存儲(chǔ)在網(wǎng)頁存儲(chǔ)系統(tǒng)中,其中,所述鍵值對(duì)的主鍵是歸一化的網(wǎng)頁地址,所述鍵值對(duì)中的值是網(wǎng)頁內(nèi)容或網(wǎng)頁摘要內(nèi)容。
在現(xiàn)有的網(wǎng)頁搜索系統(tǒng)中,由于網(wǎng)頁數(shù)量巨大以及網(wǎng)頁搜索系統(tǒng)對(duì)于網(wǎng)頁內(nèi)容的更新不敏感,因此,通常每天或每周對(duì)網(wǎng)頁存儲(chǔ)系統(tǒng)中的網(wǎng)頁數(shù)據(jù)進(jìn)行更新,或者僅僅對(duì)于部分網(wǎng)頁數(shù)據(jù)進(jìn)行實(shí)時(shí)更新。
通常,有兩種對(duì)網(wǎng)頁數(shù)據(jù)進(jìn)行實(shí)時(shí)更新的方式。
在第一種方式中,通過輔助的存儲(chǔ)設(shè)備(例如,Redis系統(tǒng))來實(shí)現(xiàn)實(shí)時(shí)更新。這種方式會(huì)增加網(wǎng)頁存儲(chǔ)系統(tǒng)的復(fù)雜度。
在第二種方式中,以開鏈哈希表的方式存儲(chǔ)網(wǎng)頁數(shù)據(jù),以便實(shí)現(xiàn)對(duì)網(wǎng)頁數(shù)據(jù)的快速查找。在向哈希表中存儲(chǔ)大量網(wǎng)頁的情況下,哈希表沖突會(huì)導(dǎo)致查詢性能嚴(yán)重下降。此時(shí),需要對(duì)哈希表進(jìn)行擴(kuò)容。
在現(xiàn)有技術(shù)中,在對(duì)哈希表進(jìn)行擴(kuò)容時(shí),首先創(chuàng)建新哈希表,接著將原有哈希表中存儲(chǔ)的網(wǎng)頁數(shù)據(jù)一次性拷貝到新哈希表中。在所述一次性拷貝過程中,原有哈希表的查詢性能嚴(yán)重下降。
因此,需要提供一種新的技術(shù)方案,針對(duì)上述現(xiàn)有技術(shù)中的至少一個(gè)技術(shù)問題進(jìn)行改進(jìn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)目的是提供一種用于更新網(wǎng)頁存儲(chǔ)的新技術(shù)方案。
根據(jù)本發(fā)明的第一方面,提供了一種用于更新網(wǎng)頁存儲(chǔ)的方法,包括:檢測(cè)網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率,其中,所述第一哈希表存儲(chǔ)網(wǎng)頁數(shù)據(jù);在沖突率大于更新閾值的情況下,創(chuàng)建第二哈希表,其中,第二哈希表的容量大于第一哈希表的容量;以及以多次遷移處理將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中,其中,在每次遷移處理中,將第一哈希表中網(wǎng)頁數(shù)據(jù)的一部分遷移到第二哈希表中。
可選地或另選地,所述沖突率是哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù)與哈希表中的全部哈希桶數(shù)的比值,所述更新閾值是關(guān)于所述比值的閾值。
可選地或另選地,所述沖突率是所述第一哈希表中當(dāng)前實(shí)際存儲(chǔ)的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù),以及所述更新閾值是關(guān)于哈希桶數(shù)的閾值。
可選地或另選地,以多次遷移處理將第一哈希表中網(wǎng)頁內(nèi)容遷移到第二哈希表中還包括:當(dāng)接收到查詢時(shí)將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中。
可選地或另選地,當(dāng)接收到查詢時(shí)將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中還包括:在第一哈希表中設(shè)置遷移游標(biāo)i,其中,遷移游標(biāo)i指示當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素;以及當(dāng)接收到查詢時(shí)將遷移游標(biāo)i所指示的網(wǎng)頁數(shù)據(jù)元素遷移到第二哈希表。
可選地或另選地,所述當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素包括一個(gè)或多個(gè)哈希桶對(duì)應(yīng)的元素或一個(gè)哈希桶中的一個(gè)或多個(gè)元素。
可選地或另選地,在遷移過程中,新的網(wǎng)頁數(shù)據(jù)被寫入到第二哈希表中。
可選地或另選地,還包括:從第二哈希表讀取網(wǎng)頁數(shù)據(jù);以及當(dāng)在第二哈希表中未找到相關(guān)網(wǎng)頁數(shù)據(jù)的情況下從第一哈希表讀取網(wǎng)頁數(shù)據(jù)。
可選地或另選地,以多次遷移處理將第一哈希表中網(wǎng)頁內(nèi)容遷移到第二哈希表中還包括:將來自第一哈希表的網(wǎng)頁數(shù)據(jù)寫入文件緩存中;以及在寫入文件緩存的網(wǎng)頁數(shù)據(jù)量大于緩存閾值的情況下,將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表。
可選地或另選地,還包括:當(dāng)將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表時(shí),在第二哈希表中的網(wǎng)頁數(shù)據(jù)文件的長(zhǎng)度大于文件緩存中相應(yīng)的網(wǎng)頁數(shù)據(jù)文件的長(zhǎng)度的情況下,讀取文件緩存中的所述網(wǎng)頁數(shù)據(jù)文件。
可選地或另選地,所述網(wǎng)頁數(shù)據(jù)是網(wǎng)頁摘要。
可選地或另選地,所述網(wǎng)頁存儲(chǔ)系統(tǒng)是網(wǎng)頁搜索系統(tǒng)的存儲(chǔ)系統(tǒng)。
根據(jù)本發(fā)明的第二方面,提供了一種用于更新網(wǎng)頁存儲(chǔ)的設(shè)備,包括:用于檢測(cè)網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率的裝置,其中,所述第一哈希表存儲(chǔ)網(wǎng)頁數(shù)據(jù);用于在沖突率大于更新閾值的情況下創(chuàng)建第二哈希表的裝置,其中,第二哈希表的容量大于第一哈希表的容量;以及用于以多次遷移處理將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中的裝置,其中,在每次遷移處理中,將第一哈希表中網(wǎng)頁數(shù)據(jù)的一部分遷移到第二哈希表中。
根據(jù)本發(fā)明的第三方面,提供了一種網(wǎng)頁存儲(chǔ)系統(tǒng),包括上述用于更新網(wǎng)頁存儲(chǔ)的設(shè)備。
根據(jù)本發(fā)明的第四方面,提供了一種網(wǎng)頁存儲(chǔ)系統(tǒng),包括:存儲(chǔ)器和處理器,其中,所述存儲(chǔ)器包括機(jī)器可執(zhí)行指令,當(dāng)所述網(wǎng)頁存儲(chǔ)系統(tǒng)運(yùn)行時(shí),所述機(jī)器可執(zhí)行指令用于控制所述處理器執(zhí)行根據(jù)上述任何一項(xiàng)所述的方法中的處理。
根據(jù)本發(fā)明的第五方面,提供了一種網(wǎng)頁搜索系統(tǒng),包括根據(jù)上述任一所述的網(wǎng)頁存儲(chǔ)系統(tǒng),用于存儲(chǔ)網(wǎng)頁數(shù)據(jù),以供檢索。
根據(jù)本發(fā)明的一個(gè)實(shí)施例,可以在一定程度上減輕網(wǎng)頁數(shù)據(jù)遷移對(duì)哈希表的查詢性能的影響。
通過以下參照附圖對(duì)本發(fā)明的示例性實(shí)施例的詳細(xì)描述,本發(fā)明的其它特征及其優(yōu)點(diǎn)將會(huì)變得清楚。
附圖說明
被結(jié)合在說明書中并構(gòu)成說明書的一部分的附圖示出了本發(fā)明的實(shí)施例,并且連同其說明一起用于解釋本發(fā)明的原理。
圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于更新網(wǎng)頁存儲(chǔ)的方法的示意性流程圖。
圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的網(wǎng)頁存儲(chǔ)系統(tǒng)的示意性框圖。
圖3示出了根據(jù)本發(fā)明的另一個(gè)實(shí)施例的網(wǎng)頁存儲(chǔ)系統(tǒng)的示意性框圖。
圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的網(wǎng)頁搜索系統(tǒng)的示意性框圖。
具體實(shí)施方式
現(xiàn)在將參照附圖來詳細(xì)描述本發(fā)明的各種示例性實(shí)施例。應(yīng)注意到:除非另外具體說明,否則在這些實(shí)施例中闡述的部件和步驟的相對(duì)布置、數(shù)字表達(dá)式和數(shù)值不限制本發(fā)明的范圍。
以下對(duì)至少一個(gè)示例性實(shí)施例的描述實(shí)際上僅僅是說明性的,決不作為對(duì)本發(fā)明及其應(yīng)用或使用的任何限制。
對(duì)于相關(guān)領(lǐng)域普通技術(shù)人員已知的技術(shù)、方法和設(shè)備可能不作詳細(xì)討論,但在適當(dāng)情況下,所述技術(shù)、方法和設(shè)備應(yīng)當(dāng)被視為說明書的一部分。
在這里示出和討論的所有例子中,任何具體值應(yīng)被解釋為僅僅是示例性的,而不是作為限制。因此,示例性實(shí)施例的其它例子可以具有不同的值。
應(yīng)注意到:相似的標(biāo)號(hào)和字母在下面的附圖中表示類似項(xiàng),因此,一旦某一項(xiàng)在一個(gè)附圖中被定義,則在隨后的附圖中不需要對(duì)其進(jìn)行進(jìn)一步討論。
下面,參照附圖描述根據(jù)本發(fā)明的各個(gè)實(shí)施例和例子。
<方法>
圖1示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于更新網(wǎng)頁存儲(chǔ)的方法的示意性流程圖。
如圖1所示,在步驟S1100,檢測(cè)網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率。第一哈希表存儲(chǔ)網(wǎng)頁數(shù)據(jù)。
網(wǎng)頁存儲(chǔ)系統(tǒng)是網(wǎng)頁搜索系統(tǒng)的存儲(chǔ)系統(tǒng)。該網(wǎng)頁存儲(chǔ)系統(tǒng)具有哈希表,在哈希表中存儲(chǔ)有大量網(wǎng)頁數(shù)據(jù)。例如,該網(wǎng)頁數(shù)據(jù)可以包括網(wǎng)頁摘要。在這種情況下,可以用鍵值對(duì)的方式存儲(chǔ)網(wǎng)頁數(shù)據(jù),所述鍵值對(duì)的主鍵是歸一化的網(wǎng)頁地址,所述鍵值對(duì)中的值是網(wǎng)頁內(nèi)容或網(wǎng)頁摘要。
使用哈希表進(jìn)行存儲(chǔ),可以快速地查找到對(duì)應(yīng)的網(wǎng)頁數(shù)據(jù)。
在步驟S1200,在沖突率大于更新閾值的情況下,創(chuàng)建第二哈希表。例如,第二哈希表的容量大于第一哈希表的容量。
所述更新閾值與步驟S1100涉及的哈希表的沖突率相對(duì)應(yīng)。根據(jù)哈希表的沖突率的定義方式不同,則設(shè)定的更新閾值也不同。
在一個(gè)例子中,所述哈希表的沖突率是哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù)與哈希表中的全部哈希桶數(shù)的比值,以及所述更新閾值是關(guān)于所述比值的閾值。例如,哈希表中的全部哈希桶數(shù)為100,哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用哈希桶數(shù)50,則哈希表的沖突率為50與100的比值,即0.5。例如,所述更新閾值是0.5。當(dāng)哈希表的沖突率達(dá)到0.5時(shí),開始創(chuàng)建第二哈希表。
在另一個(gè)例子中,當(dāng)建立一個(gè)哈希表時(shí),可以預(yù)先設(shè)定哈希桶數(shù)的閾值。當(dāng)實(shí)際存儲(chǔ)數(shù)據(jù)的哈希桶數(shù)達(dá)到該閾值時(shí),進(jìn)行更新。在這種情況下,可以直接以哈希桶數(shù)作為沖突率。例如,所述沖突率是所述第一哈希表中當(dāng)前實(shí)際存儲(chǔ)的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù),以及所述更新閾值是關(guān)于哈希桶數(shù)的閾值。例如,預(yù)先設(shè)置的更新閾值是60。當(dāng)哈希表中當(dāng)前實(shí)際存儲(chǔ)的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù)為60時(shí),開始創(chuàng)建第二哈希表。
例如,所述哈希表的沖突率還可為哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶的容量與哈希表中的全部哈希桶的總?cè)萘康谋戎?。例如,哈希表中?dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶的容量為7000,哈希表中的全部哈希桶的總?cè)萘繛?0000,則哈希表的沖突率為7000與10000的比值,即0.7。例如,所述更新閾值被設(shè)為0.7。當(dāng)沖突率是0.7時(shí),開始創(chuàng)建第二哈希表。
所述第二哈希表所能容納的網(wǎng)頁數(shù)據(jù)的數(shù)量大于第一哈希表所能容納的網(wǎng)頁數(shù)據(jù)的數(shù)量??梢酝ㄟ^采用增加哈希桶數(shù)的方式創(chuàng)建第二哈希表,或者,也可以通過增加每個(gè)哈希桶數(shù)所能容納的網(wǎng)頁數(shù)據(jù)的數(shù)量的方式創(chuàng)建第二哈希表。例如,在通過增加哈希桶數(shù)的方式創(chuàng)建第二哈希表的情況下,哈希表的擴(kuò)展系數(shù)為q(q>1),第一哈希表的哈希桶數(shù)為N。當(dāng)?shù)谝还1淼臎_突率大于更新閾值時(shí),創(chuàng)建第二哈希表,其中,所創(chuàng)建的第二哈希表的哈希桶數(shù)N’=N*q。
在步驟S1300,以多次遷移處理將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中,其中,在每次遷移處理中,將第一哈希表中網(wǎng)頁數(shù)據(jù)的一部分遷移到第二哈希表中。
將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中的觸發(fā)條件是接收到網(wǎng)頁查詢請(qǐng)求。若檢測(cè)到網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率大于更新閾值,當(dāng)接收到網(wǎng)頁查詢請(qǐng)求時(shí),將第一哈希表中的部分網(wǎng)頁數(shù)據(jù)遷移到第二哈希表。這樣可以盡量減小遷移操作對(duì)查詢操作的影響。在一個(gè)例子中,在執(zhí)行查詢操作之后,執(zhí)行所述遷移操作,以進(jìn)一步減小遷移操作對(duì)查詢操作的影響。
在一個(gè)實(shí)施例中,在第一哈希表中預(yù)先設(shè)置遷移游標(biāo)i。該遷移游標(biāo)i指示當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素。當(dāng)接收到查詢時(shí),將遷移游標(biāo)i所指示的網(wǎng)頁數(shù)據(jù)元素遷移到第二哈希表。當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素可以為一個(gè)或多個(gè)哈希桶對(duì)應(yīng)的元素,或者,可以為一個(gè)哈希桶中的一個(gè)或多個(gè)元素。
當(dāng)將遷移游標(biāo)i所指示的網(wǎng)頁數(shù)據(jù)元素寫入到第二哈希表時(shí),遷移游標(biāo)i可以移動(dòng)以指示第一哈希表中下一批要被遷移的網(wǎng)頁數(shù)據(jù)元素。當(dāng)再次接收到查詢請(qǐng)求時(shí),將該遷移游標(biāo)i指示的要被遷移的網(wǎng)頁數(shù)據(jù)元素遷移到第二哈希表中。按照上述操作步驟,將第一哈希表中存儲(chǔ)的網(wǎng)頁數(shù)據(jù)分批遷移到第二哈希表中,直至將第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)全部遷移到第二哈希表,從而完成對(duì)第一哈希表中存儲(chǔ)的網(wǎng)頁數(shù)據(jù)的遷移。
例如,可以在將遷移游標(biāo)i所指示的第一哈希表存儲(chǔ)的部分網(wǎng)頁數(shù)據(jù)遷移到第二哈希表之后,從第一哈希表中刪除該次遷移處理所對(duì)應(yīng)的網(wǎng)頁數(shù)據(jù)??蛇x地,當(dāng)?shù)谝还1碇写鎯?chǔ)的全部網(wǎng)頁數(shù)據(jù)被遷移到第二哈希表之后,刪除第一哈希表或刪除第一哈希表中存儲(chǔ)的全部網(wǎng)頁數(shù)據(jù)。
在一個(gè)實(shí)施例中,在第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)遷移處理過程中,優(yōu)先從第二哈希表讀取查詢請(qǐng)求對(duì)應(yīng)的網(wǎng)頁數(shù)據(jù)。當(dāng)在第二哈希表中未找到查詢請(qǐng)求對(duì)應(yīng)的相關(guān)網(wǎng)頁數(shù)據(jù)的情況下,從第一哈希表讀取查詢請(qǐng)求對(duì)應(yīng)的網(wǎng)頁數(shù)據(jù)。
在每次遷移處理中,在將第一哈希表中的網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中時(shí),可以將第一哈希表中要被遷移的網(wǎng)頁數(shù)據(jù)寫入到文件緩存中。在寫入文件緩存的網(wǎng)頁數(shù)據(jù)量大于緩存閾值的情況下,將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表。寫入到文件緩存的要被遷移的網(wǎng)頁數(shù)據(jù)可以被查詢。
在將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表的過程中,當(dāng)接收到查詢請(qǐng)求時(shí),可以根據(jù)第二哈希表中的網(wǎng)頁數(shù)據(jù)文件的長(zhǎng)度判斷是從第二哈希表讀取該網(wǎng)頁數(shù)據(jù)文件,還是從文件緩存讀取該網(wǎng)頁數(shù)據(jù)文件。通常,在向第二哈希表寫入網(wǎng)頁數(shù)據(jù)文件時(shí),會(huì)將第二哈希表中的文件長(zhǎng)度設(shè)置的足夠大,以確保能夠容納該文件。在結(jié)束寫入操作時(shí),將文件長(zhǎng)度設(shè)置為實(shí)際長(zhǎng)度??紤]到這種情況,當(dāng)執(zhí)行查詢操作時(shí),在第二哈希表中的網(wǎng)頁數(shù)據(jù)文件的長(zhǎng)度大于文件緩存中相應(yīng)的網(wǎng)頁數(shù)據(jù)文件的長(zhǎng)度的情況下,則讀取文件緩存中的網(wǎng)頁數(shù)據(jù)文件。
根據(jù)一個(gè)實(shí)施例,采用漸進(jìn)的方式遷移網(wǎng)頁存儲(chǔ)系統(tǒng)的網(wǎng)頁數(shù)據(jù),避免一次性拷貝大量數(shù)據(jù),從而減輕單次遷移操作對(duì)查詢性能的影響。
此外,在一個(gè)實(shí)施例中,通過這種方式可以動(dòng)態(tài)擴(kuò)展哈希表的容量。
此外,在一個(gè)實(shí)施例中,可以在一定程度上分離讀/寫操作,從而提高系統(tǒng)性能。
<設(shè)備>
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,在電子技術(shù)領(lǐng)域中,可以通過軟件、硬件以及軟件和硬件結(jié)合的方式,將上述方法體現(xiàn)在產(chǎn)品中。本領(lǐng)域技術(shù)人員很容易基于上面公開的方法,產(chǎn)生一種用于更新網(wǎng)頁存儲(chǔ)的設(shè)備。該設(shè)備可以包括用于實(shí)現(xiàn)前面所述的用于更新網(wǎng)頁存儲(chǔ)的方法中的各個(gè)操作的裝置。例如,該設(shè)備可以包括用于檢測(cè)網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率的裝置,其中,所述第一哈希表存儲(chǔ)網(wǎng)頁數(shù)據(jù);用于在沖突率大于更新閾值的情況下創(chuàng)建第二哈希表的裝置,其中,第二哈希表的容量大于第一哈希表;以及用于以多次遷移處理將第一哈希表中網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中的裝置,其中,在每次遷移處理中,將第一哈希表中網(wǎng)頁數(shù)據(jù)的一部分遷移到第二哈希表中。
<網(wǎng)頁存儲(chǔ)系統(tǒng)>
上面描述的用于更新網(wǎng)頁存儲(chǔ)的設(shè)備可以為網(wǎng)頁存儲(chǔ)系統(tǒng)的一部分。在這種情況下,所述網(wǎng)頁存儲(chǔ)系統(tǒng)用于更新網(wǎng)頁存儲(chǔ),實(shí)現(xiàn)將第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)多次遷移到第二哈希表中。圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的網(wǎng)頁存儲(chǔ)系統(tǒng)的示意性框圖。參見圖2,網(wǎng)頁存儲(chǔ)系統(tǒng)2000包括前面所述的用于更新網(wǎng)頁存儲(chǔ)的設(shè)備2010。
圖3示出了根據(jù)本發(fā)明的另一個(gè)實(shí)施例的網(wǎng)頁存儲(chǔ)系統(tǒng)的示意性框圖。參見圖3,網(wǎng)頁存儲(chǔ)系統(tǒng)3000可以包括處理器3010、存儲(chǔ)器3020、接口裝置3030、通信裝置3040、顯示裝置3050、輸入裝置3060、揚(yáng)聲器3070、麥克風(fēng)3080,等等。
處理器3010例如可以是中央處理器CPU、微處理器MCU等。存儲(chǔ)器3020例如包括ROM(只讀存儲(chǔ)器)、RAM(隨機(jī)存取存儲(chǔ)器)、諸如硬盤的非易失性存儲(chǔ)器等。接口裝置3030例如包括USB接口、耳機(jī)接口等。
通信裝置3040例如能夠進(jìn)行有有線或無線通信。
顯示裝置3050例如是液晶顯示屏、觸摸顯示屏等。輸入裝置3060例如可以包括觸摸屏、鍵盤等。用戶可以通過揚(yáng)聲器3070和麥克風(fēng)3080輸入/輸出語音信息。
圖3所示的網(wǎng)頁存儲(chǔ)系統(tǒng)僅是解釋性的,并且決不是為了要限制本發(fā)明、其應(yīng)用或用途。
在這個(gè)實(shí)施例中,所述存儲(chǔ)器3020用于存儲(chǔ)指令,所述指令用于控制所述處理器3010進(jìn)行操作以執(zhí)行圖1所示的用于更新網(wǎng)頁存儲(chǔ)的方法。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,盡管在圖3中示出了多個(gè)裝置,但是,本發(fā)明可以僅涉及其中的部分裝置,例如,處理器3010和存儲(chǔ)器3020等。技術(shù)人員可以根據(jù)本發(fā)明所公開方案設(shè)計(jì)指令。指令如何控制處理器進(jìn)行操作,這是本領(lǐng)域公知,故在此不再詳細(xì)描述。
<網(wǎng)頁搜索系統(tǒng)>
上面描述的網(wǎng)頁存儲(chǔ)系統(tǒng)是網(wǎng)頁搜索系統(tǒng)的存儲(chǔ)系統(tǒng)。圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的網(wǎng)頁搜索系統(tǒng)的示意性框圖。參見圖4,網(wǎng)頁搜索系統(tǒng)4000包括前面所述的網(wǎng)頁存儲(chǔ)系統(tǒng)4010,用于存儲(chǔ)網(wǎng)頁數(shù)據(jù),以供檢索。
<例子>
下面是根據(jù)一個(gè)具體實(shí)施例的例子。
根據(jù)一個(gè)例子,在盡量不影響查詢性能的前提下更新網(wǎng)頁存儲(chǔ)系統(tǒng)中的網(wǎng)頁數(shù)據(jù)存儲(chǔ)。例如,所述網(wǎng)頁存儲(chǔ)系統(tǒng)是網(wǎng)頁搜索系統(tǒng)的存儲(chǔ)系統(tǒng)。
在一個(gè)例子中,采用漸進(jìn)式的方式,擴(kuò)展網(wǎng)頁數(shù)據(jù)的存儲(chǔ)容量或更新網(wǎng)頁存儲(chǔ)。例如,在更新過程中,保持兩個(gè)哈希表,即第一哈希表(或當(dāng)前哈希表)和第二哈希表(或更新后的哈希表)。
在現(xiàn)有技術(shù)中,在更新時(shí),將第一哈希表中的數(shù)據(jù)一次性拷貝到第二哈希表中。這會(huì)對(duì)第一哈希表的讀寫操作產(chǎn)生很大影響。
在一個(gè)例子中,采用漸進(jìn)式的方式,避免一次性拷貝大量數(shù)據(jù),從而減輕對(duì)系統(tǒng)性能的影響。
在一個(gè)例子中,通過文件緩存,以批量的方式向第二哈希表寫入數(shù)據(jù)。這樣可以避免了磁盤的隨機(jī)寫入。
可選地,根據(jù)一個(gè)實(shí)施例,可以方便對(duì)網(wǎng)頁數(shù)據(jù)按數(shù)據(jù)量進(jìn)行分段。
可選地,由于僅一段數(shù)據(jù)正在寫入,而其他數(shù)據(jù)段僅提供讀服務(wù),因此,可以將大部分的讀請(qǐng)求和寫請(qǐng)求相隔離開,這可以提高了讀取網(wǎng)頁摘要的性能。
首先,檢測(cè)網(wǎng)頁存儲(chǔ)系統(tǒng)的第一哈希表的沖突率。
例如,哈希表的沖突率是哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù)與哈希表中的全部哈希桶數(shù)的比值。哈希表中的全部哈希桶數(shù)N為100。預(yù)設(shè)的更新閾值為0.6。當(dāng)檢測(cè)到網(wǎng)頁存儲(chǔ)系統(tǒng)的哈希表中當(dāng)前實(shí)際容納的網(wǎng)頁數(shù)據(jù)所占用的哈希桶數(shù)為61時(shí),第一哈希表的沖突率為61與100的比值,即0.61,其大于預(yù)設(shè)的更新閾值。
接著,創(chuàng)建第二哈希表。
例如,以增加哈希桶數(shù)的方式創(chuàng)建第二哈希表。哈希表的擴(kuò)展系數(shù)為q(q>1)。當(dāng)?shù)谝还1淼臎_突率大于更新閾值時(shí),創(chuàng)建第二哈希表。所創(chuàng)建的第二哈希表的哈希桶數(shù)N’=N*q。例如,假設(shè)q=1.5,則第二哈希表的哈希桶數(shù)N’為150。
然后,將第一哈希表中的部分網(wǎng)頁數(shù)據(jù)寫入到文件緩存中。
例如,以多次遷移處理將第一哈希表中的網(wǎng)頁數(shù)據(jù)遷移到第二哈希表中。在接收到查詢請(qǐng)求時(shí),將第一哈希表中的網(wǎng)頁數(shù)據(jù)的一部分寫入到文件緩存中。
這里,由于基于查詢請(qǐng)求來觸發(fā)遷移操作,因此,可以在一定程度上相對(duì)于遷移操作提高查詢請(qǐng)求的優(yōu)先程度,從而減輕遷移操作對(duì)查詢性能的影響。
例如,可以在第一哈希表中預(yù)先設(shè)置遷移游標(biāo)i。該遷移游標(biāo)i指示當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素。當(dāng)接收到查詢請(qǐng)求時(shí),將遷移游標(biāo)i所指示的網(wǎng)頁數(shù)據(jù)元素寫入到文件緩存中。當(dāng)前要被遷移的網(wǎng)頁數(shù)據(jù)元素可以是一個(gè)或多個(gè)哈希桶中的元素。
當(dāng)遷移游標(biāo)i所指示的網(wǎng)頁數(shù)據(jù)元素寫入到文件緩存中之后,移動(dòng)遷移游標(biāo)i以指示第一哈希表中下一批要被遷移的網(wǎng)頁數(shù)據(jù)元素。當(dāng)再次接收到查詢請(qǐng)求時(shí),將該遷移游標(biāo)i指示的要被遷移的網(wǎng)頁數(shù)據(jù)元素寫入到文件緩存中。
之后,將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表。
當(dāng)寫入文件緩存的網(wǎng)頁數(shù)據(jù)量大于緩存閾值時(shí),將文件緩存中的網(wǎng)頁數(shù)據(jù)寫入到第二哈希表。
按照上述操作步驟,將第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)批量遷移到第二哈希表中,直至將第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)全部寫入到第二哈希表,從而完成第一哈希表存儲(chǔ)的網(wǎng)頁數(shù)據(jù)的遷移。
在完成遷移之后,可以刪除第一哈希表。此外,可以在第二哈希表中重置遷移游標(biāo)i,以便在需要時(shí),將第二哈希表中的網(wǎng)頁數(shù)據(jù)遷移到新的哈希表中。
本發(fā)明可以是系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品。計(jì)算機(jī)程序產(chǎn)品可以包括計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上載有用于使處理器實(shí)現(xiàn)本發(fā)明的各個(gè)方面的計(jì)算機(jī)可讀程序指令。
計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是可以保持和存儲(chǔ)由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是――但不限于――電存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備、光存儲(chǔ)設(shè)備、電磁存儲(chǔ)設(shè)備、半導(dǎo)體存儲(chǔ)設(shè)備或者上述的任意合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計(jì)算機(jī)盤、硬盤、隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、可擦式可編程只讀存儲(chǔ)器(EPROM或閃存)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、便攜式壓縮盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能盤(DVD)、記憶棒、軟盤、機(jī)械編碼設(shè)備、例如其上存儲(chǔ)有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)不被解釋為瞬時(shí)信號(hào)本身,諸如無線電波或者其他自由傳播的電磁波、通過波導(dǎo)或其他傳輸媒介傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘?hào)。
這里所描述的計(jì)算機(jī)可讀程序指令可以從計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)下載到各個(gè)計(jì)算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計(jì)算機(jī)或外部存儲(chǔ)設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機(jī)、網(wǎng)關(guān)計(jì)算機(jī)和/或邊緣服務(wù)器。每個(gè)計(jì)算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計(jì)算機(jī)可讀程序指令,并轉(zhuǎn)發(fā)該計(jì)算機(jī)可讀程序指令,以供存儲(chǔ)在各個(gè)計(jì)算/處理設(shè)備中的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中。
用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機(jī)器指令、機(jī)器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言—諸如Smalltalk、C++等,以及常規(guī)的過程式編程語言—諸如“C”語言或類似的編程語言。計(jì)算機(jī)可讀程序指令可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過任意種類的網(wǎng)絡(luò)—包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實(shí)施例中,通過利用計(jì)算機(jī)可讀程序指令的狀態(tài)信息來個(gè)性化定制電子電路,例如可編程邏輯電路、現(xiàn)場(chǎng)可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計(jì)算機(jī)可讀程序指令,從而實(shí)現(xiàn)本發(fā)明的各個(gè)方面。
這里參照根據(jù)本發(fā)明實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個(gè)方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個(gè)方框以及流程圖和/或框圖中各方框的組合,都可以由計(jì)算機(jī)可讀程序指令實(shí)現(xiàn)。
這些計(jì)算機(jī)可讀程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,使得這些指令在通過計(jì)算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時(shí),產(chǎn)生了實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的裝置。也可以把這些計(jì)算機(jī)可讀程序指令存儲(chǔ)在計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中,這些指令使得計(jì)算機(jī)、可編程數(shù)據(jù)處理裝置和/或其他設(shè)備以特定方式工作,從而,存儲(chǔ)有指令的計(jì)算機(jī)可讀介質(zhì)則包括一個(gè)制造品,其包括實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作的各個(gè)方面的指令。
也可以把計(jì)算機(jī)可讀程序指令加載到計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的過程,從而使得在計(jì)算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上執(zhí)行的指令實(shí)現(xiàn)流程圖和/或框圖中的一個(gè)或多個(gè)方框中規(guī)定的功能/動(dòng)作。
附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個(gè)實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的體系架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)方框可以代表一個(gè)模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個(gè)或多個(gè)用于實(shí)現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實(shí)現(xiàn)中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個(gè)連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時(shí)也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個(gè)方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動(dòng)作的專用的基于硬件的系統(tǒng)來實(shí)現(xiàn),或者可以用專用硬件與計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。對(duì)于本領(lǐng)域技術(shù)人員來說公知的是,通過硬件方式實(shí)現(xiàn)、通過軟件方式實(shí)現(xiàn)以及通過軟件和硬件結(jié)合的方式實(shí)現(xiàn)都是等價(jià)的。
以上已經(jīng)描述了本發(fā)明的各實(shí)施例,上述說明是示例性的,并非窮盡性的,并且也不限于所披露的各實(shí)施例。在不偏離所說明的各實(shí)施例的范圍和精神的情況下,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說許多修改和變更都是顯而易見的。本文中所用術(shù)語的選擇,旨在最好地解釋各實(shí)施例的原理、實(shí)際應(yīng)用或?qū)κ袌?chǎng)中的技術(shù)改進(jìn),或者使本技術(shù)領(lǐng)域的其它普通技術(shù)人員能理解本文披露的各實(shí)施例。本發(fā)明的范圍由所附權(quán)利要求來限定。