使用 hbase 作为键值存储,需要使用 java 提取值
using hbase as key-value store, need to extract a value using java
我正在努力将 Hbase 用作键值存储,其中我们有一个具有一个单一值的列族。 java 过滤器在不到一秒的时间内获取该行,但在尝试检索该值时需要 15 秒。如果有人可以研究它并给我指点,那将非常有帮助。这是代码:-
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();
如果您知道密钥的确切值,则无需进行扫描,您可以进行 Get 代替,这应该非常高效。
Result result = table.get(Bytes.toBytes("hashvalue"))
触发 next
时花费太长时间的原因是因为每次调用 next
本身就是一个 RPC
调用(到 HBase
的行程) ,您可以使用 setCaching 在一次前往 HBase
.
的行程中获取一定数量的行
我正在努力将 Hbase 用作键值存储,其中我们有一个具有一个单一值的列族。 java 过滤器在不到一秒的时间内获取该行,但在尝试检索该值时需要 15 秒。如果有人可以研究它并给我指点,那将非常有帮助。这是代码:-
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();
如果您知道密钥的确切值,则无需进行扫描,您可以进行 Get 代替,这应该非常高效。
Result result = table.get(Bytes.toBytes("hashvalue"))
触发 next
时花费太长时间的原因是因为每次调用 next
本身就是一个 RPC
调用(到 HBase
的行程) ,您可以使用 setCaching 在一次前往 HBase
.