我正在通过 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 中“使用”单行?
编辑:我忘了提到该表有一个单列族