專利名稱:一種云環(huán)境中的文本索引在線更新方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種云環(huán)境中的文本索引在線更新方法,屬于計(jì)算機(jī)信息檢索技術(shù)領(lǐng) 域。
背景技術(shù):
互聯(lián)網(wǎng)和企業(yè)信息化的發(fā)展,產(chǎn)生了大量的非結(jié)構(gòu)化數(shù)據(jù),如產(chǎn)品模型、技術(shù)文 檔、管理文本、電子郵件等,文本數(shù)據(jù)就是最常見的非結(jié)構(gòu)化數(shù)據(jù)之一。為了實(shí)現(xiàn)海量數(shù)據(jù) 的存儲(chǔ)、索引和檢索,許多的文本檢索系統(tǒng)都采用了云計(jì)算方案。網(wǎng)絡(luò)文本搜索引擎是一類 最常見的提供文本檢索服務(wù)的應(yīng)用,如Google和Nutch。在云環(huán)境中,索引數(shù)據(jù)一般被切分成許多的索引片,然后部署在集群中,每個(gè)節(jié)點(diǎn) 持有其中部分索引片,每個(gè)索引片一般都有多個(gè)備份來保證容錯(cuò)性和負(fù)載平衡。許多采用 云計(jì)算方案的文本檢索系統(tǒng)表現(xiàn)出了優(yōu)異的索引和檢索性能,卻忽略了索引的即時(shí)性要 求。它們假設(shè)文本數(shù)據(jù)索引在一段時(shí)間內(nèi)是不變的,因此采取批量更新索引的方法,在一段 時(shí)間內(nèi)持續(xù)對(duì)新到來的數(shù)據(jù)進(jìn)行索引,定期地將新索引數(shù)據(jù)批量更新到集群中,其索引數(shù) 據(jù)更新周期一般比較長(zhǎng)。對(duì)于云環(huán)境的文本檢索系統(tǒng)來說,用戶要求將隨時(shí)到來的新文檔在盡可能短的時(shí) 間內(nèi)更新到索引中,傳統(tǒng)的批量更新方法無法滿足用戶的需求。高度的精確性和時(shí)效性要 求,使得其索引管理與更新成為一個(gè)重點(diǎn),也是一個(gè)難點(diǎn)。索引的在線更新就是在此環(huán)境下提出來的。它要求文本檢索系統(tǒng)能夠在不影響其 他索引數(shù)據(jù)、不中止檢索服務(wù)的情況下進(jìn)行指定索引數(shù)據(jù)的更新。不過,在多數(shù)情況下,索 引更新都會(huì)導(dǎo)致一定時(shí)間的服務(wù)中斷;而在線更新的目標(biāo)就是,將服務(wù)中斷的時(shí)間盡可能 地縮短。Mauricio Marin等人設(shè)計(jì)了一個(gè)支持在線更新的文本搜索引擎。該搜索引擎允許 用戶執(zhí)行檢索操作及添加文本的操作。添加的文本被索引后,索引數(shù)據(jù)發(fā)送到相應(yīng)節(jié)點(diǎn)進(jìn) 行更新。該系統(tǒng)通過索引讀寫的并發(fā)控制來避免讀寫沖突。但是該系統(tǒng)并沒有對(duì)索引做冗 余備份,無法提供可靠的索引服務(wù)和負(fù)載平衡。對(duì)于每個(gè)新文本,該系統(tǒng)都直接添加到索引 數(shù)據(jù)中;在許多這樣的請(qǐng)求同時(shí)發(fā)生的時(shí)候,節(jié)點(diǎn)就需要頻繁地更新同一索引,導(dǎo)致CPU的 過度繁忙;而對(duì)索引讀寫的并發(fā)控制使得用戶此時(shí)的檢索請(qǐng)求得不到及時(shí)的響應(yīng)。Mark H. Butler 禾口 James Rutherford 開發(fā)的 Distributed Lucene 也是一個(gè)支持 索引在線更新的分布式文本索引系統(tǒng)。該系統(tǒng)采用了 lease機(jī)制來實(shí)現(xiàn)索引的并發(fā)控制, 當(dāng)一個(gè)節(jié)點(diǎn)更新其索引備份時(shí),該節(jié)點(diǎn)必須先獲得該索引的lease。用戶向一個(gè)索引中增加 或刪除文檔時(shí),需要為該索引創(chuàng)建一個(gè)Uncommited IndexVersion,操作完成后顯式地將其 提交。但是對(duì)于一個(gè)索引只能創(chuàng)建一個(gè)Uncommited IndexVersion,這就使得并發(fā)用戶不得 不等待前面用戶的操作完成,影響了并發(fā)的效率。另外,該系統(tǒng)中的索引操作是在節(jié)點(diǎn)中執(zhí) 行的,用戶需要將原始文本傳送到節(jié)點(diǎn)上;因?yàn)槲谋镜乃饕鄬?duì)于原始文本來說一般比較 小,這樣的設(shè)計(jì)會(huì)導(dǎo)致較大的網(wǎng)絡(luò)帶寬資源浪費(fèi)。
3
傳統(tǒng)的索引批量更新方法一般是,首先在一定時(shí)間內(nèi)持續(xù)地創(chuàng)建新索引數(shù)據(jù),等 到創(chuàng)建完成,將集群內(nèi)的原始數(shù)據(jù)全部刪除,然后再將新的索引數(shù)據(jù)部署到集群中,從而啟 動(dòng)新索引數(shù)據(jù)的檢索服務(wù)。這種方法存在著較多的缺點(diǎn)一方面,批量更新一般需要重建全部索引,然后將新的索引數(shù)據(jù)部署到集群中,這 將導(dǎo)致極大的數(shù)據(jù)傳輸量,因此占用很多的網(wǎng)絡(luò)帶寬和計(jì)算資源,執(zhí)行時(shí)間也會(huì)很長(zhǎng),隨著 索引越來越大,對(duì)資源的需求將越來越高,成為系統(tǒng)的瓶頸。另一方面,批量更新一般需要將原索引數(shù)據(jù)刪除,然后再執(zhí)行索引的更新。在索引 的更新期間,系統(tǒng)必將停止檢索服務(wù)。如果更新時(shí)間較長(zhǎng),那么必然導(dǎo)致系統(tǒng)長(zhǎng)時(shí)間無法提 供服務(wù)。
發(fā)明內(nèi)容
本發(fā)明的目的是提出一種云環(huán)境中的文本索引在線更新方法,針對(duì)已有技術(shù)中批 量更新的不足,設(shè)計(jì)了在線更新機(jī)制、索引片增量的緩存機(jī)制等,以保證并發(fā)更新的一致 性,并避免索引的頻繁更新,降低帶寬資源和計(jì)算資源的占用。本發(fā)明提出的云環(huán)境中的文本索引在線更新方法,包括以下步驟(1)在用戶向文本檢索系統(tǒng)添加、刪除或更新文件后,將該文件的識(shí)別信息發(fā)送至 索引模塊;索引模塊根據(jù)文本檢索系統(tǒng)中定義的索引切分規(guī)則,對(duì)接收的識(shí)別信息進(jìn)行判 斷,確定該文件所屬的索引片,并為該文件創(chuàng)建一個(gè)與該索引片相對(duì)應(yīng)的增量數(shù)據(jù);索引模 塊將該增量數(shù)據(jù)緩存,并對(duì)相同索引片的多次添加、刪除或更新產(chǎn)生的增量數(shù)據(jù)合并;當(dāng)用 戶結(jié)束添加、刪除或更新操作后,索引模塊將所有的索引片增量數(shù)據(jù)上傳到共享文件系統(tǒng) 中;索引模塊向文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中包括每個(gè) 被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(2)文本檢索系統(tǒng)中的索引鎖管理器為每個(gè)索引片建立一個(gè)鎖申請(qǐng)隊(duì)列;文本檢 索系統(tǒng)中的集群主節(jié)點(diǎn)接收上述索引片更新命令后,向文本檢索系統(tǒng)中的索引鎖管理器申 請(qǐng)被更新索引片的鎖;索引鎖管理器根據(jù)被更新索引片的名稱將本更新操作加入到與被更 新索引片相對(duì)應(yīng)的鎖申請(qǐng)隊(duì)列中,并依次將鎖賦予申請(qǐng)隊(duì)列中的更新操作;當(dāng)更新操作獲 得被更新索引片的鎖后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)根據(jù)存儲(chǔ)的索引部署狀態(tài)信息,確 定集群中持有被更新索引片的所有子節(jié)點(diǎn);文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)向持有被更新索 引片的所有子節(jié)點(diǎn)詢問當(dāng)前的負(fù)載情況,并根據(jù)各子節(jié)點(diǎn)負(fù)載的大小進(jìn)行排序,將其中一 半負(fù)載較低的節(jié)點(diǎn)作為首批更新的節(jié)點(diǎn),剩余節(jié)點(diǎn)作為次批更新的節(jié)點(diǎn);(3)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)在索引片檢索服務(wù)分布狀態(tài)中,將首批節(jié)點(diǎn)提 供的基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并向首批節(jié)點(diǎn)發(fā)出索引片更新命令,該更 新命令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(4)首批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引 片的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取 相應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,首批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)
點(diǎn);(5)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收首批節(jié)點(diǎn)發(fā)送的更新完成信息后,根據(jù)用戶設(shè)定的索引服務(wù)切換條件,當(dāng)設(shè)定數(shù)量的子節(jié)點(diǎn)的更新操作完成后,在索引片檢索服務(wù) 分布狀態(tài)中,將首批節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并將次批節(jié)點(diǎn) 提供的基于被更新索引片的檢索服務(wù)標(biāo)記為啟用,并向次批節(jié)點(diǎn)發(fā)出索引片更新命令,該 更新命令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(6)次批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引 片的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取 相應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,次批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)點(diǎn)。
(7)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收次批節(jié)點(diǎn)發(fā)送的更新完成信息后,在索引 片檢索服務(wù)分布狀態(tài)中,將所有已完成更新操作的子節(jié)點(diǎn)提供的基于被更新索引片的檢索 服務(wù)標(biāo)記為啟用;當(dāng)所有子節(jié)點(diǎn)都完成更新操作后,集群主節(jié)點(diǎn)向索引鎖管理器釋放鎖,完 成此次更新。本發(fā)明提出的云環(huán)境中的文本索引在線更新方法,其優(yōu)點(diǎn)是1、設(shè)計(jì)了基于索引片增量的在線更新機(jī)制、索引片增量的緩存機(jī)制,在更新時(shí)僅 傳輸必要的增量數(shù)據(jù),避免了索引的頻繁更新和過多冗余數(shù)據(jù)的傳輸,降低了索引更新對(duì) 網(wǎng)絡(luò)帶寬和計(jì)算資源的需求,縮短了索引更新的時(shí)間。2、本發(fā)明方法中還設(shè)計(jì)了多備份索引片的投機(jī)性次序更新機(jī)制,允許在索引更新 的同時(shí),仍能夠持續(xù)提供檢索服務(wù),同時(shí)保證各節(jié)點(diǎn)服務(wù)的一致性。3、本發(fā)明方法還設(shè)計(jì)了基于鎖的并發(fā)更新控制協(xié)議,保證索引更新的一致性。4、本發(fā)明方法在更新時(shí)只選擇相關(guān)的節(jié)點(diǎn)執(zhí)行更新操作,避免索引重新部署帶來 的過高代價(jià)。5、本發(fā)明方法將已有數(shù)據(jù)更新中的“被動(dòng)更新”改為“主動(dòng)更新”,允許節(jié)點(diǎn)動(dòng)態(tài)更 新索引,主動(dòng)地將增量數(shù)據(jù)合并到自己的索引中,而不是僅僅被動(dòng)地接收數(shù)據(jù),這使得索引 的更新更加靈活,實(shí)現(xiàn)了在線更新。6、本發(fā)明方法保證了更新過程中檢索服務(wù)的持續(xù)性,并通過投機(jī)性策略盡快地啟 用新索引數(shù)據(jù)的檢索服務(wù)。
圖1是本發(fā)明提出的云環(huán)境中文本檢索系統(tǒng)的體系結(jié)構(gòu)示意圖。圖2是本發(fā)明提出的云環(huán)境中文本索引在線更新方法的流程框圖。圖3是子節(jié)點(diǎn)的索引片更新過程框圖。
具體實(shí)施例方式本發(fā)明提出的云環(huán)境中的文本索引在線更新方法,其流程框圖如圖2所示,包括(1)在用戶向文本檢索系統(tǒng)添加、刪除或更新文件后,將該文件的識(shí)別信息發(fā)送至 索引模塊;索引模塊根據(jù)文本檢索系統(tǒng)中定義的索引切分規(guī)則,對(duì)接收的識(shí)別信息進(jìn)行判 斷,確定該文件所屬的索引片,并為該文件創(chuàng)建一個(gè)與該索引片相對(duì)應(yīng)的增量數(shù)據(jù);索引模 塊將該增量數(shù)據(jù)緩存,并對(duì)相同索引片的多次添加、刪除或更新產(chǎn)生的增量數(shù)據(jù)合并;當(dāng)用戶結(jié)束添加、刪除或更新操作后,索引模塊將所有的索引片增量數(shù)據(jù)上傳到共享文件系統(tǒng) 中;索引模塊向文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中包括每個(gè) 被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(2)文本檢索系統(tǒng)中的索引鎖管理器為每個(gè)索引片建立一個(gè)鎖申請(qǐng)隊(duì)列;文本檢 索系統(tǒng)中的集群主節(jié)點(diǎn)接收上述索引片更新命令后,向文本檢索系統(tǒng)中的索引鎖管理器申 請(qǐng)被更新索引片的鎖;索引鎖管理器根據(jù)被更新索引片的名稱將本更新操作加入到與被更 新索引片相對(duì)應(yīng)的鎖申請(qǐng)隊(duì)列中,并依次將鎖賦予申請(qǐng)隊(duì)列中的更新操作;當(dāng)更新操作獲 得被更新索引片的鎖后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)根據(jù)存儲(chǔ)的索引部署狀態(tài)信息,確 定集群中持有被更新索引片的所有子節(jié)點(diǎn);文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)向持有被更新索 引片的所有子節(jié)點(diǎn)詢問當(dāng)前的負(fù)載情況,并根據(jù)各子節(jié)點(diǎn)負(fù)載的大小進(jìn)行排序,將其中一 半負(fù)載較低的節(jié)點(diǎn)作為首批更新的節(jié)點(diǎn),剩余節(jié)點(diǎn)作為次批更新的節(jié)點(diǎn);(3)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)在索引片檢索服務(wù)分布狀態(tài)中,將首批節(jié)點(diǎn)提 供的基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并向首批節(jié)點(diǎn)發(fā)出索引片更新命令,該更 新命令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(4)首批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引 片的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取 相應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,首批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)占.
^ \\\ (5)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收首批節(jié)點(diǎn)發(fā)送的更新完成信息后,根據(jù)用 戶設(shè)定的索引服務(wù)切換條件,當(dāng)設(shè)定數(shù)量的子節(jié)點(diǎn)的更新操作完成后,在索引片檢索服務(wù) 分布狀態(tài)中,將首批節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并將次批節(jié)點(diǎn) 提供的基于被更新索引片的檢索服務(wù)標(biāo)記為啟用,并向次批節(jié)點(diǎn)發(fā)出索引片更新命令,該 更新命令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(6)次批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引 片的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取 相應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,次批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)占.
^ \\\ (7)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收次批節(jié)點(diǎn)發(fā)送的更新完成信息后,在索引 片檢索服務(wù)分布狀態(tài)中,將所有已完成更新操作的子節(jié)點(diǎn)提供的基于被更新索引片的檢索 服務(wù)標(biāo)記為啟用;當(dāng)所有子節(jié)點(diǎn)都完成更新操作后,集群主節(jié)點(diǎn)向索引鎖管理器釋放鎖,完 成此次更新。典型的云環(huán)境中的文本檢索系統(tǒng)一般由多臺(tái)機(jī)器組成的集群構(gòu)成,其中至少有一 臺(tái)機(jī)器稱為主節(jié)點(diǎn)(Master),其余機(jī)器稱為子節(jié)點(diǎn)(Slave)。每個(gè)子節(jié)點(diǎn)都持有整體索引 數(shù)據(jù)的一部分,提供基于其持有的部分索引的檢索服務(wù);主節(jié)點(diǎn)負(fù)責(zé)管理所有的子節(jié)點(diǎn),并 向用戶提供服務(wù)接口。將每個(gè)子節(jié)點(diǎn)持有的部分索引稱為整體索引的一個(gè)索引片。在本發(fā)明中,索引片增量(Shard Increment)是指相對(duì)于索引片中原數(shù)據(jù)而言,需 要增加或者刪除的數(shù)據(jù)信息。索引片增量按照索引更新的不同類型分為正增量和負(fù)增量,
6其中正增量用于封裝新增的索引數(shù)據(jù);負(fù)增量存儲(chǔ)要?jiǎng)h除的文件信息或者關(guān)鍵詞信息。在本發(fā)明中,集群的節(jié)點(diǎn)可以分為主引擎模塊、主節(jié)點(diǎn)、子節(jié)點(diǎn)、索引模塊、共享文 件系統(tǒng)等五類。系統(tǒng)的體系結(jié)構(gòu)如圖1所示。其中主引擎模塊是整個(gè)文本檢索系統(tǒng)的對(duì)外 接口,響應(yīng)用戶請(qǐng)求;主節(jié)點(diǎn)負(fù)責(zé)集群中索引的管理、檢索任務(wù)的分配與調(diào)度;子節(jié)點(diǎn)負(fù)責(zé) 維護(hù)自己的索引片并提供檢索服務(wù);索引模塊負(fù)責(zé)為指定的文檔創(chuàng)建索引;共享文件系統(tǒng) 提供了數(shù)據(jù)文件的存儲(chǔ)服務(wù)。本發(fā)明設(shè)計(jì)的索引片增量緩存機(jī)制是指,在用戶的一個(gè)會(huì)話中創(chuàng)建的索引增量會(huì) 先在索引器本地緩存。所有針對(duì)同一個(gè)索引片的增量數(shù)據(jù)都合并為一個(gè)增量文件。當(dāng)增量 積累到一定程度,或者用戶顯式地提交增量的時(shí)候,增量數(shù)據(jù)才會(huì)被更新到集群中。這就在 一定程度上避免了頻繁的索引更新和網(wǎng)絡(luò)傳輸。本發(fā)明中設(shè)計(jì)的多備份索引片的投機(jī)性次序更新機(jī)制是指,當(dāng)目標(biāo)索引片在集群 中有多個(gè)備份的時(shí)候,不要求所有備份同步更新,而是選擇部分節(jié)點(diǎn)首先更新,其余節(jié)點(diǎn)繼 續(xù)提供服務(wù);等首批節(jié)點(diǎn)更新完成,再將檢索服務(wù)切換到首批節(jié)點(diǎn)上,次批節(jié)點(diǎn)再進(jìn)行更 新。這里“投機(jī)性”的含義包括兩方面一方面在于如何選擇第一批更新的節(jié)點(diǎn)。為了盡快提供新索引數(shù)據(jù)的檢索服務(wù), 一般選擇一部分當(dāng)前負(fù)載較小、性能較好的節(jié)點(diǎn)優(yōu)先執(zhí)行索引更新;因?yàn)樵诟码A段提供 檢索服務(wù)的只有一部分節(jié)點(diǎn),為了平衡索引服務(wù)切換前后的系統(tǒng)負(fù)載,一般要求前后兩批 的節(jié)點(diǎn)數(shù)量相同。另一方面在于檢索服務(wù)切換的時(shí)機(jī)。可以選擇第一批的全部節(jié)點(diǎn)更新完 成后才切換檢索服務(wù);也可以在第一批節(jié)點(diǎn)中有部分節(jié)點(diǎn)更新完成的時(shí)候,就將索引服務(wù) 切換到這些節(jié)點(diǎn)上,啟動(dòng)第二批節(jié)點(diǎn)的更新,后面的節(jié)點(diǎn)在更新完成后再加入到檢索服務(wù) 中。第二種選擇的優(yōu)點(diǎn)在于盡早地啟用新索引,但是缺點(diǎn)在于服務(wù)切換以后,由于能提供檢 索服務(wù)的節(jié)點(diǎn)比較少,可能導(dǎo)致壓力較大;而第一種方法則能夠較好地平衡負(fù)載壓力。因 此,檢索服務(wù)切換的時(shí)機(jī)一般要根據(jù)當(dāng)前系統(tǒng)的壓力來決定。本發(fā)明方法允許用戶自行設(shè)定檢索服務(wù)的切換條件。在本發(fā)明提出的不中止服務(wù)的輕量級(jí)索引在線更新方法中,索引更新的具體實(shí)施 方式如下1、創(chuàng)建并上傳索引片增量在用戶向文本檢索系統(tǒng)添加、刪除或更新文件后,將該文件的識(shí)別信息發(fā)送至索 引模塊。索引模塊根據(jù)文本檢索系統(tǒng)中定義的索引切分規(guī)則,對(duì)接收的識(shí)別信息進(jìn)行判斷, 確定該文件所屬的索引片,并為該文件創(chuàng)建一個(gè)與該索引片相對(duì)應(yīng)的增量數(shù)據(jù)。對(duì)于新增 的文件,索引模塊為其創(chuàng)建一個(gè)正增量,其中包含了該文件的全部索引數(shù)據(jù);對(duì)于刪除的文 件,索引模塊為其創(chuàng)建一個(gè)負(fù)增量,其中包含了要?jiǎng)h除的文件具體信息(文件名、文件路徑 等);對(duì)于更新的文件,則分別為舊文件創(chuàng)建一個(gè)負(fù)增量、為新文件創(chuàng)建一個(gè)正增量。為了避免索引更新操作的頻繁執(zhí)行,索引模塊將該增量數(shù)據(jù)緩存,并對(duì)相同索引 片的多次添加、刪除或更新產(chǎn)生的增量數(shù)據(jù)合并;當(dāng)用戶結(jié)束添加、刪除或更新操作后,索 引模塊將所有的索引片增量數(shù)據(jù)上傳到共享文件系統(tǒng)中。最后,索引模塊向文本檢索系統(tǒng) 中的集群主節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中包括每個(gè)被更新索引片的名稱、增量類 型、增量的存儲(chǔ)路徑。2、集群主節(jié)點(diǎn)創(chuàng)建索引片更新計(jì)劃
7
文本檢索系統(tǒng)采用鎖協(xié)議實(shí)現(xiàn)索引更新的并發(fā)控制,每一個(gè)索引更新操作必選先 獲得被更新索引片的鎖才可以執(zhí)行。文本檢索系統(tǒng)中的索引鎖管理器為每個(gè)索引片建立一 個(gè)鎖申請(qǐng)隊(duì)列。文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收上述索引片更新命令后,向索引鎖管理 器申請(qǐng)被更新索引片的鎖。索引鎖管理器根據(jù)被更新索引片的名稱將本更新操作加入到與 被更新索引片相對(duì)應(yīng)的鎖申請(qǐng)隊(duì)列中,并依次將鎖賦予申請(qǐng)隊(duì)列中的更新操作。文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)存儲(chǔ)著集群中的索引部署狀態(tài),索引部署狀態(tài)中記 錄了持有任何一個(gè)索引片的所有子節(jié)點(diǎn)和每個(gè)子節(jié)點(diǎn)持有的所有索引片。當(dāng)更新操作獲得 被更新索引片的鎖后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)根據(jù)存儲(chǔ)的索引部署狀態(tài)信息,確定 集群中持有被更新索引片的所有子節(jié)點(diǎn)。文本檢索系統(tǒng)的結(jié)構(gòu)圖如圖1所示,其中的集群 主節(jié)點(diǎn)向持有被更新索引片的所有子節(jié)點(diǎn)詢問當(dāng)前的負(fù)載情況,并根據(jù)各子節(jié)點(diǎn)負(fù)載的大 小進(jìn)行排序,將一半負(fù)載較低的節(jié)點(diǎn)作為首批更新的節(jié)點(diǎn),剩余節(jié)點(diǎn)作為次批更新的節(jié)點(diǎn)。3、集群主節(jié)點(diǎn)啟動(dòng)首批節(jié)點(diǎn)的更新操作文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)存儲(chǔ)著集群中的索引片檢索服務(wù)分布狀態(tài)。索引片 檢索服務(wù)分布狀態(tài)對(duì)于任何一個(gè)索引片記錄了提供基于該索引片的檢索服務(wù)的所有子節(jié)
點(diǎn)ο文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)在索引片檢索服務(wù)分布狀態(tài)中,將首批節(jié)點(diǎn)提供的 基于被更新索引片的檢索服務(wù)狀態(tài)標(biāo)記為中止。對(duì)于此后到來的檢索請(qǐng)求,集群主節(jié)點(diǎn)不 會(huì)將其發(fā)送到檢索服務(wù)標(biāo)記為中止的節(jié)點(diǎn)上,但這些節(jié)點(diǎn)仍然在提供著檢索服務(wù),只是沒 有暴露給外界。然后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)向首批節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中 包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑。4、首批節(jié)點(diǎn)執(zhí)行索引更新(其流程框圖如圖3所示)首批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)的基于被更新索引片的檢索 服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取相應(yīng)的增 量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中。更新完成后,首批節(jié)點(diǎn)啟動(dòng)在本節(jié)點(diǎn)的基于被更新索引片的檢索服務(wù),并將更新 完成的信息發(fā)送至集群主節(jié)點(diǎn)。5、集群主節(jié)點(diǎn)切換檢索服務(wù)提供者,啟動(dòng)次批節(jié)點(diǎn)的索引更新操作文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收首批節(jié)點(diǎn)發(fā)送的更新完成信息后,根據(jù)用戶設(shè) 定的索引服務(wù)切換條件,當(dāng)設(shè)定數(shù)量的子節(jié)點(diǎn)的更新操作完成后,在索引片檢索服務(wù)分布 狀態(tài)中,將首批節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù)標(biāo)記為啟用,并將次批節(jié)點(diǎn)提供 的基于被更新索引片的檢索服務(wù)標(biāo)記為中止。然后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)向次批節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中 包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑。6、次批節(jié)點(diǎn)執(zhí)行索引更新(其流程框圖如圖3所示)次批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)的基于被更新索引片的檢索 服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取相應(yīng)的增 量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中。更新完成后,次批節(jié)點(diǎn)啟動(dòng)在本節(jié)點(diǎn)的基于被更新索引片的檢索服務(wù),并將更新
8完成的信息發(fā)送至集群主節(jié)點(diǎn)。7、集群主節(jié)點(diǎn)啟用次批子節(jié)點(diǎn)的檢索服務(wù)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收次批節(jié)點(diǎn)發(fā)送的更新完成信息后,在索引片檢 索服務(wù)分布狀態(tài)中,將所有已完成更新操作的子節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù) 標(biāo)記為啟用。當(dāng)所有子節(jié)點(diǎn)都完成更新操作后,集群主節(jié)點(diǎn)向索引鎖管理器釋放鎖,完成此次 更新。
權(quán)利要求
1. 一種云環(huán)境中的文本索引在線更新方法,其特征在于該方法包括以下步驟(1)在用戶向文本檢索系統(tǒng)添加、刪除或更新文件后,將該文件的識(shí)別信息發(fā)送至索引 模塊;索引模塊根據(jù)文本檢索系統(tǒng)中定義的索引切分規(guī)則,對(duì)接收的識(shí)別信息進(jìn)行判斷,確 定該文件所屬的索引片,并為該文件創(chuàng)建一個(gè)與該索引片相對(duì)應(yīng)的增量數(shù)據(jù);索引模塊將 該增量數(shù)據(jù)緩存,并對(duì)相同索引片的多次添加、刪除或更新產(chǎn)生的增量數(shù)據(jù)合并;當(dāng)用戶結(jié) 束添加、刪除或更新操作后,索引模塊將所有的索引片增量數(shù)據(jù)上傳到共享文件系統(tǒng)中;索 引模塊向文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)發(fā)出索引片更新命令,該命令中包括每個(gè)被更新 索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(2)文本檢索系統(tǒng)中的索引鎖管理器為每個(gè)索引片建立一個(gè)鎖申請(qǐng)隊(duì)列;文本檢索系 統(tǒng)中的集群主節(jié)點(diǎn)接收上述索引片更新命令后,向文本檢索系統(tǒng)中的索引鎖管理器申請(qǐng)被 更新索引片的鎖;索引鎖管理器根據(jù)被更新索引片的名稱將本更新操作加入到與被更新索 引片相對(duì)應(yīng)的鎖申請(qǐng)隊(duì)列中,并依次將鎖賦予申請(qǐng)隊(duì)列中的更新操作;當(dāng)更新操作獲得被 更新索引片的鎖后,文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)根據(jù)存儲(chǔ)的索引部署狀態(tài)信息,確定集 群中持有被更新索引片的所有子節(jié)點(diǎn);文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)向持有被更新索引片 的所有子節(jié)點(diǎn)詢問當(dāng)前的負(fù)載情況,并根據(jù)各子節(jié)點(diǎn)負(fù)載的大小進(jìn)行排序,將其中一半負(fù) 載較低的節(jié)點(diǎn)作為首批更新的節(jié)點(diǎn),剩余節(jié)點(diǎn)作為次批更新的節(jié)點(diǎn);(3)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)在索引片檢索服務(wù)分布狀態(tài)中,將首批節(jié)點(diǎn)提供的 基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并向首批節(jié)點(diǎn)發(fā)出索引片更新命令,該更新命 令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(4)首批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引片 的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取相 應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,首批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)點(diǎn).(5)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收首批節(jié)點(diǎn)發(fā)送的更新完成信息后,根據(jù)用戶設(shè) 定的索引服務(wù)切換條件,當(dāng)設(shè)定數(shù)量的子節(jié)點(diǎn)的更新操作完成后,在索引片檢索服務(wù)分布 狀態(tài)中,將首批節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù)標(biāo)記為中止,并將次批節(jié)點(diǎn)提供 的基于被更新索引片的檢索服務(wù)標(biāo)記為啟用,并向次批節(jié)點(diǎn)發(fā)出索引片更新命令,該更新 命令中包括被更新索引片的名稱、增量類型、增量的存儲(chǔ)路徑;(6)次批節(jié)點(diǎn)接收到上述索引片更新命令后,停止本節(jié)點(diǎn)提供的基于被更新索引片 的檢索服務(wù),并根據(jù)上述被更新索引片的增量的存儲(chǔ)路徑,從上述共享文件系統(tǒng)上讀取相 應(yīng)的增量數(shù)據(jù),根據(jù)增量類型,將增量數(shù)據(jù)合并到本節(jié)點(diǎn)持有的被更新索引片中;更新完 成后,次批節(jié)點(diǎn)啟用被更新索引片在本節(jié)點(diǎn)的檢索服務(wù),并將更新完成的信息發(fā)送至主節(jié)點(diǎn).(7)文本檢索系統(tǒng)中的集群主節(jié)點(diǎn)接收次批節(jié)點(diǎn)發(fā)送的更新完成信息后,在索引片檢 索服務(wù)分布狀態(tài)中,將所有已完成更新操作的子節(jié)點(diǎn)提供的基于被更新索引片的檢索服務(wù) 標(biāo)記為啟用;當(dāng)所有子節(jié)點(diǎn)都完成更新操作后,集群主節(jié)點(diǎn)向索引鎖管理器釋放鎖,完成此 次更新。
全文摘要
本發(fā)明涉及一種云環(huán)境中的文本索引在線更新方法,屬于計(jì)算機(jī)信息檢索技術(shù)領(lǐng)域。用戶向文本檢索系統(tǒng)添加、刪除或更新文件后,索引模塊創(chuàng)建文件所屬索引片的增量數(shù)據(jù),并將同一索引片的多組增量數(shù)據(jù)合并。集群主節(jié)點(diǎn)通過對(duì)子節(jié)點(diǎn)負(fù)載大小排序選出首批節(jié)點(diǎn)和次批節(jié)點(diǎn),分批執(zhí)行索引更新。每批節(jié)點(diǎn)收到更新命令后,首先停止檢索服務(wù),并將讀取到的增量數(shù)據(jù)合并到自己的索引片中,然后恢復(fù)檢索服務(wù)。集群主節(jié)點(diǎn)根據(jù)用戶設(shè)定的索引服務(wù)切換條件,決定啟用首批節(jié)點(diǎn)檢索服務(wù)、次批節(jié)點(diǎn)開始更新的時(shí)機(jī)。最后,集群主節(jié)點(diǎn)恢復(fù)所有節(jié)點(diǎn)的檢索服務(wù),完成更新。本方法降低了索引更新對(duì)網(wǎng)絡(luò)帶寬和計(jì)算資源需求,縮短了索引更新時(shí)間。
文檔編號(hào)G06F17/30GK102004778SQ20101055453
公開日2011年4月6日 申請(qǐng)日期2010年11月19日 優(yōu)先權(quán)日2010年11月19日
發(fā)明者丁貴廣, 張君, 王建民 申請(qǐng)人:清華大學(xué)