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

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=


HBase一个使人可惜的地方,就是不支持二级索引。所以,社区有了不少补充方案来填补HBase的二级索引能力的缺陷。html

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

1.为何须要二级索引

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

实际上,这是NoSQL最初的含义,以解决大数据的实时存取为首要目标,提供简单的Get,Put,Scan接口,解决用户的大数据量存储的需求。所以,HBase彻底是一个很是优秀的大数据实时存取引擎,解决了传统数据库的容量问题。apache

就目前官方的HBase系统来讲,并不支持二级索引,只有rowkey做为一级索引, 若是要对库里的非rowkey字段进行数据检索和查询, 每每要经过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。微信

为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能作到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等, 所以须要在原生HBase基础上构建二级索引, 以知足现实中更复杂多样的业务需求。通常有如下三类方案:框架

  • 基于HBase的Coprocessor的方案(典型表明phoenix)分布式

  • 云厂商自研的二级索引(阿里云目前有自研加强版二级索引)ide

  • 基于搜索平台的索引方案(如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的原理和最佳实践,敬请期待!





原创:阿丸笔记(微信公众号:aone_note),欢迎 分享,转载请保留出处。

扫描下方二维码能够关注我哦~

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

                                                                              以为不错,就点个  再看 吧????



本文分享自微信公众号 - 阿丸笔记(aone_note)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索