扫描器缓存
ResultScanner scanner = table.getScanner(scan);
for(result res : scanner){
...
}
上一关我们使用的ResultScanner
类循环扫描表中的数据,ResultScanner
继承了Iterable
接口,是一个迭代器,所以在for
循环遍历ResultScanner
对象的时候实际调用的是ResultScanner
对象的next()
方法,每个next()
调用都会产生一个单独的RPC
请求,使用next(int nbRows)
也是一样,而我们都知道发送请求是很耗时的操作,所以这样做性能并不好。
咋办呢?
如果一次RPC
请求可以获取多行数据,这样就能有效的减少请求的次数,ResultScanner
类就提供了一个方法可以让我们设置一次请求的缓存大小:
void setCaching(int caching)//设置缓存大小
当我们要扫描的表比较大时,使用设置缓存的方式确实可以有效的提高程序的效率,不过一招鲜并不能吃遍天。
有时候,我们并不需要将整张表都扫描,如果扫描一整张表,就会造成一些性能浪费,JavaAPI
提供了方法供我们来解决这些问题:
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes(