HBase-1.2.4 CombinedBlockCache和InclusiveCombinedBlockCache

简介: 一、综述        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。

一、综述

        在《HBase-1.2.4 Allow block cache to be external分析》一文的最后,讲解了如何实例化外部缓存MemcachedBlockCache。本文将对上文中提到的几种缓存中的InclusiveCombinedBlockCache和CombinedBlockCache做个综述。

        上文中提到的缓存实现,有以下几种:

        1、单独LruBlockCache

        2、启用外部缓存:InclusiveCombinedBlockCache

        3、启用混合缓存CombinedBlockCache

二、CombinedBlockCache

        CombinedBlockCache是一个混合缓存,它是由LruBlockCache和另外一种BlockCache实现的。它的cacheBlock()方法,会根据参数inMemory和cacheDataInL1来确定缓存的地址是LruBlockCache还是另外一种BlockCache,如下:

  @Override
  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf, boolean inMemory,
      final boolean cacheDataInL1) {
    boolean isMetaBlock = buf.getBlockType().getCategory() != BlockCategory.DATA;
    if (isMetaBlock || cacheDataInL1) {
      lruCache.cacheBlock(cacheKey, buf, inMemory, cacheDataInL1);
    } else {
      l2Cache.cacheBlock(cacheKey, buf, inMemory, false);
    }
  }
       而获取缓存时,则是先从LruBlockCache中获取,获取不到时再从另外一种BlockCache中获取,如下:

  @Override
  public Cacheable getBlock(BlockCacheKey cacheKey, boolean caching,
      boolean repeat, boolean updateCacheMetrics) {
    // TODO: is there a hole here, or just awkwardness since in the lruCache getBlock
    // we end up calling l2Cache.getBlock.
    if (lruCache.containsBlock(cacheKey)) {
      return lruCache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);
    }
    Cacheable result = l2Cache.getBlock(cacheKey, caching, repeat, updateCacheMetrics);

    return result;
  }
        回收缓存亦是如此,如下:

  @Override
  public boolean evictBlock(BlockCacheKey cacheKey) {
    return lruCache.evictBlock(cacheKey) || l2Cache.evictBlock(cacheKey);
  }

三、InclusiveCombinedBlockCache

        InclusiveCombinedBlockCache是外部缓存的集中体现,它继承自CombinedBlockCache,但是对于缓存及其获取做了特别的声明,如下:

        1、获取缓存时从lruCache中获取,因为启用外部缓存时会同时写入lru和外部缓存,并且,lru有一种机制,即存在victimHandler且!repeat的情况下,会尝试从另外一种缓存中获取;

        2、缓存时则是lruCache和l2Cache同时缓存。

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
打赏
0
0
0
1
23
分享
相关文章
CDH性能优化(参数配置)
NameNode中用于处理RPC调用的线程数,即指定NameNode 的服务器线程的数量。NameNode有一个工作线程池用来处理客户端的远程过程调用及集群守护进程的调用,处理程序数量越多意味着要更大的池来处理来自不同DataNode的并发心跳以及客户端并发的元数据操作)。
507 0
什么是代理ip?代理ip的工作原理?代理ip有哪些类型?
当您在互联网上浏览或访问网站时,您的IP地址是您的设备在网络上的唯一标识。通过IP地址,网站和其他在线服务可以追踪您的位置、活动和访问历史。但是,使用IP代理可以帮助您代理本地IP地址,从而增加您的在线隐私和安全。
什么是代理ip?代理ip的工作原理?代理ip有哪些类型?
【AI 初识】什么是卷积神经网络 (CNN)?
【5月更文挑战第2天】【AI 初识】什么是卷积神经网络 (CNN)?
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
1696 2
SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等