Home >Database >Mysql Tutorial >华为hbase二级索引(secondary index)细节分析

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

WBOY
WBOYOriginal
2016-06-07 16:30:371650browse

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

华为在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)细节分析

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Previous article:MongoDB's New MatcherNext article:Redis分区方案