HBase 2.0引入Accordion(手风琴)算法,旨在提升读写性能,接近内存速度同时保证持久存储。该算法基于LSM树,通过在内存中压缩数据,减少磁盘刷新频率,从而降低写入放大和I/O开销。
HBase中,数据先写入MemStore,刷入磁盘后形成HFile。传统设计下,MemStore容量小,频繁flush影响性能。Accordion将LSM思想应用于内存,通过CompactingMemStore在内存中管理多个segment,自动合并冗余版本,减少HFile生成,提升写入吞吐量,并降低GC压力和读取延迟。
Accordion提供两种压缩级别:
basic(优化所有更新)和eager(适用于高频率更新场景,如队列或计数器,会主动清理冗余数据,但可能增加CPU和GC开销,不建议与MSLAB堆内分配同用)。
配置方式:
在全局或列族级别设置,支持none、basic、eager三种模式,默认basic。
性能测试(YCSB):
Zipf分布下,写入吞吐提升20%,写入放大降低30%,GC降低22%,读延迟降低12%;均匀分布下,写入吞吐提升50%,写入放大降低25%,GC降低36%。
工作原理:
CompactingMemStore将数据分为active segment和不可变segment pipeline,flush时生成快照写盘,同时后台合并segment索引,实现空间高效索引和快速查找。未来版本可能支持自动选择压缩策略,适应动态访问模式。