当前位置: 首页 > news >正文

Level DB --- two_level_iterator

two_level_iterator 是 Level DB 中 table核心的迭代器。该迭代器定义了table对于block的读写操作。

two level --- index level & data level

这里面的two level值的是index level 和 data level,对应到class TwoLevelIterator里面是:

IteratorWrapper index_iter_;
IteratorWrapper data_iter_;

为什么要有two level,在Level DB --- TableBuilder-CSDN博客 里面已经介绍过了,一个table里面有若干个data block(每个data block里面存若干个key-value),这若干个data block在整个序列化的数组里面通过index block来定位,如图1所示:

                                                             two level framework

所以迭代器真正要迭代数据,首先现需要迭代index来定位具体到哪一个data block。

核心函数

class TwoLevelIterator,继承了Iterator,所以重载了Iterator的相关虚函数Level DB --- Iterator-CSDN博客,还有一些TwoLevelIterator的辅助函数。

//根据index 当前 Iterator value,找到它对应的data block,并将该data block
//的Iterator 赋值给TwoLevelIterator的成员变量data_iter_
void TwoLevelIterator::InitDataBlock()


//在TwoLevelIterator::InitDataBlock()被调用,赋值TwoLevelIterator的成员变量data_iter_
void TwoLevelIterator::SetDataIterator(Iterator* data_iter) 


//从后至前,找到valid data iterator,这是因为例如像执行Prev(),可能会调到一个
//data iterator 失效的位置
void TwoLevelIterator::SkipEmptyDataBlocksBackward()


//从前至后,找到valid data iterator,这是因为例如像执行Next(),可能会调到一个
//data iterator 失效的位置
void TwoLevelIterator::SkipEmptyDataBlocksForward()


//迭代器向前迭代一个位置
void TwoLevelIterator::Prev()


//迭代器向后迭代一个位置
void TwoLevelIterator::Next()


//最后一个位置,index iterator 退回到最后一位, 同时value iterator 也退回到最后一位
void TwoLevelIterator::SeekToLast()


//第一个位置,index iterator 移到第一个位置, 同时value iterator 也移到第一的位置
void TwoLevelIterator::SeekToFirst() 


//检索特定的key,首先检索index iterator的位置,然后检索value iterator的位置
void TwoLevelIterator::Seek(const Slice& target)


//返回data_iter_ key
Slice TwoLevelIterator::key()


//返回data_iter_ value
Slice TwoLevelIterator::value()

相关文章:

  • win11安装wsl报错:无法解析服务器的名称或地址(启用wsl2)
  • 随机规划场景中的两类目标利润概率模型
  • 如何通过AI让PPT制作更轻松:从AI生成PPT到一键智能生成
  • C++11新特性之final
  • 【Erdas实验教程】007:图像融合(多波段+高光谱)
  • 介绍 Liquibase、Flyway、Talend 和 Apache NiFi:选择适合的工具
  • 故地重游:一眼是曾经,一眼是如今
  • 前端高级面试题
  • cmake Qt Mingw windows构建
  • mount 出现 2038 问题
  • Spring AI集成DeepSeek,实现流式输出
  • 如何使用border-image做大屏公共组件的边框
  • ICLR2022 | SETR | 提高视觉Transformers的对抗迁移性
  • 传统混合专家模型MoE架构详解以及python示例(DeepSeek-V3之基础)
  • VUE3环境搭建
  • ARINC 429详解
  • CentOS 7 企业级Redis 7部署指南
  • Python入门之List(列表)
  • CPU的原理
  • Cherno C++ P54 内存:栈与堆
  • 美国将于6月14日举行阅兵式,美媒报当天是特朗普生日
  • 辛涛任山东第一医科大学副校长,曾为“博士服务团”成员
  • 增诉滥用职权罪,尹锡悦遭韩国检方追加起诉
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 全文丨中华人民共和国传染病防治法
  • “女乘客遭顺风车深夜丢高速服务区”续:滴滴永久封禁两名涉事司机账号