HBase学习之二级索引

来源:互联网 时间:1970-01-01

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之外,中国科学院提出了另外一种二级索引方案:互补聚簇式索引(complementalclustering 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二级索引有一个创新性的修改,其改进点的重点在于减少由随机查询带来的大量网络开销。

 

        整体架构图

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

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.







相关阅读:
Top