2014-03-06 28 views
0

我已經將1M行數據插入到hbase表中。然後我正在編寫一個java程序來測試基於行鍵的HBase的讀取性能。基於行密鑰的HBase讀取性能

//create a list which contains 10,000 row keys 
for(int i=0; i<10000; i++) 
{ 
    list.add(rowkey); 
} 

//go through the list and check the rowkey exists in HBase or not 
for(int i=0; i<list.size(); i++) 
{ 
    Get g = new Get(list.get(i)); 
    g.setFilter(new KeyOnlyFilter()); 
    Result r = table.get(g); 
    // ... 

} 

rowkey format like like「12345_54321」。在測試我的程序之後,大約需要50秒來加載所有10,000行密鑰來檢查它是否存在,所以每200個/秒。

此讀取性能非常慢,我也將過濾器添加到Get對象中。有沒有其他辦法可以提高以上的表現?或者我的程序有問題?

回答

0

較差的表現主要是因爲您正在進行比較並在每次迭代中發射get,我認爲它很明顯需要一些時間,hbase並非旨在爲您提供實時性能。

0

您可以使用exists()API來執行此操作。這裏有一個例子,希望它有幫助。

 List<Get> gets = new ArrayList<Get>(); 
     for (String rowKey : rowKeys) { 
      Get get = new Get(Bytes.toBytes(rowKey)); 
      gets.add(get); 
     } 

     Set<String> newRows = new HashSet<String>(); 
     Boolean[] results; 
     HTableInterface table = getHTableInterface(tableName); 
     results = table.exists(gets);