雲HBase發佈全文索引服務,輕鬆應對複雜查詢

雲HBase發佈了「全文索引服務」功能,自2019年01月25往後建立的雲HBase實例,能夠在控制檯免費開啓此「全文索引服務」功能。使用此功能可讓用戶在HBase之上構建功能更豐富的搜索業務,再也不侷限於KV簡單查詢,再也不苦惱於設計各類rowkey,再也不後怕日益變化的HBase複雜查詢業務。「全文索引服務」爲雲HBase加強查詢能力而設計,自動同步數據,用戶只需重點關注如何使用強大的檢索功能來豐富本身的業務架構。html

爲何要加強HBase的檢索能力

咱們在使用HBase的時候都會面臨一個問題,就是設計HBase的rowkey。可儘管咱們工程師是多麼的優秀,整理羅列了全部業務檢索需求,並裁剪折中了這樣那樣的業務,缺依然不能設計一個全能的rowkey來知足各類業務查詢需求。
例如在某物流管理系統中,咱們須要對收件人姓名/手機/地址、寄件人姓名/手機/地址、運單編號/開始時間/結束時間、郵遞員姓名/手機等條件,進行任意組合查詢。這種複雜查詢狀況下,HBase原先的KV查詢沒法知足,儘管咱們如何設計rowkey,都不能知足查詢條件的任意性。另外,在這些查詢中,可能會涉及到姓名/地址/手機號等條件的模糊查詢,這也是HBase rowkey不能很好知足的。
又例如在某新零售業務中,須要對商品標題或者描述內容進行關鍵字查詢,在HBase中咱們只能使用模糊查詢來實現,但模糊查詢在HBase中是比較低效的。相似這種標題/描述內容中進行關鍵字查詢業務,比較合適使用分詞查詢,這個功能HBase都沒法提供知足。另外,在新零售查詢業務中,爲了提升用戶體驗,常常會提升搜索結果進行分類統計的需求,例如咱們在電商網站中,搜索關鍵字「時尚」,在顯示匹配此關鍵字結果的商品中,按照 衣服、電子、日用等類型進行了分類統計匹配結果,這樣用戶就能夠選擇對應的大類進行二次查詢,快速查詢到用戶想要的商品,從而提升了用戶體驗。像這個功能,HBase也沒法知足。
最終爲了適應HBase系統的查詢特色,對業務作了折中,只保留部分KV查詢的業務,其餘能夠提升用戶體驗的各類查詢業務被所有砍掉了。api

總結下來,咱們列出來了幾個使用HBase進行查詢業務設計時碰到的痛點:微信

  1. 沒法知足任意條件組合查詢
  2. 不能高效支持模糊查詢
  3. 不支持關鍵字分詞查詢
  4. 不能高效支持多維度的排序/分頁
  5. 不能對查詢的結果集進行分類統計

雲HBase全文索引服務,加強HBase檢索能力

全文索引服務是爲了加強HBase查詢能力而設計,使得HBase除了強大的KV能力外,更加豐富了它的在複雜條件查詢下的能力,具體抽象出來如下幾個場景:架構

  1. 複雜條件任意查詢
  2. 多維度排序
  3. 複雜條件分頁
  4. 分詞關鍵字查詢
  5. 匹配結果集分類統計
  6. 經常使用min/max/avg/sum等stats統計

雲HBase全文索引服務使用簡單,只須要DDL階段創建索引,後續自動進行數據索引同步,架構以下:
_負載均衡

和自建的區別curl

功能 雲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。阿里雲

創建索引

  1. 下載索引管理客戶端工具
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
  1. 修改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訪問地址。

  1. 建立HBase表,開啓replication同步機制
create  'solrdemo',{NAME=>'info',  REPLICATION_SCOPE=> '1'}
  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進行替換。

  1. 配置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表的對應字段中。如上例映射以下:
77

其中,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

 

原文連接 更多技術乾貨 請關注阿里云云棲社區微信號 :yunqiinsight

相關文章
相關標籤/搜索