]在新增加的網(wǎng)頁索引表中存儲有本次更新對應(yīng)的網(wǎng)頁標(biāo)識,所述網(wǎng)頁標(biāo)識具體可以是該網(wǎng)頁的URL地址,或者其他可用于標(biāo)識該網(wǎng)頁的信息。該網(wǎng)頁存儲表中還存儲有所述網(wǎng)頁標(biāo)識在所述索引存儲區(qū)中的存儲位置信息,用于在所述索引存儲區(qū)中定位目標(biāo)網(wǎng)頁標(biāo)識。
[0108]上述步驟203、204的執(zhí)行順序不做限制。
[0109]所述步驟204可具體根據(jù)如下步驟a)和b)來存儲所述字段數(shù)據(jù)對應(yīng)的網(wǎng)頁標(biāo)識:
[0110]步驟a):在所述網(wǎng)頁索引表中設(shè)置2N個索引子表,為每一個索引字表設(shè)置對應(yīng)的N位二進(jìn)制表值,N為預(yù)設(shè)大于等于I的整數(shù)。
[0111]步驟b):獲取所述網(wǎng)頁標(biāo)識對應(yīng)的二進(jìn)制數(shù)值,根據(jù)所述二進(jìn)制數(shù)值的前N位將所述網(wǎng)頁標(biāo)識存儲到對應(yīng)表值的索引子表中。
[0112]由于在每次更新時涉及的網(wǎng)頁數(shù)量較大,并且網(wǎng)頁標(biāo)識在計算機(jī)中的存儲形式一般是一個位數(shù)較多的二進(jìn)制數(shù)值,為了便于在網(wǎng)頁索引表中快速查找目標(biāo)網(wǎng)頁的標(biāo)識,可將網(wǎng)頁索引表劃分成2N個索引子表,每一個索引字表對應(yīng)一個N位二進(jìn)制表值。在存儲網(wǎng)頁標(biāo)識時,可根據(jù)該網(wǎng)頁標(biāo)識的前N位二進(jìn)制數(shù)值,將該網(wǎng)頁標(biāo)識存儲到對應(yīng)表值的索引字表中。這樣在查找該網(wǎng)頁標(biāo)識時,只需根據(jù)該網(wǎng)頁標(biāo)識的前N位二進(jìn)制數(shù)值,去對應(yīng)表值的索引字表中查找即可,大大節(jié)省了查找時間。
[0113]如圖3所示為采用本發(fā)明上述實施例所建立的數(shù)據(jù)存儲結(jié)構(gòu)示意圖。互聯(lián)網(wǎng)中包含的網(wǎng)頁數(shù)量較大,我們一般將哈希值相同或相近的網(wǎng)頁的摘要和索引信息存儲在同一個索引分片中,在圖3中,以單獨(dú)的一個索引分片為例進(jìn)行介紹,該索引分片包含網(wǎng)頁索引表、字段存儲區(qū)、版本信息表。
[0114]網(wǎng)頁索引表中存儲本次更新時涉及的網(wǎng)頁標(biāo)識列表,以及每一個網(wǎng)頁標(biāo)識在新增加的更新存儲區(qū)中的存儲位置信息。網(wǎng)頁索引表i為在第i次更新時新增加的網(wǎng)頁索引表。在實際應(yīng)用中,可以將網(wǎng)頁索引表的名稱上附加更新時間信息,一方面可以區(qū)分各個不同的網(wǎng)頁索引表,另一方面也便于從名稱上立刻辨別出哪一個為最新的網(wǎng)頁索引表。
[0115]在圖3中,包含三個字段存儲區(qū),分別是穩(wěn)定存儲區(qū)、不易變存儲區(qū)、易變存儲區(qū)。每一個字段存儲區(qū)均包含若干更新存儲區(qū)。例如,更新存儲區(qū)i為在第i次更新時,在不易變存儲區(qū)中新增加的更新存儲區(qū),其包含數(shù)據(jù)存儲區(qū)i和對應(yīng)的索引存儲區(qū)i兩部分。在實際應(yīng)用中,也可以將更新存儲區(qū)的名稱中附加更新時間信息,一方面可以區(qū)分各個不同的更新存儲區(qū),另一方面也便于從名稱上立刻辨別出哪一個為最新的更新存儲區(qū)。
[0116]版本信息表中記錄了最新的版本信息,如當(dāng)前索引分片包含哪些網(wǎng)頁索引表、各字段存儲區(qū)包含哪些更新存儲區(qū)等信息,以便于進(jìn)行版本管理,以確保在正排索引時能夠按照最新的索引信息獲得最新的摘要字段數(shù)據(jù)。版本信息表i為在第i次更新時新增加的版本信息表,在實際應(yīng)用中,也可以將版本信息表的名稱中附加更新時間信息,一方面可以區(qū)分各個不同的版本信息表,另一方面也便于從名稱上立刻辨別出哪一個為最新的版本信肩、O
[0117]如圖4所示為本發(fā)明提供的一種數(shù)據(jù)存儲方法的另一個實施例的流程示意圖,在所述實施例中,步驟201至204參見上述實施例中的對應(yīng)步驟的描述,所述實施例還包括如下步驟205至步驟208:
[0118]步驟205:判斷是否有待刪除的網(wǎng)頁,如果有,在新增加的更新存儲區(qū)中設(shè)置所述待刪除的網(wǎng)頁的有效時間。
[0119]步驟206:當(dāng)達(dá)到所述有效時間后,將所述待刪除的網(wǎng)頁在各次更新時存儲的字段數(shù)據(jù)和對應(yīng)的索引信息標(biāo)記為無效。
[0120]本發(fā)明的技術(shù)方案,對網(wǎng)頁摘要及索引的更新均為增量更新,對于待刪除的網(wǎng)頁也適用。如果本次更新時,檢測到有需要刪除的網(wǎng)頁,則認(rèn)為該網(wǎng)頁的所有字段都是更新字段,在對應(yīng)的各個字段存儲區(qū)中相應(yīng)的也要增加更新存儲區(qū)。
[0121]由于是待刪除的網(wǎng)頁,更新后的字段數(shù)據(jù)都是空數(shù)據(jù),因此在數(shù)據(jù)存儲區(qū)中,可以用預(yù)設(shè)標(biāo)識來代替更新后的字段數(shù)據(jù),并在索引存儲區(qū)中相應(yīng)存儲該預(yù)設(shè)標(biāo)識的位置信息和網(wǎng)頁標(biāo)識。
[0122]倒排索引和正排索引在實際使用時可能存在更新時間差的問題,例如在本次更新中有待刪除的網(wǎng)頁,如果當(dāng)網(wǎng)頁摘要和對應(yīng)的正排索引更新后將該待刪除的網(wǎng)頁的各摘要字段及索引信息立即刪除,或標(biāo)記為無效的話,由于倒排索引此時可能還未完全更新,即在倒排索引使用的網(wǎng)頁列表中還未將該待刪除的網(wǎng)頁標(biāo)識刪除,則此時可能還會有針對該待刪除的網(wǎng)頁的摘要字段的索引需求。
[0123]因此,在實施例中,為待刪除的網(wǎng)頁設(shè)置“有效時間”屬性,這樣在本次更新網(wǎng)頁摘要和對應(yīng)的索引信息后,仍然會對該待刪除的網(wǎng)頁的字段數(shù)據(jù)和對應(yīng)的索引信息保留一段時間,直至達(dá)到所述有效時間后,將所述待刪除的網(wǎng)頁在各次更新時存儲的字段數(shù)據(jù)和對應(yīng)的索引信息標(biāo)記為無效,這樣可以保證在倒排索引使用的網(wǎng)頁列表中該待刪除的網(wǎng)頁標(biāo)識已經(jīng)確實被刪除了,不會再有針對該待刪除的網(wǎng)頁的摘要字段的索引需求,從而解決了倒排索引和正排索引的更新時間差的問題。
[0124]該“有效時間”屬性可以與該待刪除的網(wǎng)頁標(biāo)識一起,存儲在索引存儲區(qū)中。為了保持存儲格式一致,對于不需要刪除的網(wǎng)頁,也可以在其各個更新存儲區(qū)中保留該“有效時間”屬性,并將該屬性值設(shè)置為無效,或設(shè)置一個無限長的時間,直至檢測到該網(wǎng)頁需要刪除時,才在新增加的更新存儲區(qū)中真正設(shè)置該屬性的值。
[0125]步驟207:將歷史更新存儲區(qū)中與所述更新字段對應(yīng)的歷史字段數(shù)據(jù)和對應(yīng)的歷史索引信息標(biāo)記為無效。
[0126]由于本發(fā)明的網(wǎng)頁摘要字段的更新是增量更新,因此可能出現(xiàn)這樣的情況,即多個更新存儲區(qū)包含同一個網(wǎng)頁在不同時期更新的字段數(shù)據(jù)及對應(yīng)的索引信息。這時,應(yīng)以最新更新的更新存儲區(qū)作為該網(wǎng)頁對應(yīng)的有效更新存儲區(qū),該有效更新存儲區(qū)中包含的字段數(shù)據(jù)和對應(yīng)的歷史索引信息即為有效的字段數(shù)據(jù)和索引信息。而將以往的歷史更新存儲區(qū)中與所述更新字段對應(yīng)的歷史字段數(shù)據(jù)和對應(yīng)的歷史索引信息都標(biāo)記為無效。
[0127]在實際應(yīng)用中,可在更新存儲區(qū)對應(yīng)的文件名中附帶更新時間信息,這樣從各更新存儲區(qū)的文件名即可快速判斷出哪一個更新存儲區(qū)為有效更新存儲區(qū)。
[0128]步驟208:合并所述字段存儲區(qū)包含的若干更新存儲區(qū),在合并后的新更新存儲區(qū)中刪除標(biāo)記為無效的字段數(shù)據(jù)和對應(yīng)的索引信息。
[0129]隨著網(wǎng)頁摘要不斷更新,各字段存儲區(qū)中包含的更新存儲區(qū)的數(shù)量越來越多,同時各更新存儲區(qū)包含的無效字段數(shù)據(jù)和索引信息的數(shù)量也越來越多。過多的更新存儲區(qū)的數(shù)量降低了檢索服務(wù)的效率,并且無效字段數(shù)據(jù)和索引信息也浪費(fèi)了很多存儲空間。如果進(jìn)行全量更新的話,涉及的數(shù)據(jù)量較大,因此本實施例中對若干更新存儲區(qū)進(jìn)行合并,有效減少更新存儲區(qū)的數(shù)量,去掉其中包含的無效字段數(shù)據(jù)和對應(yīng)的索引信息,節(jié)約存儲空間,從而使增量更新一直進(jìn)行下去,避免全量更新所帶來的時間和設(shè)備的巨大開銷。
[0130]具體的,上述步驟208可具體包括如下步驟c)、d)、e):
[0131]步驟c):在所述字段存儲區(qū)中選擇若干待合并的更新存儲區(qū)。
[0132]步驟d):分別計算所述待合并的更新存儲區(qū)包含的有效字段數(shù)據(jù)的數(shù)量之和。
[0133]這里所指的有效字段數(shù)據(jù)的數(shù)量具體可以是有效字段的個數(shù),也可以是有效字段數(shù)據(jù)所占用的內(nèi)存值。
[0134]步驟e):如果所述數(shù)量之和小于第一預(yù)設(shè)閾值,則合并所述待合并的更新存儲區(qū)。
[0135]具體的,可為每個更新存儲區(qū)設(shè)置其包含的字段數(shù)據(jù)和/或索引信息的數(shù)量上限閾值,例如,設(shè)置每一個更新存儲區(qū)最多包含100條字段對應(yīng)的字段數(shù)據(jù)。假設(shè)選擇了兩個待合并的更新存儲區(qū),并且這兩個待合并的更新存儲區(qū)包含的有效字段分別為55和60,則由于這兩個待合并的更新存儲區(qū)包含的有效字段的數(shù)量之和超過了 100,因此這兩個待合并的更新存儲區(qū)不能合并。
[0136]可選的,上述步驟2081可具體包括如下子步驟:
[0137]分別計算每一個更新存儲區(qū)包含的有效字段數(shù)據(jù)數(shù)量。
[0138]從所述字段存儲區(qū)中選擇所述有效字段數(shù)據(jù)數(shù)量最少的若干更新存儲區(qū)作為所述待合并的更新存儲區(qū)。
[0139]在選擇待合并的更新存儲區(qū)時,可有針對性的選擇有效字段數(shù)據(jù)的數(shù)量最少的若干更新存儲區(qū),這樣選擇出來的待合并的更新存儲區(qū)更有可能符合上述步驟2083的合并條件。
[0140]可選的,上述步驟2081也可