华为HBase二级索引(Secondary Index)细节分析

标签: 华为 hbase 索引 | 发表时间:2013-12-30 16:17 | 作者:cloudera
出处:http://www.iteye.com

华为在HBTC 2012上由其高级技术经理Anoop Sam John透露了其 二级索引方案,这在业界引起极大的反响,甚至有人认为,如果华为早点公布这个方案,hbase的某些问题早就解决了。其核心思想是保证索引表和主表在同一个region server上。

目前该方案华为已经开源,详见: https://github.com/Huawei-Hadoop/hindex

下面来对其方案做一个分析。

1.整体架构

这个架构在Client Ext中设定索引细节,在Balancer中收集信息,在Coprocessor中管理二级索引数据。

architecture  华为hbase二级索引(secondary index)细节分析

2.表创建

在创建表的时候,在同一个region server上创建索引表,且一一对应。

tableCreate 华为hbase二级索引(secondary index)细节分析

3.插入操作

在主表中插入某条数据后,用Coprocessor将索引列写到索引表中去,写道索引表中的数据的主键为:region开始key+索引名+索引列值+主表row key。这么做,是为了让其在同一个分布规则下,索引表会跟主表在通过region server上,在查询的时候就可以少一次rpc。

putOperation 华为hbase二级索引(secondary index)细节分析

4.scan操作

一个查询到来的时候,通过coprocessor钩子,先从索引表中查询范围row,然后再从主表中相关row中扫描获得最终数据。

scan 华为hbase二级索引(secondary index)细节分析

5. split操作处理

为了使主表和索引表在同一个RS上,要禁用索引表的自动和手动split,只能由主表split的时候触发,当主表split的时候,对索引表按其对应数据进行划分,同时,对索引表的第二个daughter split的row key的前面部分修改为对应的主键的row key。

split 华为hbase二级索引(secondary index)细节分析

6. 性能

查询性能极大提升,插入性能下降10%左右

performance1 华为hbase二级索引(secondary index)细节分析

performance2 华为hbase二级索引(secondary index)细节分析

总结,本文对华为hbase使用coprocessor进行二级索引的方案的创建表,插入数据,查询数据的步骤进行了一个粗略分析,以窥其全貌。在使用的时候,可以作为一个参考。

转载:  邓的博客

本文地址:  华为hbase二级索引(secondary index)细节分析

参考资料

         1. HBase二级索引与Join





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [华为 hbase 索引] 推荐:

华为HBase二级索引(Secondary Index)细节分析

- - 数据库 - ITeye博客
华为在HBTC 2012上由其高级技术经理Anoop Sam John透露了其 二级索引方案,这在业界引起极大的反响,甚至有人认为,如果华为早点公布这个方案,hbase的某些问题早就解决了. 其核心思想是保证索引表和主表在同一个region server上. 目前该方案华为已经开源,详见: https://github.com/Huawei-Hadoop/hindex.

hbase中二级索引的实现--ihbase

- - ITeye博客
一般来说,对数据库建立索引,往往需要单独的数据结构来存储索引的数据.在为hbase建立索引时,可以另外建立一张索引表,查询时先查询索引表,然后用查询结果查询数据表. 这个图左边表示索引表,右边是数据表. 但是对于hbase这种分布式的数据库来说,最大的问题是解决索引表和数据表的本地性问题,hbase很容易就因为负载均衡,表split等原因把索引表和数据表的数据分布到不同的region server上,比如下图中,数据表和索引表就出现在了不同的region server上.

基于Nutch+Hadoop+Hbase+ElasticSearch的网络爬虫及搜索引擎

- - zzm
网络爬虫架构在Nutch+Hadoop之上,是一个典型的分布式离线批量处理架构,有非常优异的吞吐量和抓取性能并提供了大量的配置定制选项. 由于网络爬虫只负责网络资源的抓取,所以,需要一个分布式搜索引擎,用来对网络爬虫抓取到的网络资源进行实时的索引和搜索. 搜 索引擎架构在ElasticSearch之上,是一个典型的分布式在线实时交互查询架构,无单点故障,高伸缩、高可用.

HBase RowKey与索引设计 - 牧梦者 - 博客园

- -
hbase的内部使用KeyValue的形式存储,其key时rowKey:family:column:logTime,value是其存储的内容. 其在region内大多以升序的形式排列,唯一的时logTime是以降序的形式进行排列. 所以,rowKey里越靠近左边的信息越容易被检索到. 其设计时,要考虑把重要的信息放左边,不重要的信息放到右边.

基于solr实现hbase的二级索引 - oO脾气不坏Oo

- - 博客园_首页
    了解hbase的都知道,由于hbase基于行健有序存储,在查询时使用行健十分高效,然后想要实现关系型数据库那样可以随意组合的多条件查询、查询总记录数、分页等就比较麻烦了. 想要实现这样的功能,我们可以采用两种方法:. 使用hbase提供的filter,. 自己实现二级索引,通过二级索引查询多符合条件的行健,然后再查询hbase.

[原]自学大数据:基于Solr实现HBase的文本索引

- -
最近接触的项目中,需要针对HBase的数据进行索引查询,主要支持中文查询,分页查询等. 在此情况下,学习了搜索服务器solr. 总结了一些方法和经验,正好可以分享个大家,鼓励自己,共同学习. HBase目前只支持对rowkey的一级索引,对于二级索引还不支持,当然可以把所有要索引的字段都拼接到rowkey中,根据hbase的filter功能进行查询,但是这样操作数据会涉及到全表扫描,效率很低,速度慢,不利于后期扩展.

基于cdh5.7.5集群的solr(4.10.3-cdh5.7.5)+hbase(1.2.0-cdh5.7.5)构建二级索引方案

- - 行业应用 - ITeye博客
作为开发人员,在阅读该篇博客之前最好已具备以下基本技能:. 了解Linux命令、HBase Shell、Solr schema.xml文件的常用的标签含义、CDH集群基本操作(所需服务安装、卸载、配置). 在Hbase中,表的RowKey 按照字典排序, Region按照RowKey设置split point进行shard,通过这种方式实现的全局、分布式索引.

hbase介绍

- AreYouOK? - 淘宝数据平台与产品部官方博客 tbdata.org
hbase是bigtable的开源山寨版本. 是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统. 它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作). 主要用来存储非结构化和半结构化的松散数据.

Riak对比HBase

- - NoSQLFan
文章来自 Riak官方wiki,是一篇Riak与HBase的对比文章. Riak官方的对比通常都做得很中肯,并不刻意偏向自家产品. 对比的Riak版本是1.1.x,HBase是0.94.x. Riak 与 HBase 都是基于 Apache 2.0 licensed 发布. Riak 的实现是基于 Amazon 的 Dynamo 论文,HBase 是基于 Google 的 BigTable.

[转]HBase简介

- - 小鸥的博客
   Hbase是一个分布式开源数据库,基于Hadoop分布式文件系统,模仿并提供了基于Google文件系统的Bigtable数据库的所有功能. 其目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据,并且有数百万列元素组成的数据表. Hbase可以直接使用本地文件系统或者Hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥Hbase处理大数据量等功能,需要使用Hadoop作为文件系统.