Hbase批量处理操作batch

    在Hbase中,许多基于列表的操作,如delete(List<Delete> deletes)和get(List<Get> gets),都是基于batch()方法实现的,它们都是为了方便用户使用而对batch()方法进行了包装。下面是Hbase1.3.0中提供的batch()方法的签名:

void batch(final List<? extends Row> actions,final Object[] results)throws InterruptedException,IOException;

Object[] batch(final List<? extends Row> actions)throws InterruptedException,IOException;

    事实上,在Hbase1.3.0 API中,上面两个方法其实只是一个方法,其实现如下所示:

@Override
public void batch(final List<? extends Row> actions,final Object[] results)throws InterruptedException, IOException {
    AsyncRequestFuture ars = multiAp.submitAll(pool, tableName, actions, null, results);
    ars.waitUntilDone();
    if (ars.hasError()) {
        throw ars.getErrors();
    }
}



@Override
public Object[] batch(final List<? extends Row> actions)throws InterruptedException, IOException {
    Object[] results = new Object[actions.size()];
    batch(actions, results);
    return results;
}

    从上面的实现可以看出batch(fianl List<? extends Row> actions)方法是对batch(List<? extends Row> actions,final Object[] results)的进一步包装。

    为了安全起见,不应该将针对同一行的Put和Delete操作放在同一批次处理请求中,为了保证最好的性能,这些操作处理的顺序可能不同,但是这样会产生不可预知的结果。还有一个需要注意的是,当使用batch()功能执行批量put操作时,Put实例不会被写入到客户端缓冲区中,batch()请求是同步的,会把操作直接发往服务器。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,754评论 18 399
  • http://blog.csdn.net/fengzheku/article/details/48447791 p...
    木子Qing阅读 2,562评论 1 1
  • 又是一年南京大屠杀的纪念日,半个多世纪前,中国的南京正经历着人类历史上令人发指的南京大屠杀,这是空前的,更将是...
    狂尽天下阅读 158评论 0 0