HBase分析之Get、Scan(二)RegionScanner

本文深入探讨HBase的RegionScannerImpl,分析getScanner创建的RegionScannerImpl实例如何通过nextInternal方法获取数据。文章指出,HBase数据查找依赖于遍历文件,而filter和stopRow的设置能优化查找效率。在扫描过程中,StoreScanner的作用和遍历逻辑被详细阐述。
摘要由CSDN通过智能技术生成

这篇我们继续看moreRows = scanner.nextRaw(values, scannerContext);,这里的scanner是通过HRegion#getScanner创建出来的一个RegionScannerImpl实例,他的nextRaw方法调用了RegionScannerImpl#nextInternal方法。这个方法主要目的是获取下一条数据放入results,并取得返回值表示是否还有更多的数据。

我们知道HBase没有建立索引,数据的查找是靠遍历文件实现的,所以查找下一行数据需要一个while循环。为了方便理解,代码稍有调整。

private boolean nextInternal(List<Cell> results, ScannerContext scannerContext)
    throws IOException {
  while (true) {
    ...
  }
}
  1. 剥去while,看内部,首先从storeHeap里取了个值,第一次取得的值是null,后续会往storeHeap里塞数据。前一篇我们说过,多次的请求其实用的是同一个Scanner实例,所以可以在一次请求时,将值放入storeHeap,下一次请求还是可以从storeHeap里取出来。
Cell current = this.storeHeap.peek();

byte[] currentRow = null;
int offset = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值