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。