关于get和scan操作

get和scan是hbase中访问数据最基本的两个操作。get访问一个指定key的数据,而scan可以设置begin和end来访问一个范围内所有的数据。

而通过查看相关代码,原来get操作就是一种特殊的scan,begin和end相同的scan操作。

HRegion.java中的get方法是对get操作的处理,代码的最开始进行了转化,如下:

private List<KeyValue> get(Get get, boolean withCoprocessor)
  throws IOException {
    Scan scan = new Scan(get);

通过Scan的构造方法,将get转化为scan,该构造方法如下:

public Scan(Get get) {
    this.startRow = get.getRow();
    this.stopRow = get.getRow();
    this.filter = get.getFilter();
    this.cacheBlocks = get.getCacheBlocks();
    this.maxVersions = get.getMaxVersions();
    this.tr = get.getTimeRange();
    this.familyMap = get.getFamilyMap();
  }

可以看得出来,get转化为startRow和stopRow相同的scan操作。

从另一个角度来看,hbase读数据的操作都是scan,代码级别实现的是scan,而并没有特别针对get的操作。那么原来可以对get进行的一些优化实际上都是没有做的,所有的实现都是针对scan。所以,我们可以对hbase做些改造,让其更适合get的操作。对于store中有多个hfile的表来说,性能应该会有很大的提升的。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值