2012-10-31 45 views
0

我通過Java API使用HBase來管理等待由具有多個線程的刮刀分析的URL和參數列表。該程序還不斷向表中添加新行。在HBase中佔用一行

我需要從表中不斷讀取一行,並自動刪除它(一行不能同時被兩個線程讀取),而不需要選擇一行而不是另一行。

目前,我創建了一個掃描儀和檢索的第一個結果:

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中的單行?

編輯:我忘了提的是,表中有一列家族與單個列

回答

0

您可以嘗試使用帶有過濾器進行掃描。我認爲PageFilter是適合你的目的。

+0

這似乎是一個好主意,我可以將結果大小限制爲1個。不知道,謝謝! – Jacopofar