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内部将相同表名的实例存在一个并行队列中。

转载于:https://www.cnblogs.com/legendary/archive/2012/09/25/2701504.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值