当为每个项目请求put时,HBase吞吐量非常小

当为每个项目请求put时,HBase吞吐量非常小,hbase,Hbase,我正在使用Java客户端测试hbase中put请求的吞吐量 我找到了两种方法,Table.putPut/Table.putList,并对它们进行了简单的测试 他们之间有着巨大的差异 当我对单个项目发出put请求时,吞吐量大约为200~300 但当我第一次将其添加到列表中并批量发送时,吞吐量超过20000 我只使用了一个线程来测试度量本身,但我想知道的是,当HBase可以处理远不止这些的时候,为什么每个项目的put请求都非常慢 根据我们的系统需求,对单个项目发出put请求似乎更合适。但很明显,我们

我正在使用Java客户端测试hbase中put请求的吞吐量

我找到了两种方法,Table.putPut/Table.putList,并对它们进行了简单的测试

他们之间有着巨大的差异

当我对单个项目发出put请求时,吞吐量大约为200~300

但当我第一次将其添加到列表中并批量发送时,吞吐量超过20000

我只使用了一个线程来测试度量本身,但我想知道的是,当HBase可以处理远不止这些的时候,为什么每个项目的put请求都非常慢

根据我们的系统需求,对单个项目发出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();
        }
    }