HTablePool 的正确使用模式是什么?我的意思是,假设我有一个用 HTablePool 实例初始化的 DAO。此 DAO 是无状态 session Bean 的成员实例,因此它在调用之间被重用。
下面的正确用法是什么?
private HTableInterface aTable;
public XYZDAO(final HTablePool pool)
{
this.aTable = pool.getTable(...);
}
public void doSomething(...)
{
aTable.get(...)
}
或 HTablePool 应该像数据源一样使用,因此更适合这样的用法
private HTablePool datasource;
public XYZDAO(final HTablePool pool)
{
this.datasource = pool;
}
public void doSomething(...)
{
HTableInterface aTable = datasource.getTable(...);
aTable.get(...);
aTable.close();
}
最佳答案
第二种方法是最好的,你应该使用 HTablePool
就像是 Datasource
自从HTable
类不是线程安全的。调用close
HTableInterface
的方法将自动将表返回到池中。
注意有HConnection
替换已弃用的 HTablePool
的接口(interface)在较新的 HBase 版本中。
关于connection-pooling - HBase HTablePool : correct usage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190826/