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