HBase一個使人可惜的地方,就是不支持二級索引。所以,社區有了不少補充方案來填補HBase的二級索引能力的缺陷。html
今天,咱們就來看看有哪些二級索引方案,經過對比各個方案的優缺點,並結合咱們的具體場景作出二級索引方案選型。git
1.爲何須要二級索引HBase系統單純從解決大數據實時讀寫問題角度出發,重點關注於分佈式存儲的擴展性、容錯性、讀寫性能等方面,爲此也犧牲了不少傳統關係型數據庫的功能,好比事務,SQL表達與分析等。github
實際上,這是NoSQL最初的含義,以解決大數據的實時存取爲首要目標,提供簡單的Get,Put,Scan接口,解決用戶的大數據量存儲的需求。所以,HBase徹底是一個很是優秀的大數據實時存取引擎,解決了傳統數據庫的容量問題。sql
就目前官方的HBase系統來講,並不支持二級索引,只有rowkey做爲一級索引, 若是要對庫裏的非rowkey字段進行數據檢索和查詢, 每每要經過MapReduce/Spark等分佈式計算框架進行,硬件資源消耗和時間延遲都會比較高。數據庫
爲了HBase的數據查詢更高效、適應更多的場景, 諸如使用非rowkey字段檢索也能作到秒級響應,或者支持各個字段進行模糊查詢和多字段組合查詢等, 所以須要在原生HBase基礎上構建二級索引, 以知足現實中更復雜多樣的業務需求。通常有如下三類方案:apache
咱們從讀寫性能、使用限制、學習成本、社區活躍等角度,對三類方案作對比。框架
基於HBase的Coprocessor的方案(典型表明phoenix)分佈式
雲廠商自研的二級索引(典型表明阿里雲自研加強版二級索引)ide
基於搜索平臺的二級索引方案(以Solr爲例)性能
總結一下(特別重要的技術選型策略):
通常來講,爲了知足實時需求,咱們會使用phoenix。
3.簡單瞭解下phoenix爲了讓HBase更強大,更好用,門檻更低,讓HBase幫助更多的用戶解決他們遇到的實際問題。因而,phoenix帶着SQL誕生了。衆所周知,SQL是數據處理領域的語言標準,簡單,好用,表達力強,用戶使用普遍。固然,HBase SQL的實現和發展跟傳統單機數據庫有不少不一樣,便於區別,咱們稱之爲NewSQL。這也是社區嘗試HBase二級索引的初衷,若是說HBase是功能強大的存儲引擎,那麼支持NewSQL以後,就變成了新一代的大飛機。
Phoenix做爲應用層和HBASE之間的中間件,如下特性使它在大數據量的簡單查詢場景有着獨有的優點
下一期,咱們將結合實踐,來講明phoenix的原理和最佳實踐,敬請期待!
看到這裏了,原創不易,點個關注、點個贊吧,你最好看了~
知識碎片從新梳理,構建Java知識圖譜:https://github.com/saigu/JavaKnowledgeGraph