黃煒耀
摘 要:本文主要對如何基于HBase構建二級索引查詢引擎進行研究探討。首先分析說明了HBase查詢靈活性上存在的問題,接著簡單介紹二級索引的含義,從而引入本文討論的主題,最后給出較詳細的查詢引擎總體架構圖及各核心功能模塊的實現方案。
關鍵詞:二級索引;查詢引擎;HBase
HBase是一個分布式、列式數據庫,因其具有高擴展性、高并發性、穩定性以及數據高安全性等優點,而被大多數分布式系統所使用。但其數據查詢支持上較關系型數據庫就要弱很多,只能通過完整的Rowkey進行get或按前綴模糊scan的方式進行,必要時再輔助以SingleColumnValueFilter、RowFilter、ValueFilter方式進一步對數據進行過濾。為了保證數據查詢的效率,表設計時必須慎重考慮Rowkey的設計,但隨著業務需求的變化,原先的Rowkey信息往往不能滿足需要,此時只能通過降低查詢性能或重新設計Rowkey并對歷史數據重新導入以滿足需求。接下來我們將要介紹的二級索引查詢引擎,可以減小業務需求變化時引起Rowkey設計方案過時引起的查詢問題。
1 二級索引查詢引擎
1.1 什么是二級索引
關系型數據庫表的索引分為兩類:主索引(聚集索引)和二級索引(非聚集索引)。主索引一般對應的是主鍵,而系統可以根據需要建立多個二級索引,輔助與提升查詢性能。基于HBase實現的二級索引主數據Rowkey相當于主索引,而我們擴展出來的索引數據既是二級索引,借助二級索引可以實現查詢條件非Rowkey組成部分的查詢需求與提升查詢性能。
1.2 Coprocessor介紹
一個功能再強大的系統都不能滿足其所有使用者的一切需求。而Coprocessor就是HBase專門為用戶提供擴展功能的一個途徑。借助Coprocessor,用戶可以根據自己實際需求定制出適合自己的功能,并借助HBase現有的框架體系實現高效運行。
Coprocessor功能在0.92版本中引入,其支持兩種協處理器:EndPoint和Observer。
1.2.1EndPoint
類似于關系型數據庫的存儲過程,使用者通過開發對應的客戶端、服務端即可,通過在RegionServer上高效執行本地計算操作。
1.2.2Observer
類似于關系型數據庫的觸發器,用戶通過它可以在服務端實現動作攔截進行特殊處理。
1.3 二級索引查詢引擎
引擎架構圖
從引擎架構圖可以看出,客戶端通過原生的HTable類將數據put至RegionServer(以下簡稱RS),接著RS端Coprocessor的Observer功能對put/delete指令進行攔截,通過索引構造器生成事先配置的索引數據;查詢則通過EndPoint來實現,客戶端通過自定義API設置好查詢條件,并提交到RS端,服務端首先分析客戶端提交的條件信息,通過查詢決策器選擇最優的索引進行查詢。下面我們對關鍵模塊功能實現方案進行分析:
1.3.1Rowkey設計
二級索引的實現方案中,Region除了保留客戶端put上來的主數據外,還需保留索引數據與主數據的對應關系,為了提升性能需要保證索引數據、主數據在同Region中,避免出現跨Region讀寫,因此索引數據可以參考以下規則設計:
Region.startKey.indexName.indexValue.MainRowkey
1.3.2索引構造器
解析業務數據,根據預先加載的索引信息,從業務數據中提取索引字段值,并依次生成索引數據。
1.3.3查詢決策器
根據預先加載的索引信息,從業務數據中提取索引字段,并分析查詢條件,根據策略從已有的索引信息匹配最優的查詢索引,如,某表存在以下兩組索引:
indexName1:fieldA
indexName2:fieldA.fieldB
客戶端提交上來的查詢條件為:fieldA=xxx and fieldB=yyyy and fieldC>=zzz…
此時查詢決策器根據最優策略選擇indexName2索引進行查詢。
1.3.4索引查詢
通過二級索引獲取主數據的過程相較傳統的關系型數據庫并沒有多少區別,首先根據二級索引字段值找到索引數據,再通過索引數據獲取主數據內容。
1.3.5全表掃描
對于設置了二級索引功能屬性的表,Region保留有索引、主數據,實際運用過程中索引記錄數將超過主數據,為了提升遍歷業務數據的效率,須提提供只遍歷主數據的功能。
2 結語
本文首先對HBase的功能進行簡單描述后,重點分析說明HBase在查詢靈活性上存在的問題,從而進入HBase二級索查詢引擎的主題。接著較詳細地說明Coprocessor核心功能與類型,最后給出查詢引擎的架構圖以及各核心功能的實現方案。HBase做為Apache重要的子項目之一,目前比較穩定,并且已有的功能可以滿足大多數系統的需求,借助Coprocessor用戶可以像本文所描述的二級查詢引擎一樣實現屬于自己的功能。
參考文獻:
[1][美]喬治.HBase權威指南.出版社:人民郵電出版社.
[2][美]迪米達克.HBase實戰.出版社:人民郵電出版社.