HBase学习之二级索引

1.引言

        随着大数据时代的来临,数据的规模越来越大,TB级已经成为常态。对于海量的数据,如何对其进行有效的处理,是一个挑战。开源分布式数据库HBase数据库很好的解决了海量数据的存储问题,但是HBase只支持Rowkey作为索引检索数据,所以HBase在检索非Rowkey列的数据时,性能会很差。基于HBase这一特性,业界展开了对HBase二级索引的研究。业界对于HBase二级索引的研究已经取得了不错的成果,目前主要实现的方案有ITHBase,IHBase,CCIndex,华为二级索引和360二级索引等。下文将会对这些方案一一作简要介绍。


2.ITHBase

 ITHBase(Indexed-Transanctional HBase)是业界已经实现的一种基于事务的二级索引项目,并且在Github上开源。该项目基于HBase0.20版本,版本比较陈旧,但是其思想还是值得借鉴的。

 ITHBase索引具有如下特性:

1)、对主表进行插入删除操作,索引表会自动进行相应操作。

2)、对主表索引列进行修改操作,索引表会自动进行相应调整;若在主表中删除索引列,则索引表中索引不到(插入数据的规范性)

3)、可以直接对索引表插入删除,主表不会改变(看是否有相关的设置以保证不能对索引表进行单独操作)。

 

3.IHBase

 IHBase(Index HBase)也是业界已经实现的一种二级索引项目,并且在Gitthub上开源。该项目基于Hadoop0.20.2、HBase0.20.5和JDK1.6,IHBase非常类似ITHBase。IHBase同样从HBase源码级别进行了扩展,重新定义和实现了一些Server、Client端处理逻辑,所以,其具备强侵入性。遗憾的是,该项目在修复完HBase0.20.5版兼容Bug以后再也没有更新。

   其核心思想是:当MemStrore满足缓冲(flush)到磁盘条件时,IHBase会进行拦截请求并为这个MemStrore的数据结构建索引,索引存放于表的另一个列族,不过只支持Region级别(类似于Coprocessor)。在执行Scan时,IHBase会结合索引列的标记来加速Scan。

4.CCIndex

  除了 ITHBase IHBase 之外 , 中国科学院提出了另外一种二级索引方案 : 互补聚簇式索引 (complemental clustering index, 简称 CCIndex)。 前面的二级索引方案中 , 索引表中仅仅存放索引列与原来的 rowkey 信息, 在查 询时 , 通过查询索引表得到 rowkey 以后 , 还需要根据 rowkey 到原来的表中去查找 , 然而由于得到的 rowkey 大都 是随机的 , 所以需要进行大量的随机读操作才能最终得到所需要的数据 , 效率相对比较低。 为了减少随机查询带 来的开销 ,CCIndex
提出了一个新的方案 , 把数据的详细信息也存放在索引表中 , 这样在查询的时候就可以直接 在索引表中通过顺序扫描找到相应的数据 , 即把随机读变成了顺序读 , 可以大大缩短查询时间。 然而 , 把详细信 息存储在索引表中会造成存储空间的增加 , 为了尽可能地减少存储空间的开销 ,Zou 等人 HDFS文 件块备 份数设为 1, 这样就可以保证存储空间不会增加太多。 但是 , 备份数设为 1 之后, 数据的容错性又成了新的问题 , 了解决这一问题 , 他们又提出了新的容错方案
, 通过创建 clustering check table, 再配合原有的索引表 , 能够实现快 速恢复。 同时 ,CCIndex 还提出了一种查询优化机制 , 用以支持多维查询。 该优化机制主要是利用 HBase 中的一些 元数据信息 (region-to-server  information)

来估算每个子查询结果的大小,根据查询结果来生成合适的查询计划,从而降低查询时间。CCIndex方案实现起来相对比较简单,但是也存在一些不足之处,如存储开销比较大,尤其是当索引列比较多的时候,空间开销会更大;索引更新代价比较高,会影响系统的吞吐量;索引创建以后,不能够动态增加或修改。 


5.华为二级索引

 华为二级索引是华为高级技术经理Anoop Sam John在2012年的Hadoop与大数据技术大会上公布的。它采用纯java实现。它基于HBase0.94,采用了HBase的新特性Coprocessor来实现,它对HBase二级索引有一个创新性的修改,其改进点的重点在于减少由随机查询带来的大量网络开销。

  HBase学习之二级索引_第1张图片

        整体架构图

 华为二级索引的特点如下:

1)、索引和数据分别放在不同表里;

2)、所有的运算逻辑全都放在服务端;

3)、需要修改HBase源码,侵入性大

4)、查询时无需指定,即可自动使用最优索引

 

6.360二级索引

 在今年的Qcon北京会议上,360公司的系统部技术经理赵健博公布了360公司的HBase二级索引方案。这一方案的提出将比华为HBase二级索引更好的解决了Hbase的多维实时查询问题。360没有将主数据和索引分表储存,而是将它们存放在了同一张表里,通过给索引和主数据的RowKey添加特别设计的Hash前缀,实现了在Region切分时,索引能够跟随其主数据划归到同一Region上,即任意Region上的主数据其索引也必定驻留在同一Region上,这样我们就能把从索引抓取目标主数据的性能损失降低到最小。

    360二级索引的特点如下:

1)、索引和Rowkey在同一个表里;

2)、支持多范围与操作优化;

3)、支持索引重建


7、参考文献

赵健博. 奇虎360 HBASE二级索引的设计与实现[R].北京QCon大会,2015.

马友忠,孟小峰.云数据管理索引技术研究[J].软件学报,2015,26(1):145-166.http://www.jos.org.cn/1000-9825/4688.htm.

Anoop SamJohn.HBase-Secondary Index[R].  HBTC大会 2012.

张延辉,孟鑫,李立松.HBase企业应用开发实战[M].北京:机械工业出版社,2014:6-18.





你可能感兴趣的:(HBase)