專利名稱:一種分布式實時搜索引擎的制作方法
技術領域:
本發明涉及搜索引擎技術領域,尤其涉及一種分布式實時搜索引擎。
背景技術:
伴隨著知識經濟時代的到來,互聯網絡中的信息呈爆炸式增長,現階段人們面對的不是信息匱乏,而是信息泛濫,無從篩選,因而,如何精確、快速、及時獲取需要的信息,是搜索引擎需要解決的問題。搜索引擎是指根據一定的策略、運用特定的計算機程序從特定網絡如互聯網上搜集信息,在對信息進行組織和處理后,為用戶提供檢索服務,將用戶檢索相關的信息展示給用戶的系統。傳統的搜索引擎,例如,Google、百度、Yahoo等,雖然處理的數據量巨大,已達到 TB級,但其數據源主要來自門戶網站、論壇、電子政務等常規站點,這一類的站點數據更新頻率不高,每次更新的數據量也不大,因而其信息處理對搜索引擎的實時性要求并不高。隨著微博,社交類網站等社會化媒體的興起,網民創造的“微信息”大量涌現,從而產生實時海量數據。另外隨著企業移動應用如移動CRM系統和手持終端的快速發展,用戶對資訊的查詢速度和實時性提出了更高的要求,傳統搜索引擎已經不能適應實時海量數據處理和實時搜索的處理需求。實時海量數據具有更新頻率高、更新的數據量大、累積的數據量大的特性,通常達到幾百GB,甚至達到TB或PB級的數據量。實時搜索引擎在海量數據處理和查詢響應的實時性上都有很高的要求。當數據量達到TB級時,數據更新的頻率和查詢響應的速度之間存在很大的矛盾,因為當累積數據量大,更新的數據量也很大時,會導致索引的構建和維護時間長從而導致實時性無法保證,即,現有的搜索引擎方案采用該增量索引機制時,索引的構建和檢索過程是分開進行的,索引的構建邏輯只有在新段中累積的文檔數達到閾值(如10000)或者間隔時間達到閾值(如5分鐘)后,才將新段提交到索引分片中供索引檢索邏輯使用。因此,從一個文檔的提交到能夠檢索到該文檔,之間會有一定的時間延遲,通常在幾分鐘到幾十分鐘范圍內,而在實時檢索中,如此長的延遲是不可容忍的。
發明內容
針對現有技術方案的不足,本發明提出一種克服增量索引機制跟索引實時性之間的矛盾,通過系統內存中的更新時索引、合并時索引和磁盤索引的配合實現的一種分布式實時搜索引擎。本發明采用的技術方案如下
一種分布式實時搜索引擎,其系統構建和運行至少包括以下步驟 A.設計系統的功能性結構,該功能性結構是在基于Master/Slave的集群式系統中創建,包括以下功能節點中心控制節點、索引數據存儲節點和對外服務節點,其中,所述的中心控制節點創建于Master系統中,所述的索引數據存儲節點和對外服務節點創建于Slave 系統中,所述的中心控制節點,用于數據索引結構中索引的屬性信息的存儲和維護,以及索引數據存儲節點的屬性信息的存儲和維護,所述的索引數據存儲節點用于數據索引結構中索引分片的創建、更新和檢索,所述的對外服務節點用于接收索引的創建、更新和檢索請求并將該請求轉發至中心控制節點進行處理;
B.設計系統的數據索引結構,該索引結構從上到下的樹形層次構成是索引、索引分片、段、文檔和域,其中,所述的索引在一個系統中可以有多個,所述的一個索引分片是所述索引被分割后的一個數據塊,其中,屬于同一索引的各個索引分片存儲在索引數據存儲節點上,所述的一個索引分片是由一至多個段構成,所述的一個段是由一至多個文檔構成,一個段中所含的各個文檔可以是不同的數據對象類型,所述的一個文檔在系統全局中具有唯一標識的鍵值,所述的文檔的結構包含用于描述文檔類型的域;
C.索引的創建,包括以下步驟
Cl.對外服務節點接收到索引創建請求后將該請求轉發至中心控制節點,中心控制節點解析該索引創建請求,從中提取待創建索引的屬性信息,并驗證該屬性信息是否是完備的和有效的,如果該屬性信息完備并且有效,則進行步驟C2的處理,如果該屬性信息不完備或者無效,則發送應答失敗信息至對外服務節點;
C2.中心控制節點根據步驟Cl中生成的待創建索引的屬性信息中的索引分片數將待創建索引分割為若干分片,同時,根據存儲于中心控制節點中的索引數據節點的屬性信息, 來判斷每個索引數據節點的狀態和負載情況,并依此來確定每個索引分片在哪個索引數據節點中存儲和創建,然后將待創建索引的屬性信息發送至各個相對應的索引數據存儲節點。索引數據存儲節點根據收到的待創建索引的屬性信息,在該索引數據存儲節點上構建中心控制節點分派的所述待創建索引的索引分片,如果該索引數據存儲節點創建該索引分片失敗,則中心控制節點將該索引分片分派給其他的狀態良好、負載相對比較小的索引數據節點來創建,直至該待創建索引的全部索引分片在索引數據存儲節點中創建完成或者創建創建失敗,進行步驟C3的處理;
C3.如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建完成,中心控制節點更新存儲于其中的索引數據存儲節點屬性信息,并發送索引分片創建成功的應答信息至對外服務節點;如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建失敗,則向對外服務節點發送創建索引失敗的應答;
D.索引的更新,包括以下步驟
Dl.對外服務節點接收到索引更新請求后將該請求轉發至中心控制節點,中心控制節點根據存儲于其中的索引屬性信息和索引數據存儲節點屬性信息,將該索引更新請求發送至該索引的索引分片所在的索引數據存儲節點;
D2.索引數據存儲節點根據收到的索引更新請求,在待更新索引所在索引數據存儲節點的索引分片上,將更新文檔存儲于新的段中,如果更新文檔存儲成功,則將該更新文檔相對應的舊文檔在新的段中標記為刪除狀態,并返回索引更新成功信息至中心控制節點,如果更新文檔存儲失敗,則返回索引更新失敗信息至中心控制節點,中心控制節點最后將索引更新成功或失敗的信息發送至對外服務節點;
該步驟D的索引更新,還包括文檔的刪除步驟當索引更新請求僅為刪除文檔命令時, 在待刪除文檔所在的索引數據存儲節點的存儲分片上,在新的段中將該文檔標記為刪除; 該步驟D的索引更新,還包括構建實時索引的步驟在系統的內存中同時構建更新時索引和合并時索引,索引的檢索是通過訪問該更新時索引和合并時索引進行,在進行索引更新時,更新中的索引為所述的更新時索引,當該更新時索引的文檔數量達到閾值或者該更新時索引的更新時間達到閾值時,系統提交該更新時索引到磁盤索引中,之后變更該更新時索引為合并時索引并同時變更之前的合并時索引為更新時索引; E.索引的檢索,包括以下步驟
El.對外服務節點接收索引的檢索請求后將其發送至中心控制節點,中心控制節點解析該檢索請求并判斷其所針對的目標索引,然后根據索引數據存儲節點屬性信息和目標索引的屬性信息,查找該目標索引的所有索引分片,并向存儲每個分片的索引數據存儲節點分派檢索請求;
E2.索引數據存儲節點根據收到的檢索請求,在其存儲的相應索引分片上檢索相關文檔,最后將檢索結果排序后發送至對外服務節點;
E3.對外服務節點將接收到的各個索引數據存儲節點的檢索結果整合、排序后發送至客戶端。進一步的,步驟A所述系統的功能性結構,還包括一備用中心控制節點,所述中心控制節點實時地將其存儲的數據同步備份至備用中心控制節點,當中心控制節點發生故障期時,該備用中心控制節點變更為中心控制節點,當原中心控制節點從故障中恢復,原中心控制節點變更為新的備用中心控制節點。進一步的,所述的索引數據存儲節點和對外服務節點周期性地向所述中心控制節點發送表征其狀態信息的心跳信號,如果中心控制節點在預設的時間內沒有收到心跳信號,則標記該索引數據存儲節點或對外服務節點為死亡,同時,中心控制節點會將標記為死亡的索引數據存儲節點中存儲的所有索引分片,從其他索引數據節點中存儲的這些索引分片的副本中再拷貝一份到其他的未存儲任何該索引分片副本的索引數據節點中,使得索引分片的副本數保持不變,以保證索引分片在任意時刻都是可用的。進一步的,所述的索引數據節點向中心控制節點中發生的心跳信號中,包含該索引數據節點的負載信息,在索引創建的過程中,中心控制節點會將索引分片盡量分配給負載小的索引數據節點存儲,同樣,在索引檢索的過程中,中心控制節點會將檢索請求盡量提交給負載小的索引分片或該分片副本所在的索引數據存儲節點處理。進一步的,所述的索引數據存儲節點屬性信息包括節點的ID、節點的名稱、節點的類型、節點的狀態、節點的負載和節點的位置,所述的索引屬性信息包括索引的名稱、索引中文檔的結構定義、索引的分片數、索引分片的副本數和索引分片及索引分片副本的存儲節點ID。進一步的,步驟B所述系統的數據索引結構中,每一個索引分片還具有復數個索引分片副本,該索引分片副本在步驟C所述的索引創建時創建,在步驟D所述的索引更新時在原索引分片更新后異步更新,其跟原索引分片存儲在不同的索引數據存儲節點上;原索引分片所在的索引數據存儲節點負責處理針對該索引分片的更新請求,當原索引分片更新完畢后,原索引分片所在的索引數據節點負責將更新請求異步地發送給對應的索引分片副本所在的索引數據節點進行索引分片副本的更新;索引分片副本與對應的原索引分片都支持索引檢索,中心控制節點根據原索引分片和索引分片副本所在索引數據存儲節點的負載情況,將索引檢索請求提交給負載小的索引分片或索引分片副本所在索引數據存儲節點處理。更進一步的,中心控制節點定期檢查全部的索引中各個索引的索引分片副本的數目,當索引分片副本的數目低于預設的設定個數時,系統自動復制該索引分片的副本到其他數據節點中;當存儲原索引分片的索引數據存儲節點出現故障時,系統從對應的索引分片副本中選取一個接替原索引分片的索引更新工作,該索引分片副本成為新的原索引分片,然后在其他索引數據節點中在生成一個索引分片副本,保證該索引分片的副本數保持不變;當存儲索引分片副本的索引數據節點出現故障時,系統會在其他索引數據節點中生成一個與原索引分片一樣的副本,保證該索引分片的副本數保持不變。更進一步的,所述同一索引的各個索引分片和索引分片副本創建和存儲在索引數據存儲節點上,是按照如下的策略進行中心控制節點根據索引數據存儲節點的屬性信息中節點的負載信息,將所述索引分片和索引分片副本分配至負載最輕的索引數據存儲節點,當可用的索引數據存儲節點的數目少于索引分片的數目時,中心控制節點分配多個索引分片至同一個索引數據存儲節點,中心控制節點不分配索引分片的索引分片副本;當可用的索引數據存儲節點的數目多于索引分片的數目時,中心控制節點分配部分或全部索引分片的索引分片副本至剩余的索引數據存儲節點。進一步的,步驟D所述索引的更新中,還包括段的合并的步驟在所述更新中的索引的索引分片中段的數目達到閾值或距離上一次索引合并的間隔時間達到閾值,該索引分片所在的索引數據存儲節點讀取較小的幾個段中的文檔并將其存儲于一個新段,然后將這幾個較小的段物理刪除。進一步的,步驟D所述更新文檔在索引分片上的存儲,是通過計算更新文檔的鍵值的哈希值,將該哈希值跟文檔所在索引的索引分片數取模后,最后將文檔分配到跟該取模的數值對應編號的索引分片進行存儲。進一步的,步驟B所述的文檔的不同數據對象類型,包括文本數據對象、圖像數據對象、音頻數據對象、視頻數據對象、可執行程序數據對象,每一種數據對象類型的屬性信息存儲于文檔的域的結構中。本發明通過采用上述技術方案,具有的有益效果是
1.在系統的內存中同時構建更新時索引和合并時索引,索引檢索時通過同時訪問更新時索引和合并時索引,當更新時索引的文檔數量積累到閾值后,更新索引提交到磁盤索引并變更為合并時索引,原有的合并時索引變更為新的更新時索引,保證了正在更新中的數據也能夠被檢索到,提高了搜索引擎可檢索數據的實時性;
2.本系統的中心控制節點、備用中心控制節點、對外服務節點以及索引數據存儲節點是在基于Master/Slave的集群式系統創建,具有高度容錯性,適合部署在廉價機器上,并且能夠提供高吞吐量的數據訪問;
3.通過對存儲于索引數據存儲節點的索引分片創建索引分片副本,增強系統的容錯性。
圖1是本發明一優選實施例的功能性結構示意圖。圖2是本發明數據索引結構的示意圖。
圖3是本發明索引分片和索引分片副本存儲策略的實施例示意圖。
具體實施例方式現結合附圖和具體實施方式
對本發明進一步說明。一種分布式實時搜索引擎,其系統構建和運行是由以下步驟構成
步驟A 設計系統的功能性結構,參閱附圖1所示,該功能性結構是在基于Master/ Slave的集群式系統中創建,包括以下功能節點中心控制節點、索引數據存儲節點和對外服務節點,其中,所述的中心控制節點創建于Master系統中,所述的索引數據存儲節點和對外服務節點創建于Slave系統中,所述的中心控制節點在系統中為主節點,用于數據索引結構中索引的屬性信息的存儲和維護,以及索引數據存儲節點的屬性信息的存儲和維護,所述的索引數據存儲節點在系統中為數據節點,用于數據索引結構中索引分片層的創建、更新和檢索,所述的對外服務節點在系統中為客戶節點,用于接收索引的創建、更新和檢索請求并將該請求轉發至中心控制節點進行處理;
步驟B:設計系統的數據索引結構,參閱附圖2所示,該索引結構從上到下的樹形層次構成是索引、索引分片、段、文檔和域,其中,所述的索引在一個系統中可以有多個,所述的一個索引分片是所述索引被分割后的一個數據塊,其中,屬于同一索引的各個索引分片存儲在索引數據存儲節點上,所述的一個索引分片是由一至多個段構成,所述的一個段是由一至多個文檔構成,一個段中所含的各個文檔可以是不同的數據對象類型,所述的一個文檔在系統全局中具有唯一標識的鍵值,所述的文檔的結構包含用于描述文檔不同屬性的域;其中,所述的索引是提供檢索支持的多種數據對象的集合,所述的索引分片分散存儲在系統的索引數據存儲節點上,這可以提高系統的檢索數據效率; 步驟C:索引的創建,是由以下的步驟構成
Cl.對外服務節點接收到索引創建請求后將該請求轉發至中心控制節點,中心控制節點解析該索引創建請求,從中提取待創建索引的屬性信息,并驗證該屬性信息是否是完備的和有效的,如果該屬性信息完備并且有效,則進行步驟C2的處理,如果該屬性信息不完備或者無效,則發送應答失敗信息至對外服務節點;
C2.中心控制節點根據步驟Cl中生成的待創建索引的屬性信息中的索引分片數將待創建索引分割為若干分片,同時,根據存儲于中心控制節點中的索引數據節點的屬性信息, 來判斷每個索引數據節點的狀態和負載情況,并依此來確定每個索引分片在哪個索引數據節點中存儲和創建,然后將待創建索引的屬性信息發送至各個相對應的索引數據存儲節點;索引數據存儲節點根據收到的待創建索引的屬性信息,在該索引數據存儲節點上構建中心控制節點分派的所述待創建索引的索引分片,如果該索引數據存儲節點創建該索引分片失敗,則中心控制節點將該索引分片分派給其他的狀態良好、負載相對比較小的索引數據節點來創建,直至該待創建索引的全部索引分片在索引數據存儲節點中創建完成或者創建創建失敗,進行步驟C3的處理;
C3.如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建完成,中心控制節點更新存儲于其中的索引數據存儲節點屬性信息,并發送索引分片創建成功的應答信息至對外服務節點;如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建失敗,則向對外服務節點發送創建索引失敗的應答;步驟D 索引的更新,是由以下步驟構成
Dl.對外服務節點接收到索引更新請求后將該請求轉發至中心控制節點,中心控制節點根據存儲于其中的索引屬性信息和索引數據存儲節點屬性信息,將該索引更新請求發送至該索引的索引分片所在的索引數據存儲節點;
D2.索引數據存儲節點根據收到的索引更新請求,在待更新索引所在索引數據存儲節點的索引分片上,將更新文檔存儲于新的段中,如果更新文檔存儲成功,則將該更新文檔相對應的舊文檔在新的段中標記為刪除狀態,并返回索引更新成功信息至中心控制節點,如果更新文檔存儲失敗,則返回索引更新失敗信息至中心控制節點,中心控制節點最后將索引更新成功或失敗的信息發送至對外服務節點;
該步驟D的索引更新,還包括文檔的刪除步驟當索引更新請求僅為刪除文檔命令時, 在待刪除文檔所在的索引數據存儲節點的存儲分片上,在新的段中將該文檔標記為刪除;
該步驟D的索引更新,還包括構建實時索引的步驟在系統的內存中同時構建更新時索引和合并時索引,索引的檢索是通過訪問該更新時索引和合并時索引進行,在進行索引更新時,更新中的索引為所述的更新時索引,當該更新時索引的文檔數量達到閾值或者該更新時索引的更新時間達到閾值時,系統提交該更新時索引到磁盤索引中,之后變更該更新時索引為合并時索引并同時變更之前的合并時索引為更新時索引; 步驟E 索引的檢索,是由以下步驟構成
El.對外服務節點接收索引的檢索請求后將其發送至中心控制節點,中心控制節點解析該檢索請求并判斷其所針對的目標索引,然后根據索引數據存儲節點屬性信息和目標索引的屬性信息,查找該目標索引的所有索引分片,并向存儲每個分片的索引數據存儲節點分派檢索請求;
E2.索引數據存儲節點根據收到的檢索請求,在其存儲的相應索引分片上檢索相關文檔,最后將檢索結果排序后發送至對外服務節點;
E3.對外服務節點將接收到的各個索引數據存儲節點的檢索結果整合、排序后發送至客戶端。作為一優選的實施方式,步驟A所述系統的功能性結構,還包括一備用中心控制節點,所述中心控制節點實時地將其存儲的數據同步備份至備用中心控制節點,當中心控制節點發生故障期時,該備用中心控制節點變更為中心控制節點,當原中心控制節點從故障中恢復,原中心控制節點變更為新的備用中心控制節點;由于中心控制節點在系統中為主節點,其一旦出現故障,就會導致整個系統癱瘓,因此,通過增加備用中心控制節點,可以實現對中心控制節點的故障轉移,提高系統的容錯性。作為一優選的實施方式,所述的索引數據存儲節點和對外服務節點周期性地向所述中心控制節點發送表征其狀態信息的心跳信號,如果中心控制節點在預設的時間內沒有收到心跳信號,則標記該索引數據存儲節點或對外服務節點為死亡,同時,中心控制節點會將標記為死亡的索引數據存儲節點中存儲的所有索引分片,從其他索引數據節點中存儲的這些索引分片的副本中再拷貝一份到其他的未存儲任何該索引分片副本的索引數據節點中,使得索引分片的副本數保持不變,以保證索引分片在任意時刻都是可用的。作為一優選的實施方式,所述的索引數據節點向中心控制節點中發生的心跳信號中,包含該索引數據節點的負載信息,在索引創建的過程中,中心控制節點會將索引分片盡量分配給負載小的索引數據節點存儲,同樣,在索引檢索的過程中,中心控制節點會將檢索請求盡量提交給負載小的索引分片或該分片副本所在的索引數據存儲節點處理。作為一優選的實施方式,所述的索引數據存儲節點屬性信息包括節點的ID、節點的名稱、節點的類型、節點的狀態、節點的負載和節點的位置,所述的索引屬性信息包括 索引的名稱、索引中文檔的結構定義、索引的分片數、索引分片的副本數和索引分片及索引分片副本的存儲節點ID ;該索引數據存儲節點屬性信息和索引屬性信息在系統中為元數據,該元數據存儲于中心控制節點上,系統的中心控制節點、索引數據存儲節點和對外服務節點可以跟據這些元數據推演每一個索引分片在集群中的位置。作為一優選的實施方式,步驟B所述系統的數據索引結構中,每一個索引分片還具有復數個索引分片副本,該索引分片副本在步驟C所述的索引創建時創建,在步驟D所述的索引更新時在原索引分片更新后異步更新,其跟原索引分片存儲在不同的索引數據存儲節點上。原索引分片所在的索引數據存儲節點負責處理針對該索引分片的更新請求,當原索引分片更新完畢后,原索引分片所在的索引數據節點負責將更新請求異步地發送給對應的索引分片副本所在的索引數據節點進行索引分片副本的更新。索引分片副本與對應的原索引分片都支持索引檢索,中心控制節點根據原索引分片和索引分片副本所在索引數據存儲節點的負載情況,將索引檢索請求提交給負載小的索引分片或索引分片副本所在索引數據存儲節點處理。。進一步的,中心控制節點定期檢查全部的索引中各個索引的索引分片副本的數目,當索引分片副本的數目低于預設的設定個數時,系統自動復制該索引分片的副本到其他數據節點中。當存儲原索引分片的索引數據存儲節點出現故障時,系統從對應的索引分片副本中選取一個接替原索引分片的索引更新工作,該索引分片副本成為新的原索引分片,然后在其他索引數據節點中在生成一個索引分片副本,保證該索引分片的副本數保持不變。當存儲索引分片副本的索引數據節點出現故障時,系統會在其他索引數據節點中生成一個與原索引分片一樣的副本,保證該索引分片的副本數保持不變。進一步的,所述同一索引的各個索引分片和索引分片副本創建和存儲在索引數據存儲節點上,是按照如下的策略進行中心控制節點根據索引數據存儲節點的屬性信息中節點的負載信息,將所述索引分片和索引分片副本分配至負載最輕的索引數據存儲節點, 當可用的索引數據存儲節點的數目少于索引分片的數目時,中心控制節點分配多個索引分片至同一個索引數據存儲節點,中心控制節點不分配索引分片的索引分片副本;當可用的索引數據存儲節點的數目多于索引分片的數目時,中心控制節點分配部分或全部索引分片的索引分片副本至剩余的索引數據存儲節點;參閱附圖3所示的該策略的一個舉例說明, 其為一個索引分片數為2、每個索引分片的索引分片副本數為1的索引在索引數據存儲節點的存儲的情況當系統的索引數據存儲節點數為1時,該索引的索引分片1和索引分片 2都存儲在索引數據存儲節點1中,而且每個分片沒有索引分片副本,因為副本和原分片只有存儲在不同的節點中才能對系統的可用性和可靠性起作用,當系統中的索引數據存儲節點數為2個時,存儲在索引數據存儲節點1中的索引分片1和索引分片2都具有存儲在索引數據存儲節點2上的索引分片副本1’和索引分片副本2’,索引數據存儲節點2可以提供跟索引數據存儲節點1所一樣的服務,因此增加索引數據存儲節點可以擴展系統的服務性能;當系統的索引數據存儲節點數為4個時,索引分片1、索引分片2、索引分片副本1’和索引分片副本2’是分開存儲在這4個索引數據存儲節點上。作為一優選的實施方式,步驟D所述索引的更新中,還包括段的合并的步驟在所述更新中的索引的索引分片中段的數目達到閾值或距離上一次索引合并的間隔時間達到閾值,該索引分片所在的索引數據存儲節點讀取較小的幾個段中的文檔并將其存儲于一個新段,然后將這幾個較小的段物理刪除;在索引的構建過程中會不斷產生新的段,當索引分片中段的數目太多時,會影響索引檢索邏輯的檢索效率,因此,該步驟將多個小的段合并成一個大的段,并剔除標記刪除的數據,優化了索引的存儲空間,減少索引檢索邏輯同時操作的索引段的數目,從而提高了索引檢索邏輯的檢索效率。作為一優選的實施方式,步驟D所述更新文檔在索引分片上的存儲,是通過計算更新文檔的鍵值的哈希值,將該哈希值跟文檔所在索引的索引分片數取模后,最后將文檔分配到跟該取模的數值對應編號的索引分片進行存儲。作為一優選的實施方式,步驟B所述的文檔的不同數據對象類型是文本數據對象、圖像數據對象、音頻數據對象、視頻數據對象、可執行程序數據對象,每一種數據對象類型的屬性信息存儲于文檔的域的結構中,文檔的域的結構用于存儲文檔的屬性信息,例如, 對于文本類型的文檔,可以包含如下信息文件名稱、關鍵詞、作者、文件大小、類別、文件描述等;而對于音頻類型的文檔,可以包含如下信息文件名稱、比特率(bps)、文件大小、持續時間、作者或藝術家姓名、歌曲名稱、流派、專輯名稱等。盡管結合優選實施方案具體展示和介紹了本發明,但所屬領域的技術人員應該明白,在不脫離所附權利要求書所限定的本發明的精神和范圍內,在形式上和細節上可以對本發明做出各種變化,均為本發明的保護范圍。
權利要求
1. 一種分布式實時搜索引擎,其系統構建和運行至少包括以下步驟A.設計系統的功能性結構,該功能性結構是在基于Master/Slave的集群式系統中創建,包括以下功能節點中心控制節點、索引數據存儲節點和對外服務節點,其中,所述的中心控制節點創建于Master系統中,所述的索引數據存儲節點和對外服務節點創建于Slave 系統中,所述的中心控制節點,用于數據索引結構中索引的屬性信息的存儲和維護,以及索引數據存儲節點的屬性信息的存儲和維護,所述的索引數據存儲節點用于數據索引結構中索引分片的創建、更新和檢索,所述的客戶節點用于接收索引的創建、更新和檢索請求并將該請求轉發至中心控制節點進行處理;B.設計系統的數據索引結構,該索引結構從上到下的樹形層次構成是索引、索引分片、段、文檔和域,其中,所述的索引在一個系統中可以有多個,所述的一個索引分片是所述索引被分割后的一個數據塊,其中,屬于同一索引的各個索引分片存儲在索引數據存儲節點上,所述的一個索引分片是由一至多個段構成,所述的一個段是由一至多個文檔構成,一個段中所含的各個文檔可以是不同的數據對象類型,所述的一個文檔在系統全局中具有唯一標識的鍵值,所述的文檔的結構包含用于描述文檔類型的域;C.索引的創建,包括以下步驟Cl.對外服務節點接收到索引創建請求后將該請求轉發至中心控制節點,中心控制節點解析該索引創建請求,從中提取待創建索引的屬性信息,并驗證該屬性信息是否是完備的和有效的,如果該屬性信息完備并且有效,則進行步驟C2的處理,如果該屬性信息不完備或者無效,則發送應答失敗信息至對外服務節點;C2.中心控制節點根據步驟Cl中生成的待創建索引的屬性信息中的索引分片數將待創建索引分割為若干分片,同時,根據存儲于中心控制節點中的索引數據節點的屬性信息, 來判斷每個索引數據節點的狀態和負載情況,并依此來確定每個索引分片在哪個索引數據節點中存儲和創建,然后將待創建索引的屬性信息發送至各個相對應的索引數據存儲節 點;索引數據存儲節點根據收到的待創建索引的屬性信息,在該索引數據存儲節點上構建中心控制節點分派的所述待創建索引的一個索引分片,如果該索引數據存儲節點創建該索引分片失敗,則中心控制節點將該索引分片分派給其他的狀態良好、負載相對比較小的索引數據節點來創建,直至該待創建索引的全部索引分片在索引數據存儲節點中創建完成或者創建失敗,進行步驟C3的處理;C3.如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建完成,中心控制節點更新存儲于其中的索引數據存儲節點屬性信息,并發送索引分片創建成功的應答信息至對外服務節點;如果步驟C2中待創建索引的全部索引分片在索引數據存儲節點中創建失敗,則向對外服務節點發送創建索引失敗的應答;D.索引的更新,包括以下步驟Dl.對外服務節點接收到索引更新請求后將該請求轉發至中心控制節點,中心控制節點根據存儲于其中的索引屬性信息和索引數據存儲節點屬性信息,將該索引更新請求發送至該索引的索引分片所在的索引數據存儲節點;D2.索引數據存儲節點根據收到的索引更新請求,在待更新索引所在索引數據存儲節點的索引分片上,將更新文檔存儲于新的段中,如果更新文檔存儲成功,則將該更新文檔相對應的舊文檔在新的段中標記為刪除狀態,并返回索引更新成功信息至中心控制節點,如果更新文檔存儲失敗,則返回索引更新失敗信息至中心控制節點,中心控制節點最后將索引更新成功或失敗的信息發送至對外服務節點;該步驟D的索引更新,還包括文檔的刪除步驟當索引更新請求僅為刪除文檔命令時, 在待刪除文檔所在的索引數據存儲節點的存儲分片上,在新的段中將該文檔標記為刪除;該步驟D的索引更新,還包括構建實時索引的步驟在系統的內存中同時構建更新時索引和合并時索引,索引的檢索是通過訪問該更新時索引和合并時索引進行,在進行索引更新時,更新中的索引為所述的更新時索引,當該更新時索引的文檔數量達到閾值或者該更新時索引的更新時間達到閾值時,系統提交該更新時索引到磁盤索引中,之后變更該更新時索引為合并時索引并同時變更之前的合并時索引為更新時索引;E.索引的檢索,包括以下步驟El.對外服務節點接收索引的檢索請求后將其發送至中心控制節點,中心控制節點解析該檢索請求并判斷其所針對的目標索引,然后根據索引數據存儲節點屬性信息和目標索引的屬性信息,查找該目標索引的所有索引分片,并向存儲每個分片的索引數據存儲節點分派檢索請求;E2.索引數據存儲節點根據收到的檢索請求,在其存儲的相應索引分片上檢索相關文檔,最后將檢索結果排序后發送至對外服務節點;E3.對外服務節點將接收到的各個索引數據存儲節點的檢索結果整合、排序后發送至客戶端。
2.如權利要求1所述的分布式實時搜索引擎,其特征在于步驟A所述系統的功能性結構,還包括一備用中心控制節點,所述中心控制節點實時地將其存儲的數據同步備份至備用中心控制節點,當中心控制節點發生故障期時,該備用中心控制節點變更為中心控制節點,當原中心控制節點從故障中恢復,原中心控制節點變更為新的備用中心控制節點。
3.如權利要求1所述的分布式實時搜索引擎,其特征在于所述的索引數據存儲節點和對外服務節點周期性地向所述中心控制節點發送表征其狀態信息的心跳信號,如果中心控制節點在預設的時間內沒有收到心跳信號,則標記該索引數據存儲節點或對外服務節點為死亡,同時,中心控制節點會將標記為死亡的索引數據存儲節點中存儲的所有索引分片, 從其他索引數據節點中存儲的這些索引分片的副本中再拷貝一份到其他的未存儲任何該索引分片副本的索引數據節點中,使得索引分片的副本數保持不變,以保證索引分片在任意時刻都是可用的;所述的索引數據節點向中心控制節點中發生的心跳信號中,包含該索引數據節點的負載信息,在索引創建的過程中,中心控制節點會將索引分片盡量分配給負載小的索引數據節點存儲,同樣,在索引檢索的過程中,中心控制節點會將檢索請求盡量提交給負載小的索引分片或該分片副本所在的索引數據存儲節點處理。
4.如權利要求1所述的分布式實時搜索引擎,其特征在于所述的索引數據存儲節點屬性信息包括節點的ID、節點的名稱、節點的類型、節點的狀態、節點的負載和節點的位置,所述的索引屬性信息包括索引的名稱、索引中文檔的結構定義、索引的分片數、索引分片的副本數和索引分片及索引分片副本的存儲節點ID。
5.如權利要求1所述的分布式實時搜索引擎,其特征在于步驟B所述系統的數據索引結構中,每一個索引分片還具有復數個索引分片副本,該索引分片副本在步驟C所述的索引創建時創建,在步驟D所述的索引更新時在原索引分片更新后異步更新,其跟原索引分片存儲在不同的索引數據存儲節點上;原索引分片所在的索引數據存儲節點負責處理針對該索引分片的更新請求,當原索引分片更新完畢后,原索引分片所在的索引數據節點負責將更新請求異步地發送給對應的索引分片副本所在的索引數據節點進行索引分片副本的更新;索引分片副本與對應的原索引分片都支持索引檢索,中心控制節點根據原索引分片和索引分片副本所在索引數據存儲節點的負載情況,將索引檢索請求提交給負載小的索引分片或索引分片副本所在索引數據存儲節點處理。
6.如權利要求5所述的分布式實時搜索引擎,其特征在于中心控制節點定期檢查全部的索引中各個索引的索引分片副本的數目,當索引分片副本的數目低于預設的設定個數時,系統自動復制該索引分片的副本到其他數據節點中;當存儲原索引分片的索引數據存儲節點出現故障時,系統從對應的索引分片副本中選取一個接替原索引分片的索引更新工作,該索引分片副本成為新的原索引分片,然后在其他索引數據節點中在生成一個索引分片副本,保證該索引分片的副本數保持不變;當存儲索引分片副本的索引數據節點出現故障時,系統會在其他索引數據節點中生成一個與原索引分片一樣的副本,保證該索引分片的副本數保持不變。
7.如權利要求5所述的分布式實時搜索引擎,其特征在于所述同一索引的各個索引分片和索引分片副本創建和存儲在索引數據存儲節點上,是按照如下的策略進行中心控制節點根據索引數據存儲節點的屬性信息中節點的負載信息,將所述索引分片和索引分片副本分配至負載最輕的索引數據存儲節點,當可用的索引數據存儲節點的數目少于索引分片的數目時,中心控制節點分配多個索引分片至同一個索引數據存儲節點,中心控制節點不分配索引分片的索引分片副本;當可用的索引數據存儲節點的數目多于索引分片的數目時,中心控制節點分配部分或全部索引分片的索引分片副本至剩余的索引數據存儲節點。
8.如權利要求1所述的分布式搜索引擎,其特征在于步驟D所述索引的更新中,還包括段的合并的步驟在所述更新中的索引的索引分片中段的數目達到閾值或距離上一次索引合并的間隔時間達到閾值,該索引分片所在的索引數據存儲節點讀取較小的幾個段中的文檔并將其存儲于一個新段,然后將這幾個較小的段物理刪除。
9.如權利要求1所述的分布式實時搜索引擎,其特征在于步驟D所述更新文檔在索引分片上的存儲,是通過計算更新文檔的鍵值的哈希值,將該哈希值跟文檔所在索引的索引分片數取模后,最后將文檔分配到跟該取模的數值對應編號的索引分片進行存儲。
10.如權利要求1所述的分布式實時搜索引擎,其特征在于步驟B所述的文檔的不同數據對象類型,包括文本數據對象、圖像數據對象、音頻數據對象、視頻數據對象、可執行程序數據對象,每一種數據對象類型的屬性信息存儲于文檔的域的結構中。
全文摘要
本發明涉及搜索引擎技術領域,尤其涉及一種分布式實時搜索引擎。本發明的分布式實時搜索引擎,其系統構建和運行至少包括以下步驟A.設計系統的功能性結構,B.設計系統的數據索引結構,C.索引的創建,D.索引的更新,E.索引的檢索。本發明的分布式實時搜索引擎能夠在系統的內存中同時構建更新時索引和合并時索引,索引檢索時通過同時訪問更新時索引和合并時索引,當更新時索引的文檔數量積累到閾值后,更新索引提交到磁盤索引并變更為合并時索引,原有的合并時索引變更為新的更新時索引,保證了正在更新中的數據也能夠被檢索到,提高了搜索引擎可檢索數據的實時性。
文檔編號G06F17/30GK102169507SQ20111013778
公開日2011年8月31日 申請日期2011年5月26日 優先權日2011年5月26日
發明者季剛, 時宜, 程行榮, 陳青溪 申請人:廈門雅迅網絡股份有限公司