hbase的Scan和Get的blockCacheHitRatio区别

看regionserver的监控页面,发现顺序取值使用Get时的blockCacheHitRatio较高。

而使用Scan时blockCacheHitRatio低了不少。查看源代码发现

参考AbstractHFileReader.Scanner类(HFileScanner的子类)中。

//这里的blockBuffer,即是block

protected ByteBuffer blockBuffer;

protected boolean cacheBlocks;

在一个Scan中读取多条数据时会从blockBuffer中直接读取,所以就不会以blockCacheHitRatio有贡献。

而使用Get读数据时,每条数据都会新实例化一个Scan,这个blockBuffer是空,每次都需要重新读取。如果这个block在缓存中存在的话,则会增加blockCacheHitRatio。