批量put和单条put

Hbase1.1.5源码:

HTable类:

 @Override
  public void put(final Put put) throws IOException {
    getBufferedMutator().mutate(put);//放入bufferMutator中
    if (autoFlush) {
      flushCommits();
    }
  }

  /**
   * {@inheritDoc}
   * @throws IOException
   */
  @Override
  public void put(final List<Put> puts) throws IOException {
    getBufferedMutator().mutate(puts);放入bufferMutator中
    if (autoFlush) {
      flushCommits();
    }
  }

BufferedMutatorImpl类:

@Override
  public synchronized void mutate(Mutation m) throws InterruptedIOException,
      RetriesExhaustedWithDetailsException {
    doMutate(m);
  }

  @Override
  public synchronized void mutate(List<? extends Mutation> ms) throws InterruptedIOException,
      RetriesExhaustedWithDetailsException {
    for (Mutation m : ms) {
      doMutate(m); //调用单条的mutate方法
    }
  }
private void doMutate(Mutation m) throws InterruptedIOException,
    RetriesExhaustedWithDetailsException {
  if (closed) {
    throw new IllegalStateException("Cannot put when the BufferedMutator is closed.");
  }
  if (!(m instanceof Put) && !(m instanceof Delete)) {
    throw new IllegalArgumentException("Pass a Delete or a Put");
  }

  // This behavior is highly non-intuitive... it does not protect us against
  // 94-incompatible behavior, which is a timing issue because hasError, the below code
  // and setter of hasError are not synchronized. Perhaps it should be removed.
  if (ap.hasError()) {
    writeAsyncBuffer.add(m);
    backgroundFlushCommits(true);
  }

  if (m instanceof Put) {
    validatePut((Put) m);
  }

  currentWriteBufferSize += m.heapSize(); // 计算字节大小,并累加
  writeAsyncBuffer.add(m);

  // 如果当前的数据字节大小大于阈值,则进行commit
  while (currentWriteBufferSize > writeBufferSize) {
    backgroundFlushCommits(false);
  }
}

转载于:https://my.oschina.net/u/1537182/blog/702838

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值