在HBase中使用一行

时间:2012-10-31 09:52:24

标签: hbase

我正在使用HBase通过Java API来管理等待由具有多个线程的scraper进行分析的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中“消耗”一行?

编辑:我忘了提到该表有一个列的单列族

1 个答案:

答案 0 :(得分:0)

您可以尝试使用带过滤器的扫描。我认为PageFilter适合您的目的。