在 HBase 中使用单行
Posted
技术标签:
【中文标题】在 HBase 中使用单行【英文标题】:Consume a single row in HBase 【发布时间】:2012-10-31 09:52:24 【问题描述】:我通过 Java API 使用 HBase 来管理 URL 和参数列表,这些 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】:您可以尝试使用带有过滤器的扫描。我认为PageFilter 适合您的目的。
【讨论】:
这似乎是个好主意,我可以将结果大小限制为 1。不知道,谢谢!以上是关于在 HBase 中使用单行的主要内容,如果未能解决你的问题,请参考以下文章