hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
HBase一個令人惋惜的地方,就是不支持二級索引。因此,社區有了很多補充方案來填補HBase的二級索引能力的缺陷。
今天,我們就來看看有哪些二級索引方案,通過對比各個方案的優缺點,并結合我們的具體場景做出二級索引方案選型。
1.為什么需要二級索引
HBase系統單純從解決大數據實時讀寫問題角度出發,重點關注于分布式存儲的擴展性、容錯性、讀寫性能等方面,為此也犧牲了很多傳統關系型數據庫的功能,比如事務,SQL表達與分析等。
實際上,這是NoSQL最初的含義,以解決大數據的實時存取為首要目標,提供簡單的Get,Put,Scan接口,解決用戶的大數據量存儲的需求。因此,HBase完全是一個非常優秀的大數據實時存取引擎,解決了傳統數據庫的容量問題。
就目前官方的HBase系統來說,并不支持二級索引,只有rowkey作為一級索引, 如果要對庫里的非rowkey字段進行數據檢索和查詢, 往往要通過MapReduce/Spark等分布式計算框架進行,硬件資源消耗和時間延遲都會比較高。
為了HBase的數據查詢更高效、適應更多的場景, 諸如使用非rowkey字段檢索也能做到秒級響應,或者支持各個字段進行模糊查詢和多字段組合查詢等, 因此需要在原生HBase基礎上構建二級索引, 以滿足現實中更復雜多樣的業務需求。一般有以下三類方案:
- 基于HBase的Coprocessor的方案(典型代表phoenix)
- 云廠商自研的二級索引(阿里云目前有自研增強版二級索引)
- 基于搜索平臺的索引方案(如solr、ES等)。
2.如何選擇二級索引方案
我們從讀寫性能、使用限制、學習成本、社區活躍等角度,對三類方案做對比。
基于HBase的Coprocessor的方案(典型代表phoenix)
- 官方文檔:http://phoenix.apache.org/secondary_indexing.html
- 讀寫性能:有一定讀寫性能損害,索引越多,寫入性能影響越大
- TTL功能:支持比較好
- 索引的使用限制:一個表的索引數不要超過10個
- 索引類型:全局索引、本地索引、覆蓋索引
- 學習成本:類JDBC的sql語法,多參考官方的語法(http://phoenix.apache.org/language/index.html)
- 開源/社區活躍程度:開源,目前社區不太活躍
- 優點:社區文檔多、使用簡單、實時查詢無延遲
- 缺點:非商業化方案,沒有專門的技術支持
云廠商自研的二級索引(典型代表阿里云自研增強版二級索引)
- 官方文檔:https://help.aliyun.com/document_detail/144577.html?spm=a2c4g.11174283.6.576.4999363f2uZWt0
- 讀寫性能:二級索引內置于HBase,官方的性能評測文檔說比Phoenix好
- TTL功能:只能在單列索引上生效
- 索引的使用限制:一個表的索引個數最多不超過5個、組合索引的列最多不要超過3個
- 索引類型:全局索引、本地索引、覆蓋索引
- 學習成本:內部封裝的很簡單,在使用上就是HBase的原生用法
- 開源/社區活躍程度:非開源、阿里云私有
- 優點:性能好、實時查詢無延遲
- 缺點:被云廠商鎖定
基于搜索平臺的二級索引方案(以Solr為例)
- 官方文檔:http://phoenix.apache.org/secondary_indexing.html
- 讀寫性能:有一定讀寫性能損害、數據同步的延遲需要考慮
- TTL功能:HBase是單個KV過期,而Solr中只能按照Document(對應HBase的一行)過期,過期的時間不完全一致
- 索引的使用限制:沒有限制,完全取決于solr
- 索引類型:非常靈活
- 學習成本:需要熟悉solr語法
- 開源/社區活躍程度:開源 社區活躍
- 優點:查詢方式更加靈活
- 缺點:引入搜索引擎組件、太重了,而且有明顯的延遲問題
總結一下(特別重要的技術選型策略):
- 為了不被云廠商鎖定,所以不采用云廠商獨有的二級索引方案
- 對于實時性要求高、索引數量少的場景,完全可以使用phoenix,簡單而又絲滑
- 對于實時性要求不高、搜索場景比較復雜的,需要引入搜索引擎,如solr或者es進行索引構建
一般來說,為了滿足實時需求,我們會使用phoenix。
3.簡單了解下phoenix
為了讓HBase更強大,更好用,門檻更低,讓HBase幫助更多的用戶解決他們遇到的實際問題。于是,phoenix帶著SQL誕生了。眾所周知,SQL是數據處理領域的語言標準,簡單,好用,表達力強,用戶使用廣泛。當然,HBase SQL的實現和發展跟傳統單機數據庫有很多不同,便于區別,我們稱之為NewSQL。這也是社區嘗試HBase二級索引的初衷,如果說HBase是功能強大的存儲引擎,那么支持NewSQL之后,就變成了新一代的大飛機。
Phoenix作為應用層和HBASE之間的中間件,以下特性使它在大數據量的簡單查詢場景有著獨有的優勢
- 二級索引支持(global index + local index)
- 編譯SQL成為原生HBASE的可并行執行的scan
- 在數據層完成計算,server端的coprocessor執行聚合
- 下推where過濾條件到server端的scan filter上
- skip scan功能提高掃描速度
下一期,我們將結合實踐,來說明phoenix的原理和最佳實踐,敬請期待!
都看到最后了,原創不易,點個關注,點個贊吧~知識碎片重新梳理,構建Java知識圖譜:https://github.com/saigu/JavaKnowledgeGraph(歷史文章查閱非常方便)
總結
以上是生活随笔為你收集整理的hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发银行怎么注销信用卡
- 下一篇: jpanel网格布局添加滚动条_啥是前端