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