zoukankan      html  css  js  c++  java
  • 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内部将相同表名的实例存在一个并行队列中。

  • 相关阅读:
    C# 从服务器下载文件
    不能使用联机NuGet 程序包
    NPOI之Excel——合并单元格、设置样式、输入公式
    jquery hover事件中 fadeIn和fadeOut 效果不能及时停止
    UVA 10519 !! Really Strange !!
    UVA 10359 Tiling
    UVA 10940 Throwing cards away II
    UVA 10079 Pizze Cutting
    UVA 763 Fibinary Numbers
    UVA 10229 Modular Fibonacci
  • 原文地址:https://www.cnblogs.com/legendary/p/2701504.html
Copyright © 2011-2022 走看看