Jaki jest prawidłowy wzorzec użycia HTablePool? Mam na myśli, załóżmy, że mam swoje DAO, które jest inicjowane z instancją HTablePool. To DAO jest instancją członkowską bezstanowego ziarna sesji, więc jest ponownie używane między wywołaniami.

Jakie jest prawidłowe użycie między następującymi?

private HTableInterface aTable;

public XYZDAO(final HTablePool pool)
{
    this.aTable = pool.getTable(...);
}

public void doSomething(...)
{
    aTable.get(...)
}

Lub HTablePool powinien być używany jak źródło danych i dlatego bardziej odpowiednie jest użycie takie jak to

private HTablePool datasource;

public XYZDAO(final HTablePool pool)
{
    this.datasource = pool;
}

public void doSomething(...)
{
    HTableInterface aTable = datasource.getTable(...);
    aTable.get(...);
    aTable.close();
}
5
Andrea 30 sierpień 2012, 10:09

1 odpowiedź

Najlepsza odpowiedź

Drugie podejście jest najlepsze, powinieneś używać HTablePool tak, jakby to był Datasource, ponieważ klasa HTable nie jest bezpieczna wątkowo. Wywołanie metody close HTableInterface automatycznie zwróci tabelę do puli.

Zauważ, że istnieje interfejs HConnection, który zastępuje przestarzały HTablePool w nowszych wersjach HBase.

5
Jean-Philippe Bond 12 lipiec 2014, 18:18