使用HBase中的一行

使用HBase中的一行,hbase,Hbase,我通过JavaAPI使用HBase来管理URL和参数的列表,这些URL和参数等待多线程的刮板来分析。程序还不断向表中添加新行 我需要连续地从表中读取一行,并且只读取一行,然后原子地删除它(一行不能由两个线程同时读取),而无需选择一行而不是另一行的条件 目前,我创建了一个扫描仪并检索第一个结果: Scan s = new Scan(); ss = t.getScanner(s); for(Result r:ss){ String ris=Bytes.toString(r.getRow())+B

我通过JavaAPI使用HBase来管理URL和参数的列表,这些URL和参数等待多线程的刮板来分析。程序还不断向表中添加新行

我需要连续地从表中读取一行,并且只读取一行,然后原子地删除它(一行不能由两个线程同时读取),而无需选择一行而不是另一行的条件

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

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。我不知道,谢谢!