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

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

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

//这里的blockBuffer,即是block

protected ByteBuffer blockBuffer;

protected boolean cacheBlocks;

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

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

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐