「从零单排HBase 11」HBase二级索引解决方案

HBase一个令人惋惜的地方,就是不支持二级索引。因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷。

今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景做出二级索引方案选型。

1.为什么需要二级索引

HBase系统单纯从解决大数据实时读写问题角度出发,重点关注于分布式存储的扩展性、容错性、读写性能等方面D n q 7 x %,为此也牺牲了很多传统关系型数据库的功能,比如事务,SQL表达与分析等。

实际上,这是NoSQL最初的含义,以解决大数据的实时存取为首要目标,提供简单的Get,Put,Scan接口,解决用户的大数据量存储的需求4 a h s X Q。因此,HBase完全是一个非常优秀[ 1 c 6 !的大数据实时存取引擎,解决了传统数据库的容量问题。

就目前官方, 3 a M $ j的HBase系统来说,并不支持二级索引,只有rowkey作为一级索引, 如果要对库里的非rowkey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬g a ~ 5 g件资源消耗和时间延迟都V f @ ? u ! 7 +会比较高。

为了HBase的数据查询更高效、适应更多的场景l I m, 诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等, 因此需要在原生HBase基础上构建二级索引, 以满足现实中更复i [ D! ~ K )多样的业务需求。一般有以下三类方案K L L

基于HBase的Coprocessor的方案(典型代表phoenix)
云厂商l c W O F ! 1 1自研的二级索引(阿里云I . n目前有自研增强版二级索引)
基于搜索平台的索引方案(如solr、ES等)。K K ? u @ 5 x
2.如何选择二级索引方案

我们从读写性能、使用限制、学习成本、社区活跃等角度,对三类方案做对比。

基于HBase的Coprocessor的方案(典型代表phoenix)

官方文档:http://phoenix.apacheE A 3 y o ..org/secondary_indexing.html
读写性能:有一定读写性能损害,索引越多,写入性能影响越大
TTL功能:支持比较好
索引的使用限制:一个表的索引数不要超过1G m j0个
索引类型:全局索引、本地索引、覆盖索引
学习成本:类JDBC的sql语法,多参考官方的语法(http://phoenix.apache.org/language/indH 5 ; 6 =ex.htm1 = o E Dl)
开源/社区活跃程度:开源,目前社区不太活跃
优点:社区文档多、使用简单、实时查询无延迟
缺点:非商业化方案,没有专门的技术支持
云厂商自研的二级索引(典型代表阿里云自研增强版二级索引)

官方文档:https://help_ x j o.aliyun.com/document_detail/144577.html?spm=a2c4g.11174283.6.576.49993C F *63f2uZWt0
读写性能:二级索引内I y X h { 置于HBase,官方的性能评测文档说比Phoenix好
TTL功能:只能在单列索引上生效
索引的使用限制:一个表的3 ; .索引个数最多不超过5个、组合索引的列最多不要超过4 g L U $3个
% o 3引类型:全e V & q局索引、本地索引、覆盖索引
学习成本:内部封装的很简单,在使用上就是HBase的原生用法
开源/社区活跃程度2 P o p r A:非开源、阿里云私有
优点:性能好、实时查询无延迟
缺点:1 4 4 5 K 9被云厂商锁定
基于搜索平台的二级索引方案(以Solr为例)

官方文档:http://phoenix.apache.org/secondary_indexing.html
读写9 O * 9 y z #性能:有一定读写性能损害、数据同步的延迟需要考虑
TTL功能:HBase是单个KV过期,而Solr中只能按照Document(对应HBase的一行)过期,过期的时间不完全一致
索引的使用限制:没有限制,完u d e % b t U全取决于solr
索引类型:非常s ` } Z : _灵活# 5 | k H m ; ^
学习成本:需要熟F & m W { ~悉solr语法
开源/社区活跃程度# n V M:开源 社区活跃
优点:查询方式更加灵活
缺点:引入搜索引擎组件、太重了,而且有明显的延迟问题

总结一下(特别重要的技术选型策略):

为了不被云厂d ( c u D a a s商锁定,所以不采用云厂U r O f b C商独有的二级索引方案
对于4 U E f实时性要求高、索引数量少的场景,完全可以使用phoenix,简单而又` - l丝滑
对于实时性要求不高、搜索场景比较复杂的,需要引入h f M O ^ |搜索引擎,如solr或者es进行索引构建
一般来说,为了满足实时需求,我们会使用phoenix。

3.简单了解下phoenix

为了让HB~ I B g f j qase更强大,更好- m ? n z 9F H G z I q L 8 O,门槛更低,让HBase帮助更多的用户解决他们遇到的实际问题# A { ` 2。于是,O I G phoenix带着SQL诞生了。众所周知,SQL是数据处理领域的语言标准,简单,好用,表达力强,用户使用广泛。当然,HBase S7 % W p |QL的实现和发展跟N z c G传统单机W K [ 2 O C R数据库有很多不同,便于i ? M w区别,我们称之为NewSQL。这也是社区尝试HBase} & z二级索引的初衷,如果说HBase是^ = Q b [ F功能强大的存储引擎,那么支持NewSQL之后,就变y i X ) . S . 5 J成了J j G ^ `新一代的大飞机。

Phoenix作为应用层和HBASE之间的中间件,以下特性使它在大数据量的简单查询场景有着独有的优势

二级索引支持(globA 8 P = F D Y ^ 0al ind( B ^ex + local index)
编译SQL成为原生HBASE的可并行执行的scan
在数据层完成计算,server端的coprocessor执行聚合
下推where过滤条件到serverr I W 9 A A端的scan filter上
skip scan功能提高扫描速度
下一期,^ X r我们N J 0 g @ t将结合实践,来说明phoenix的原理和最佳实践,敬请期待!

原创:. ` 8 3 V 4 [阿丸笔记($ ] P e 9 * o微信公众号:aone_note),欢迎 分享,转载请保留出处。
扫描下方二维码可以关注我哦~
「从零单排HBase 11」HBase二级索引解决方案