Skip to content

Latest commit

 

History

History
14 lines (13 loc) · 833 Bytes

09.Range-Delete.md

File metadata and controls

14 lines (13 loc) · 833 Bytes

范围删除

很多情况下我们需要删除某一范围的大量key,删除这些键的标准方法是遍历所有键,并逐个向它们发出Delete(),这种方法适用于需要删除的键数量不多的情况。 迭代删除的缺点:

  • 数据占用的空间不会立即被回收,只能被动等待压缩来清理数据。
  • 大量的标记删除数据会减慢迭代器的速度。

解决方案:

  • 用DeleteFilesInRange()删除范围内的SST文件
  • 用CompactRange()过滤性压缩标记删除key
一般都是DeleteFilesInRange()+CompactRange()两者结合使用,但是CompactRange比较昂贵,有两种方式可以优化:
(1) 如果你从未覆盖现有键,你可以尝试使用DB::SingleDelete()
(2) 使用NewCompactOnDeletionCollectorFactory()在有大量标记删除时加速Compaction