你好,游客 登录 注册 搜索
背景:
阅读新闻

HBase二级索引

[日期:2016-03-16] 来源:CSDN博客  作者:dhtx_wzgl的博客 [字体: ]

  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)、索引和数据分别放在不同表里;

  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.





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款