雲HBase釋出了“全文索引服務”功能,自2019年01月25日後建立的雲HBase執行個體,可以在控制台免費開啟此“全文索引服務”功能。使用此功能可以讓使用者在HBase之上建構功能更豐富的搜尋業務,不再局限于KV簡單查詢,不再苦惱于設計各種rowkey,不再後怕日益變化的HBase複雜查詢業務。“全文索引服務”為雲HBase增強查詢能力而設計,自動同步資料,使用者隻需重點關注如何使用強大的檢索功能來豐富自己的業務架構。
為什麼要增強HBase的檢索能力
我們在使用HBase的時候都會面臨一個問題,就是設計HBase的rowkey。可盡管我們工程師是多麼的優秀,整理羅列了所有業務檢索需求,并裁剪折中了這樣那樣的業務,缺依然不能設計一個全能的rowkey來滿足各種業務查詢需求。
例如在某物流管理系統中,我們需要對收件人姓名/手機/位址、寄件人姓名/手機/位址、運單編号/開始時間/結束時間、郵差姓名/手機等條件,進行任意組合查詢。這種複雜查詢情況下,HBase原先的KV查詢無法滿足,盡管我們如何設計rowkey,都不能滿足查詢條件的任意性。另外,在這些查詢中,可能會涉及到姓名/位址/手機号等條件的模糊查詢,這也是HBase rowkey不能很好滿足的。
又例如在某新零售業務中,需要對商品标題或者描述内容進行關鍵字查詢,在HBase中我們隻能使用模糊查詢來實作,但模糊查詢在HBase中是比較低效的。類似這種标題/描述内容中進行關鍵字查詢業務,比較合适使用分詞查詢,這個功能HBase都無法提供滿足。另外,在新零售查詢業務中,為了提高使用者體驗,經常會提高搜尋結果進行分類統計的需求,例如我們在電商網站中,搜尋關鍵字“時尚”,在顯示比對此關鍵字結果的商品中,按照 衣服、電子、日用等類型進行了分類統計比對結果,這樣使用者就可以選擇對應的大類進行二次查詢,快速查詢到使用者想要的商品,進而提高了使用者體驗。像這個功能,HBase也無法滿足。
最終為了适應HBase系統的查詢特點,對業務做了折中,隻保留部分KV查詢的業務,其他可以提高使用者體驗的各種查詢業務被全部砍掉了。
總結下來,我們列出來了幾個使用HBase進行查詢業務設計時碰到的痛點:
- 無法滿足任意條件組合查詢
- 不能高效支援模糊查詢
- 不支援關鍵字分詞查詢
- 不能高效支援多元度的排序/分頁
- 不能對查詢的結果集進行分類統計
雲HBase全文索引服務,增強HBase檢索能力
全文索引服務是為了增強HBase查詢能力而設計,使得HBase除了強大的KV能力外,更加豐富了它的在複雜條件查詢下的能力,具體抽象出來以下幾個場景:
- 複雜條件任意查詢
- 多元度排序
- 複雜條件分頁
- 分詞關鍵字查詢
- 比對結果集分類統計
- 常用min/max/avg/sum等stats統計
雲HBase全文索引服務使用簡單,隻需要DDL階段建立索引,後續自動進行資料索引同步,架構如下:
和自建的差別
功能 | 雲HBase啟用全文索引 | 自建HBase+indexer+solr | HBase |
---|---|---|---|
簡單rowkey查詢 | 支援 | ||
複雜查詢 | 不支援 | ||
索引同步 | |||
亂序同步 | ——— | ||
強一緻 | |||
xml動态列 |
另外,自建hbase+indexer+solr存在幾個bug,導緻很多使用者回報的自建這種架構丢資料現象;雲HBase對此進行了許多bugfix和改進。
如何使用雲HBase全文索引服務
雲HBase全文索引服務的使用,啟用此服務後,隻需要簡單DDL建立索引即可,插入同步無限管理,使用者隻需關注後續查詢要使用HBase api/Solr api進行建構豐富的業務查詢即可。下面我們來簡單體驗下整個流程。
開啟服務
“全文索引服務”屬于雲HBase的免費擴充服務,自2019年1月25日後建立的雲HBase執行個體控制台,執行個體左側點選“全文索引服務”詳情頁進行服務開啟即可,如下:
申請後的如下Solr通路位址以及WebUI連接配接,如圖:
其中solr zk位址即可構造cloud solr client進行通路,此通路用戶端自帶負載均衡功能。Solr WebUI通路方式與雲HBase WebUI通路一緻,第一次通路是設定好使用者密碼與白名單,然後直接點上面的連結即可跳轉到Solr的WebUI。
建立索引
- 下載下傳索引管理用戶端工具
wget http://public-hbase.oss-cn-hangzhou.aliyuncs.com/installpackage/solr-7.3.1-ali-1.0.tgz
tar zxvf solr-7.3.1-ali-1.0.tgz
- 修改solr-7.3.1-ali-1.0/bin/solr.in.sh檔案的ZK_HOST如下:
ZK_HOST=zk1:2181,zk2:2181,zk3:2181/solr
zk位址即為上圖控制台開通全文索引服務後的solr zk通路位址。
- 建立HBase表,開啟replication同步機制
create 'solrdemo',{NAME=>'info', REPLICATION_SCOPE=> '1'}
-
建立Solr表democollection
第一步,修改并上傳solrconfig.xml/schema,如果不需要修改,可使用demo預設config進行上傳,如下:
solr-7.3.1-ali-1.0/bin/solr zk upconfig -d _democonfig -n democollection_config -z zk1:2181/solr
第二步,使用剛上傳的配置建立democollection,如下:
curl "http://hostname:8983/solr/admin/collections?action=CREATE&name=democollection&numShards=1&replicationFactor=1&collection.configName=democollection_config"
其中hostname可以使用master3-1中綴的zk hostname進行替換。
-
配置HBase solrdemo表到Solr democollection表的字段映射索引關系
第一步,編輯index_conf.xml配置映射關系,例如:
<?xml version="1.0"?>
<indexer table="solrdemo">
<field name="name_s" value="info:q2" type="string"/>
<field name="age_i" value="info:q3" type="int"/>
<param name="update_version_l" value="true"/>
</indexer>
配置描述了hbase表solrdemo的 info:q2 info:3 分别映射成solr democollection裡面的name_s和age_i 字段。并指定以string解析info:q2 列儲存到name_s字段中,以int解析info:q3 儲存到age_i中。其中solr collection的name_s、age_i是何種類型,是根據solr collection的配置覺得,預設采用動态類型推斷,即根據collection字段的名字字尾判斷類型進行存儲。常見類型_i、_s、_l、_b、_f、_d分别對應int/string/long/boolean/float/double。當然,使用者也可以直接指定字段類型。最後一個update_version_l為固定寫法,儲存document級别的最新更新時間。
第二步,使用工具将 index_conf.xml 設定關聯hbase表solrdemo和solr表democollection的索引映射關系,指令如下:
solr-7.3.1-ali-1.0/bin/solr-indexer add \
-n demoindex \
-f indexer_conf.xml \
-c democollection
到此,我們就完成了索引的關系映射,随後正常插入hbase即可,就不需要關心索引同步,它會自動同步hbase solrdemo表的對應字段到solr democollection表的對應字段中。如上例映射如下:
其中,HBase表的rowkey映射到Solr表裡面的id字段。
查詢檢索
查詢較為簡單,依然完全相容開源HBase API和Solr API的操作,根據業務使用solr進行條件查詢,結果集中,id字段就是所有符合條件的hbase rowkey,我們隻有這個id轉換為rowkey,并使用HBase API讀取屬于這個行的原資料即可。流程圖大緻如下:
展望
- 索引管理更簡單易用
- SQL入口接入全文索引服務
- 全文引擎新一代更高效副本機制
- 除了異步索引,同步索引也會後續支援
産品入口:
https://cn.aliyun.com/product/hbase
使用全文索引服務幫助文檔:
https://help.aliyun.com/document_detail/88404.html