看regionserver的监控页面,发现顺序取值使用Get时的blockCacheHitRatio较高。
而使用Scan时blockCacheHitRatio低了不少。查看源代码发现
参考AbstractHFileReader.Scanner类(HFileScanner的子类)中。
//这里的blockBuffer,即是block
protected ByteBuffer blockBuffer;
protected boolean cacheBlocks;
在一个Scan中读取多条数据时会从blockBuffer中直接读取,所以就不会以blockCacheHitRatio有贡献。
而使用Get读数据时,每条数据都会新实例化一个Scan,这个blockBuffer是空,每次都需要重新读取。如果这个block在缓存中存在的话,则会增加blockCacheHitRatio。
深入分析RegionServer监控页面显示的顺序取值使用Get时blockCacheHitRatio高,而使用Scan时低的原因。解释在Scan中读取多条数据时如何导致blockCache命中率降低,以及Get操作如何通过每次新实例化Scan增加blockCacheHitRatio。
2816

被折叠的 条评论
为什么被折叠?



