索引是加速資料庫查詢的重要方法。Lindorm寬表引擎除了支援高效能原生二級索引,也支援一種新的索引類型,稱為搜尋索引(SearchIndex),搜尋索引主要面向複雜的多維查詢情境,能夠覆蓋分詞、模糊查詢、彙總分析、排序翻頁等情境。本文介紹搜尋索引的功能和應用情境。
功能介紹
搜尋索引是寬表的一個特性,在開發使用體驗上與高效能原生二級索引保持一致,您可以使用SQL為寬表建立搜尋索引。樣本如下,為dt表的c1、c2、c3、c4列建立搜尋索引idx,c1、c2、c3、c4列沒有順序要求,c3指定按照IK分詞器進行分詞。
CREATE INDEX idx USING SEARCH ON dt(c1, c2, c3(type=text, analyzer=ik),c4);搜尋索引可以滿足以下業務需求:
多維組合查詢。任意索引列的隨機組合,快速返回查詢資料。
SELECT * FROM dt WHERE c1=?; SELECT * FROM dt WHERE c2=? AND c4=?;分詞查詢。c3列為分詞欄位,可以通過等值查詢相關性高的結果集。例如查詢c3列中包含功能介紹、功能或者介紹的資料。
SELECT * FROM dt WHERE MATCH (c3) AGAINST ('功能介紹');彙總分析。支援COUNT、SUM、MIN、MAX、AVG等彙總函式。
排序分頁。支援任意索引列的排序(ORDER BY語句)。
架構介紹
SearchIndex是寬表引擎和搜尋引擎深度融合後提供的新型索引。整體資料流如下圖。在此架構下,寬表引擎、LTS和搜尋引擎都是以獨立服務的方式存在,您可以分別對各個引擎進行管理。如果搜尋引擎處理能力不足,只需要擴容搜尋引擎。如果LTS同步能力不足,可以單獨擴容LTS。寬表引擎、LTS和搜尋引擎可以針對不同的使用情境選擇不同的機型,獨立的部署形態大幅提升了系統的穩定性。
資料寫入的流程如下:
資料寫入至Lindorm寬表引擎,未經處理資料記錄在寬表WAL中,寫入結果返回用戶端。
資料同步服務LTS即時監聽寬表WAL,篩選出寬表WAL中帶有SearchIndex的表,並將篩選的資料寫入至搜尋引擎。
搜尋引擎收到資料後即時構建倒排索引。
資料查詢的流程如下:
查詢操作發送至Lindorm寬表引擎,計算層自動進行查詢編譯,基於最佳化器選擇合適的SearchIndex。
查詢重新導向至搜尋引擎,查詢滿足條件的資料。
匯總搜尋引擎的資料,如果需要會自動回查寬表中的資料進行補齊,最後查詢結果返回用戶端。
應用情境
在寬表引擎和搜尋索引配合下,不但可以提供高並發低延遲的KV查詢,而且能夠提供豐富的多維查詢、分詞查詢、彙總分析等。如果您的業務有以下兩個情境的需求,建議使用搜尋索引。
架構改造
如果您在當前的業務架構中使用了HBase、MySQL或者MongoDB,同時也在使用搜尋引擎Elasticsearch或者Solr。那麼可以通過SearchIndex的一體化解決方案替換多個系統組合的架構。
業務選型
金融行業,賬單情境,詳情請參見收錢吧訂單查詢&搜尋。
物流行業,訂單情境,詳情請參見申通快遞遷移Oracle到Lindorm。