最近的項目需要使用Hbase做實時查詢,由於Hbase只支持一級索引,也就是使用rowkey作為索引查詢,所以對於多條件篩選查詢的支持不夠,在不建立二級索引的情況下,只能使用Hbase API中提供的各種filter過濾器進行篩選,感覺查詢效率不太理想,於是考慮建立二級索引的方案。
經過google學習網上前輩們的經驗,暫時找到兩種可用的方案:
- 使用Hbase協處理器Coprocessor在寫入數據時,創建二級索引表,並將每條數據的索引寫入二級索引表中,查詢時先根據篩選條件查詢二級索引表,獲取相對應的一級索引rowkey,然后根據rowkey去數據表中獲取查詢結果。
- 使用solr搜索應用服務器,在寫入數據時,在solr中建立二級索引(甚至可以建立全文索引),查詢時先根據篩選條件獲取一級索引rowkey的集合,然后根據rowkey去數據表中獲取查詢結果。
對兩種方案進行了比較發現,第一種方案中存在的問題是無法直接獲取數據記錄總數(要獲取記錄總數,需要在寫入數據時單獨維護一個計數器,並一直更新記錄總數),對於分頁顯示的需求不容易滿足;而solr服務器的查詢方式類似於SQL語句,支持各種查詢條件過濾、限定查詢范圍、頁數以及直接獲取記錄總數,所以我比較傾向於第二種方案。
關於兩種方案的效率問題,目前還在測試中,后面會陸續寫出第二套方案的詳細部署以及代碼。
第一次開博客,先寫這么多吧,下班!