我正在使用Java客户端测试hbase中put请求的吞吐量。
我发现了两种方式,Table.put(Put)
/ Table.put(List<Put>)
并对每种方式进行了简单的测试。
他们之间存在巨大差异。
当我对单件物品提出要求时,吞吐量大约在200~300左右。
但是当我第一次将其添加到列表中并批量发送时,吞吐量超过20,000。
我只是使用一个线程来测试公尺本身,但我想知道的是为什么请求每个项目的放置速度太快,因为HBase可以处理的远不止这些。
根据我们的系统要求,对单个项目进行put请求似乎是更合适的方法。但显然我们每秒钟的物品数量会超过数百件。
对此有什么建议吗?以下是我用于测试的代码段:
Table table = conn.getTable(TableName.valueOf("test"));
// put single
for(int i=0;i<logCount;i++){
Put put = new Put(Bytes.toBytes(UUID.randomUUID().toString()));
put.addColumn(Bytes.toBytes("basic"), Bytes.toBytes("name"), Bytes.toBytes("none"));
table.put(put);
}
// put list
for(int i=0;i<logCount;i++){
Put put = new Put(Bytes.toBytes(UUID.randomUUID().toString()));
put.addColumn(Bytes.toBytes("basic"), Bytes.toBytes("name"), Bytes.toBytes("none"));
puts.add(put);
if(puts.size()>1000){
table.put(puts);
puts.clear();
}
}