0

我正在通过 Java API 使用 HBase 来管理等待由具有多个线程的刮板分析的 URL 和参数列表。该程序还不断向表中添加新行。

我需要从表中连续读取一行并且仅读取一行并以原子方式删除它(两个线程不能同时读取一行),没有选择一行而不是另一行的标准。

目前,我创建了一个 Scanner 并检索了第一个结果:

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 回答