07-leveldb性能优化(一)

1-Compaction:清除冗余数据,减少磁盘IO

Compaction为什么能提升查询性能,我们从leveldb的原理说起。
image
如图所示,数据写入leveldb的过程如下:

  1. 数据写入Memtable
  2. Memtable达到一定大小后变为Immutable Memtable
  3. Immutable Memtable通过Minor Compaction写入0层SSTable

数据读取流程如下:

  1. 从Memtable中查询;
  2. 从Immutable Memtable中查询;
  3. 遍历level 0所有文件,若未查找到,进入下一层查找
  4. 若未查找到,继续往下一层查询,直到查到为止或返回not found

由上述读取的流程可知,如果在level 0至level n中存在较多冗余数据,则会导致查询较多的文件,即进行多次无效的IO操作。而Compaction正是清理冗余数据的主要过程。leveldb中内置了多种compaction触发策略:

  1. 当每层文件数或文件大小达到阈值后,触发向下一层的compaction
  2. 当某个文件被查找但未找到目标值的次数达到1024次后,该文件被触发compaction

同时,我们也可以依据自己业务的特点,制定合适的触发策略。例如在业务低峰期触发,或者针对含有大量删除的范围进行compact,来及时清除冗余数据࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值