• HTablePool的实现方法


    (一)HTablePool介绍


      HTablePool是HBase API中的重要类,可以通过HTablePool的getTable(String tableName)方法获得相应的HTable对象实体,用于进行对HBase表的增删改成等操作。一般情况下,客户端通过new 的方式来创建和销毁HTable的操作相对有较大的开销,而是用HTablePool方法创建的HTable则可以在jvm进程的生命周期内循环使用,以降低开销。

    (二)HTablePool的原理

      如果对某表的操作仅执行一次或连续执行的时间较短,则使用new的方法和使用HTablePool的getTable()方法的开销基本无区别,但是对于在JVM长期执行的程序(如web服务器会在长时间内多次频繁的对HBase的表进行操作),使用new创建的htable则会进行频繁的创建和销毁,而每次HTable对象在创建时需要配置大量的选项并存入自带的configuration对象中,另外每个HTable还自带一个线程池用以进行多线程操作,综合来看,使用HTablePool将大大节省时间和类的加载效率。

      下面介绍一下HTablePool如何存储和使用HTable实例:

      在HTablePool中有几个成员变量,分别是PoolMap tables (用于按照表名存放HTable实例)、int maxSize(限制PoolMap中每个表存放实例的数目)、PoolType pooltype(类型,表示存放在PoolMap中的HTable如何使用:Reusable, ThreadLocal, RoundRobin;)在 getHtable(表名) 时,先查询PoolMap中是否有该表的实例,若有则从Map中取出,若没有,新建一个HTable实例,并使用一个HTable的继承类包装一下(之所以包装是因为在HTable close方法中需要归还实例到HTablePool)。

      PoolMap类:内置了一个currentHashMap<K,Pool<V>>,实现Map接口,自行实现了Map的put及get方法。,Pool是接口,按照PoolType分成三个子类,分别使用使用creatPool方法创建,常用的实例类是ReusablePool类,该类继承了ConcurrentLinkedQueue类,因此,每个HTable首先按照表名存入一个PoolMap的value中,PoolMap内部将相同表名的实例存在一个并行队列中。

  • 相关阅读:
    一个粗心造成的死循环
    LinearGradientBrush使用
    一个需求引发的关于平板电脑的思考
    开发照片采集系统中的问题总结
    List<T>的Add方法等
    开发相机拍照组件中需要解决的问题,一月回顾
    ShowDialog使用
    使用ActiveSyn,让WINMBILE的PDA连接WIN2003的杂牌蓝牙
    Jenkins安装教程
    Jmeter连接数据库
  • 原文地址:https://www.cnblogs.com/legendary/p/2701504.html
Copyright © 2020-2023  润新知