1. 工作原理
读请求到HBase之后先尝试查询BlockCache,如果获取不到就去HFile(StoreFile)和Memstore中去获取。如果获取到了则在返回数据的同时把Block块缓存到BlockCache中。它默认是开启的,一个RegionServer只有一个BlockCache。
BlockCache默认开启,如果关闭BlockCache:
alter 'testTable', CONFIGURATION=>{NAME => 'cf',BLOCKCACHE=>'false'}
2. 实现方案
2.1 LRU BLOCKCACHE
在0.92版本 之前只有这种BlockCache的实现方案。LRU就是Least Recently Used, 即近期最少使用算法的缩写。读出来的block会被放到BlockCache中待 下次查询使用。当缓存满了的时候,会根据LRU的算法来淘汰block。 LRUBlockCache被分为三个区域

2.2 SLAB CACHE
SlabCache实际测试起来对Full GC的改善很小,所以这个方案最后被废弃了。不过它被废弃还有一个更大的原因,这就是有另一个更好的Cache方案产生了,也用到了堆外内存,它就是BucketCache。
2.3 Bucket CACHE
- 相比起只有2个区域的SlabeCache,BucketCache一上来就分配了 14种区域。注意:我这里说的是14种区域,并不是14块区域。这 14种区域分别放的是大小为4KB、8KB、16KB、32KB、40KB、 48KB、56KB、64KB、96KB、128KB、192KB、256KB、

最低0.47元/天 解锁文章
9603

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



