HBase源码分析之memstore的实现及flush处理流程

本文深入剖析了HBase Memstore的实现,包括数据存储在cellSet中,使用MSLAB解决内存碎片问题。详细阐述了flush的触发方式,如手动触发、自动触发(内存大小、全局内存比例等条件)。分析了flush处理流程的prepare、flush和commit三个阶段,以及split和compact的触发条件。最后,讨论了关键配置参数对性能的影响,建议合理配置以平衡读写操作并减少region中的ColumnFamily数量。
摘要由CSDN通过智能技术生成

memstore作为hbase数据写入的核心部分,保障了数据的高效的写入,那其具体是怎么实现的?使用了哪些优化的手段?有哪些关键要素可以控制写入的效率呢?下面我们先来分析一下memstore的实现

memstore中的数据存储

DefaultMemStore.java
// 2个存储数据的集合
volatile CellSkipListSet cellSet;
volatile CellSkipListSet snapshot;

cellSet:写入的数据都会存储在cellSet中,snapshot是在memstore做flush时才用到的,这个我们后续再说
我们先来看往memstore中添加数据的情况

public Pair<Long, Cell> add(Cell cell) {
  Cell toAdd = maybeCloneWithAllocator(cell);
  return new Pair<Long, Cell>(internalAdd(toAdd), toAdd);
}

这里使用到了一个叫MSLAB的机制,这个是用来解决HBase因 Region flush导致的内存碎片问题࿰

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值