索引是加速資料庫查詢的重要方法。Lindorm寬表引擎除了支援高效能原生二級索引,也支援一種新的索引類型,稱為搜尋索引(SearchIndex),搜尋索引主要面向複雜的多維查詢情境,能夠覆蓋分詞、模糊查詢、彙總分析、排序翻頁等情境。本文介紹搜尋索引的功能和應用情境。
功能介紹
搜尋索引是寬表的一個特性,在開發使用體驗上與高效能原生二級索引保持一致,您可以使用SQL為寬表建立搜尋索引。樣本如下,為dt表的c1, c2, c3列建立搜尋索引idx
,c1, c2, c3列沒有順序要求,c3指定按照IK分詞器進行分詞。
CREATE INDEX idx USING SEARCH ON dt(c1, c2, c3(type=text, analyzer=ik));
搜尋索引可以滿足以下業務需求:
多維組合查詢。c1, c2, c3列的隨機組合,快速返回查詢資料。
SELECT * FROM dt WHERE c1=?; SELECT * FROM dt WHERE c2=? AND c3=?;
分詞查詢。c3列為分詞欄位,可以通過等值查詢相關性高的結果集。例如查詢c3列中包含功能介紹、功能或者介紹的資料。
SELECT * FROM dt WHERE c3='功能介紹';
彙總分析。支援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。
常見問題
Q:搜尋索引與二級索引有什麼區別?
A:二級索引是Lindorm寬表內建的特性,不需要開通即可使用,查詢情境適合較為固定的業務需求,預設二級索引個數最多5個。搜尋索引是寬表引擎與搜尋引擎深度融合的特性,需要單獨開通購買,核心功能為倒排索引和列存,適合較為複雜的多維查詢,索引列個數最多1000個。
Q:資料寫入後大概多久可以通過搜尋索引查詢?
A:搜尋索引的資料一致性預設為最終一致,成功寫入至寬表的資料,索引資料可以在1~15秒內可見。