LevelDB 学习笔记2:合并

Python微信订餐小程序课程视频

https://blog.csdn.net/m0_56069948/article/details/122285951

Python实战量化交易理财系统

https://blog.csdn.net/m0_56069948/article/details/122285941

LevelDB 学习笔记2:合并

部分图片来自 RocksDB 文档

LevelDB 中会发生两种不同的合并行为,分别称为 minor compaction 和 major compaction

Minor Compaction

将内存数据库刷到硬盘的过程称为 minor compaction

  • 产出的 L0 层的 sstable
    • 事实上,LevelDB 不一定会将 minor compaction 产生的 sstable 放到 L0 里
  • L0 层的 sstable 可能存在 overlap
  • 如果上一次产生的 imm memtable 还没能刷盘,而新的 memtable 已写满,写入线程必须等待到 minor compaction 完成才能继续写入
    • 只允许同时存在一个 imm memtable

Minor Compaction 的流程

主要流程在 CompactMemTable()

  • 借助工具类 TableBuilder 构建 sstable 文件
    • BuildTable()
  • 选择将这个产生的 sstable 文件放到哪一层去
    • PickLevelForMemTableOutput()
    • 如果某个 sstable 文件和 L0 层没有重叠部分,就可以考虑将它扔到后面的层级里
    • 如果满足
      • 和 level + 1 层不重叠
      • 且不要和 level+ 2 有太多的重叠部分
    • 我们就可以将它扔到 level + 1 层去
    • 我们希望它能放到第二层去
      • 这样可以避免 0 -> 1 层合并的巨大 I/O 开销
    • 但我们不希望它直接扔到最后一层,这样可能带来带来的问题是
      • 如果某个 key 被重复改写,可能带来磁盘空间的浪费
      • 比如你写到 L7 中,然后再改写它时可能又在 L6 里写了一份副本,以此类推,可能每一层里都有这个 key 的副本
    • 最高可以放到 config::kMaxMemCompactLevel(默认为 2)层里去
  • 提交版本修改
    • 增加新的 sstable 文件
  • 删除 imm memtable 的日志文件

Major Compaction

  • L0 层的记录有 overlap,搜索的时候可能要遍历所有的 L0 级文件
    • 当 L0 层文件数量到达阈值(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值