HBase 0.1.0 Get流程源码分析

16 篇文章 0 订阅
16 篇文章 0 订阅
本文深入分析了HBase 0.1.0中region层面的Get操作流程。当客户端发起Get请求到达RegionServer后,根据RowKey定位到特定Region,并在内存的Memstore查找,若未找到足够记录则遍历StoreFiles。高命中率的Memstore和有效的Bloomfilter能显著提升Get速度。随着StoreFiles增多,Region会进行Compact和Split操作,以维持性能。0.1.0后续版本主要加强了Bloomfilter功能。
摘要由CSDN通过智能技术生成

在debug region一文中http://blog.csdn.net/mrtitan/article/details/8209994已经说到Hbase中每个region都是个独立的个体,本文会分析一次get操作在region层面是如何实现的。

HBase系统架构:

client的一次get操作到了regionserver后,regionserver会根据rowkey的范围选择对应的region。

region拼装rowkey,根据get的column选择对应的HStore(每个column对应一个HStore),开始get

HStoreKey key = new HStoreKey(row, column, timestamp);
HStore targetStore = stores.get(HStoreKey.extractFamily(column));
return targetStore.get(key, numVersions);

 

get的基本流程是:

1.首先在内存即memstore中查找HStoreKey,如果查到足够数量的记录则返回

2.如果memstore没能满足我们的get请求,则遍历所有文件即storefiles,直到拿到足够数量的记录为止。

 

根据这样的流程,我们可以看出:

1.memstore的命中率很重要

2.如果内存没命中,则需要遍历所有的storefile,这样,随着storefile变多或者单个storefile过大则会明显减慢get的速度

3.为了防止storefile过多,region会定期compact,将所有storefile合并为一个

4.合并后storefile过大,因此region又会做split,将一个region分成2个

5.使用bloomfilter会大大加快get的速度,因为bloomfilter会直接跳过那些不存在此key的storefile。

 

这种先mem后file的get流程Hbase一直沿用到最新的版本都没有改变,这也是LSM-Tree为了解决读效率的解决方式。

在0.1.0后面的版本中主要增强了bloomfilter的功能,包括支持row,rowcol,还有在mapfile上又包了一层HFile。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值