hbase memstore

MemStore

为什么需要MemStore

  1. memstore在内存中,提高HBase写性能。
  2. 通过memstore先对keyValue排好序,然后将排好序的keyValue一同刷写。

MemStore内部

KeyValue存放

  MemStore内部使用KeyValueSkipListSet存放KeyValue。KeyValueSkipListSet本质上是一个类似SkipListSet,内部使用ConcurrentSkipListMap实现。

添加KeyValue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
long (final KeyValue kv) {
KeyValue toAdd = maybeCloneWithAllocator(kv);
return internalAdd(toAdd);
}
private long internalAdd(final KeyValue toAdd) {
long s = heapSizeChange(toAdd, addToKVSet(toAdd));
timeRangeTracker.includeTimestamp(toAdd);
this.size.addAndGet(s);
return s;
}
private boolean addToKVSet(KeyValue e) {
boolean b = this.kvset.add(e);
setOldestEditTimeToNow();
return b;
}

MemStore GC优化

MemStore MVCC相关

MemStore flush