[發明專利]一種高可用分布式全文索引方法有效
| 申請號: | 201210226357.2 | 申請日: | 2012-06-29 |
| 公開(公告)號: | CN102779185A | 公開(公告)日: | 2012-11-14 |
| 發明(設計)人: | 陳嶺;魯偉明;余斌 | 申請(專利權)人: | 浙江大學 |
| 主分類號: | G06F17/30 | 分類號: | G06F17/30 |
| 代理公司: | 杭州求是專利事務所有限公司 33200 | 代理人: | 周烽 |
| 地址: | 310058 浙江*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 可用 分布式 全文 索引 方法 | ||
1.一種高可用分布式全文索引方法,其特征在于,該方法包括以下步驟:
(1)啟動基礎服務系統,包括分布式文件系統、分布式列式數據庫以及元數據目錄服務;所述分布式文件系統用于存儲索引節點建立的索引文件,同時為查詢集群中的節點提供索引文件;所述分布式列式數據庫用于提供本發明中的操作日志服務,存儲本發明執行的各項操作,此外,分布式列式數據庫還用于存儲原始全文數據文件,分布式列式數據庫應支持按列存儲,;元數據目錄服務實現元數據的存儲;
(2)在各個節點上啟動索引集群服務和查詢集群服務,其中,索引集群服務包括索引主節點服務和索引節點服務,查詢集群服務包括查詢主節點服務和查詢節點服務;該步驟具體為:首先,索引主節點和搜索主節點分別啟動,進入安全模式,并分別掃描并監聽元數據目錄中索引節點和查詢節點目錄節點,以分別管理這些目錄下的節點;其次,索引節點和查詢節點啟動,并將自身的信息注冊到元數據節點目錄之上,此時索引主節點和搜索主節點監聽到消息,將新加入的節點納入自身管理之中;最后,如果在安全模式下,節點不在發生變化,那么退出安全模式;至此完成了整個分布式全文索引系統啟動的過程;
(3)在全文數據上創建索引、更新索引、刪除索引;其中,創建索引包括增量式創建索引和批量式創建索引;該步驟通過以下子步驟來實現:
(3.1)所述的增量式創建索引,需要用戶在索引任務定義中將創建索引的模式設置為增量式模式;增量式創建索引的過程包括:
(3.1.1)當數據插入到存儲系統中,觸發增量建立索引的任務,索引主節點通過反射機制實例化索引任務定義中的索引分片策略,判定該數據的索引歸屬于哪一個索引分片,此后從元數據目錄中讀取索引分片與索引節點的映射關系,找到負責建立該索引分片的索引節點;最后將節點ID寫入到消息中;
(3.1.2)索引主節點將3.1.1生成的消息通過遠程調用的方式將該消息隨機塞到任意一個索引節點的本地消息隊列中;
(3.1.3)索引節點讀取對應的消息,如果該消息屬于該節點,那么獲取消息后的索引節點會根據消息中的數據主鍵從數據存儲系統中讀出數據,封裝成索引單元,否則此消息不屬于該節點,那么通過遠程調用以及消息中的節點信息將該消息轉發到對應索引節點;
(3.1.3)索引節點處理該消息,如果不存在與該消息對應索引處理器,則創建索引處理器,并根據索引任務定義實例化索引器;索引器讀入索引單元,根據索引任務中的預定義索引域,對存儲于索引單元中的數據進行索引,同時在操作日志1中記錄索引分片ID與操作消息,并且在操作日志2中記錄數據主鍵與對應的索引子分片的名字;
(3.1.4)如果此時滿足索引子分片文件上傳的條件且此時該索引處理器中合并線程不在運行,那么停止當前的索引子分片文件上的索引器,新建一個文件目錄作為新的索引器的索引目錄,轉步驟3.1.3;上傳索引文件線程并執行步驟3.1.5;否則依然將索引建在本地的索引子分片目錄之下,轉步驟3.1.3;
(3.1.5)將舊的索引子分片文件重新命名為合并文件,設置索引正在合并的標志,并且在合并文件目錄上啟動一個索引文件合并線程,將索引文件合并;上傳索引文件線程將合并的結果上傳到分布式文件系統中的索引子分片文件目錄;并且將新增索引子分片的操作消息插入到元數據目錄中的Master_queue上;
(3.1.6)如果上傳成功,那么就刪除與該索引分片對應的索引操作日志1,否則跳轉至步驟3.1.5重復上傳索引分片的過程;
(3.2)更新索引的過程包括:
(3.2.1)更新數據的操作觸發更新索引的任務,索引主節點根據索引分片策略判定該數據歸屬于哪一個索引分片,并從元數據目錄上讀取索引分片與索引節點的映射關系,找到對應的索引節點;
(3.2.2)索引主節點通過遠程調用將生成的更新索引消息傳遞給任意索引節點的本地消息隊列,該索引節點從中讀取對應的更新消息,如果該消息不屬于當前節點,那么該節點根據消息中的節點信息將消息轉發到真正的處理節點;
(3.2.3)獲取更新消息后的索引節點會根據消息中的信息,根據數據ID在該索引分片的操作日志2中查找對應的索引子分片,將索引子分片ID寫入消息中,如果此時索引子分片在本地磁盤上,轉步驟3.2.4;否則轉步驟3.2.5;
(3.2.4)根據該數據的文檔主鍵,如果此時該數據的索引在本地的索引子分片之中,直接更新對應的索引;并在操作日志1中記錄索引分片ID和對應的消息,轉步驟3.2.2;
(3.2.5)判定當前更新緩存隊列中的消息數目是否到達閾值,如果沒有到達則將該消息存入該隊列,返回步驟3.2.2;否則轉步驟3.2.6;
(3.2.6)將更新緩存隊列中的消息全部交給處理隊列,啟動更新線程,更新線程處理每一個消息,根據每一個數據主鍵和索引子分片的對應關系,生成索引子分片與索引主鍵的一對多映射關系,此后,從分布式文件系統中將索引子分片下載本地磁盤,在該分片上實例化出索引處理器以及對應的索引器,根據消息中的數據主鍵從分布式列式數據庫中讀取數據,封裝成索引單元并執行更新索引操作,成功之后在操作日志1中記錄該索引子分片執行的更新操作;
(3.2.7)當完成該索引子分片中所有更新操作,關閉在該目錄上的索引器,并將更新目錄中的索引文件上傳至分布式索引子分片的目錄;刪除操作日志1中與該索引子分片相關的操作記錄,同樣的操作重復執行直至遍歷完映射關系;
(3.3)刪除索引的過程包括:
(3.3.1)刪除數據的操作觸發刪除索引的任務,索引主節點根據索引分片策略判定該數據歸屬于哪一個索引分片,并從元數據目錄上讀取索引分片與索引節點的映射關系,找到對應的索引節點;
(3.3.2)索引主節點通過遠程調用將生成的刪除索引消息傳遞給任意索引節點的本地消息隊列,該索引節點從中讀取對應的刪除消息,如果該消息不屬于當前節點,那么該節點根據消息中的節點信息將消息轉發到真正的處理節點;
(3.3.3)獲取刪除消息后的索引節點會根據消息中的信息,根據數據ID在該索引分片的操作日志2中查找對應的索引子分片,將索引子分片ID寫入消息中,如果此時索引子分片在本地磁盤上,轉步驟3.3.4;否則轉步驟3.3.5;
(3.3.4)根據該數據的文檔主鍵,如果此時該數據的索引在本地的索引子分片之中,直接刪除對應的索引;并在操作日志1中記錄索引分片ID和對應的消息,轉步驟3.3.2;
(3.3.5)判定當前刪除緩存隊列中的消息數目是否到達閾值,如果沒有到達則將該消息存入該隊列,返回步驟3.3.2;否則轉步驟3.3.6;
(3.3.6)將刪除緩存隊列中的消息全部交給處理隊列,啟動刪除線程,刪除線程處理每一個消息,根據每一個數據主鍵和索引子分片的對應關系,生成索引子分片與索引主鍵的一對多映射關系,此后,從分布式文件系統中將索引子分片下載本地磁盤,在該分片上實例化出索引處理器以及對應的索引器,根據消息中的數據主鍵從分布式列式數據庫中讀取數據,封裝成索引單元并執行刪除索引操作,成功之后在操作日志1中記錄該索引子分片執行的刪除操作;
(3.3.7)當完成該索引子分片中所有刪除操作,關閉在該目錄上的索引器,并將刪除目錄中的索引文件上傳至分布式索引子分片的目錄;刪除操作日志1中與該索引子分片相關的操作記錄,同樣的操作重復執行直至遍歷完映射關系;
(3.4)所述的批量式索引模式是當用戶在索引任務定義中定義了批量式建立索引模式,此時,索引主節點將模式轉換為批量式索引模式,批量式索引方法具體包含以下步驟:
(3.4.1)調用MapReduce框架,在Map階段調用索引分片策略,將數據劃分為n個數據集合;然后將每個數據集合中的數據隨機劃分到若干個索引節點上;
(3.4.2)每個索引節點對劃分的數據根據其所屬的索引分片,分別建立索引子分片,每一個索引子分片按照大小劃分,當索引子分片大小超過閾值,則創建新的索引子分片;
(3.4.3)在Reduce階段,每個索引節點將自身中索引子分片文件合并到的對應的索引分片文件,將會生成n個索引分片文件;
(3.4.4)當完成批量式建索引任務之后,索引主節點在元數據目錄下的Master_queue下寫入載入索引分片的操作;查詢主節點根據此操作通過節點選擇策略將索引分片分配給若干個查詢節點,并且在元數據目錄下的Node_queue中寫入載入索引分片的操作,各個對應的查詢節點執行此操作,載入對應的索引;
(4)查詢索引,包括以下子步驟:
(4.1)查詢客戶端根據查詢內容生成分布式查詢,對該查詢進行解析,產生對應的解析結果;
(4.2)此后查詢客戶端利用步驟4.1中產生的結果,調用本地的查詢節點選擇策略;該策略會遠程調用查詢主節點上的索引分片選擇策略,根據元數據目錄保存的查詢節點與索引分片的信息,決定該查詢屬于哪些索引分片,由于一個索引分片有多個索引子分片,因此根據元數據目錄中索引子分片與查詢節點的映射關系,利用負載均衡技術從這些節點中選擇負載最輕的查詢節點,生成與該查詢相對應的查詢節點列表;最后,將該列表返回給查詢客戶端;
(4.3)查詢客戶端獲取該查詢節點列表,通過遠程調用的方法,并行向這些查詢節點發布查詢請求;
(4.4)查詢節點執行該查詢請求,通過一個線程池在不同的索引分片之上查詢對應的結果,將結果返回給查詢客戶端;
(4.5)客戶端獲取各個查詢節點的查詢結果之后,對查詢結果進行合并操作,完成整個查詢過程。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于浙江大學,未經浙江大學許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201210226357.2/1.html,轉載請聲明來源鉆瓜專利網。





