很多情况下我们需要删除某一范围的大量key,删除这些键的标准方法是遍历所有键,并逐个向它们发出Delete(),这种方法适用于需要删除的键数量不多的情况。 迭代删除的缺点:
- 数据占用的空间不会立即被回收,只能被动等待压缩来清理数据。
- 大量的标记删除数据会减慢迭代器的速度。
解决方案:
- 用DeleteFilesInRange()删除范围内的SST文件
- 用CompactRange()过滤性压缩标记删除key
一般都是DeleteFilesInRange()+CompactRange()两者结合使用,但是CompactRange比较昂贵,有两种方式可以优化:
(1) 如果你从未覆盖现有键,你可以尝试使用DB::SingleDelete()
(2) 使用NewCompactOnDeletionCollectorFactory()在有大量标记删除时加速Compaction