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 で単一の行を「消費」するにはどうすればよいですか?
編集:テーブルには単一の列を持つ単一の列ファミリーがあることを忘れていました