2015-03-13 6 views
0

Я работаю над использованием Hbase в качестве хранилища ключевого значения, где у нас есть семейство столбцов с одним единственным значением. Фильтр java получает строку менее чем за секунду, но при попытке получить значение занимает 15 секунд. Если бы кто-то мог заглянуть в нее и дать мне указатель, это было бы очень полезно. Вот код: -используя hbase в качестве хранилища ключей, нужно извлечь значение с помощью java

 Scan scan1 = new Scan(); 
     scan1.addColumn(Bytes.toBytes("column_family"), Bytes.toBytes("column_name")); 
     Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL, 
      new BinaryComparator(Bytes.toBytes("hashvalue"))); 
     scan1.setFilter(filter1); 
     long startTime = System.nanoTime(); 
     ResultScanner scanner1 = table.getScanner(scan1); 
     System.out.println(scanner1.next().getColumnLatestCell(Bytes.toBytes("column_family"), Bytes.toBytes("column_name")));    
     long endTime = System.nanoTime(); 
     double seconds = (double)(endTime - startTime)/1000000000.0; 
     System.out.println("Scan with row key using scan: " + seconds);    
     scanner1.close(); 

ответ

1

Вам не нужно делать проверку, если вы знаете точное значение ключа, вы можете сделать Get вместо этого, который должен быть супер эффективным.

Result result = table.get(Bytes.toBytes("hashvalue")) 

Причина, почему это занимает слишком много времени, когда вы вызываете next потому, что каждый вызов next является RPC вызова (поездка в HBase) сам по себе, вы можете использовать setCaching, чтобы получить определенное количество строк в однократное путешествие до HBase.