Hi Recently, I made some performance tests for evaluating DefaultMemstore and CompactintMemstore.
*Performance when using the DefaultMemstore.* [image: image.png] *Performance when using the CompactingMemstore.* [image: image.png] We can see that the latency control of CompactingMemstore (especially the p999) is awesome. P999 < 50ms when enable in-memory compaction, while 50ms < p999 < 100ms when using the default memstore. Besides, other metrics such as qps/p99/avg are amost the same. *Obviously,* *the CompactingMemstore performs better in our test, compared to DefaultMemstore. * So my question is: In HBASE-20188, we've discussed whether setting the CompactingMemstore as the default memstore, while we didn't do that. Is there any other deeper consideration ? Read performance degradation after enable IMC ? stability consideration ? Slower memstore flush compared to branch-1 ? (Actually, I read the comments in HBASE-20188 serveral times, and found the context is quite complex, and did got the points, so create this thread) *BTW, my test env are following:* 5 Nodes : 12*800G SSD / 24 Core / 128GB memory (50G onheap + 50G offheap for each RS, and allocated 36G for BucketCache, used asyncfswal). The offheap 50G was not be used in my 100% put test (maybe parts of them used by Netty), because the MSLAB is still onheap, I configure this because i want to keep the configuration be same as the online cluster. I created a table by following command: hbase(main):001:0> n_splits = 100 hbase(main):002:0> create 'ycsb-test', 'C', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}} and use the workload: table=ycsb-test columnfamily=C recordcount=10000000000 operationcount=10000000000 workload=com.yahoo.ycsb.workloads.CoreWorkload fieldlength=100 fieldcount=1 #clientbuffering=true readallfields=true writeallfields=true readproportion=0 updateproportion=0 scanproportion=0 insertproportion=1.0 requestdistribution=zipfian the key configs of RS: hbase.hregion.memstore.block.multiplier=5 hbase.hregion.memstore.flush.size=268435456 hbase.regionserver.global.memstore.size=0.4 hbase.regionserver.global.memstore.size.lower.limit=0.625 hbase.hregion.compacting.memstore.type=BASIC # NONE in DefaultMemstore. Command to start the ycsb: nohup ./bin/ycsb run hbase20-mdh -P workload -s -threads 120 > hbase20-ssd-put-10000000000-rows 2>&1 &