0

Java API を介して HBase を使用して、複数のスレッドを持つスクレイパーによる分析を待っている URL とパラメーターのリストを管理しています。また、プログラムは新しい行を継続的にテーブルに追加します。

テーブルから 1 つの行だけを継続的に読み取り、それをアトミックに削除する必要があります (行を 2 つのスレッドが同時に読み取ることはできません)。

現在、スキャナーを作成し、最初の結果を取得します。

Scan s = new Scan();
ss = t.getScanner(s);
for(Result r:ss){
  String ris=Bytes.toString(r.getRow())+Bytes.toString(r.getValue(Bytes.toBytes("TTL"),Bytes.toBytes("value")));
  //delete the retrieved row
  t.delete(new Delete(r.getRow()));
  ss.close();
  //return at the first iteration, after closing the Scanner
  return ris;
}

しかし、このプログラムは非常に遅く (つまり、値を取得するのに 10 秒以上かかる)、うまく処理する方法がわかりません。HBase で単一の行を「消費」するにはどうすればよいですか?

編集:テーブルには単一の列を持つ単一の列ファミリーがあることを忘れていました

4

1 に答える 1

0

フィルターを使用してスキャンを試すことができます。PageFilterはあなたの目的に適していると思います。

于 2012-10-31T23:47:36.690 に答える