RocksDB读流程

       简而言之,在RocksDB中的读取需要处理的最核心的一个问题就是如何读取最新的数据,这是由于RocksDB是基于LSM,因此在RocksDB中,对于数据的delete以及update,它并不会立即去执行对应的动作,而只是插入一条新的数据,而数据的最终更新(last-write-win)以及删除是在compact的时候来做的.

       其实最那就是如何读取到一个数据的最新版本,因此首先我们需要知道在RocksDB中,多个版本的数据是如何保存的。首先我们需要知道在RocksDB中,数据是保存在两个地方,一个是memtable(内存),一个是sstable(磁盘),因此RocksDB读取数据也是依次从这两个地方读取.

   1. memtable.

      在RocksDB中memtable的默认实现是skiplist,RocksDB会将用户传入的key改变为memtable内部的key(user_key+seq+type),然后再加上用户传入的value之后,作为一个element加入到skiplist.因此我们读取的时候需要读取到最新的那条数据.

        skiplist跳表结构,可以方便快速查询key;

        seq方便找到最新的数据;

        type记录了数据状态(插入、删除、merge);

问题:已被删除的key,在数据库中能否找到,还是状态被标记为Delete;

    2. sstable.

         在RocksDB中,除去level0之外的sstable是保证不会overlap,因此在这些sstable中,只要get到值,那么就可以进入下一个level了,而在level0中则需要读取所有的sstable

        除了Level0,其他底层Level,每个sstable块的索引是不交叉的,不重叠;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值