当前位置: 首页 > 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()

http://www.dtcms.com/a/21452.html

相关文章:

  • 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 内存:栈与堆
  • 深度学习04 数据增强、调整学习率
  • 数据结构 红黑树和set/map
  • Windows环境搭建ES集群
  • DeepSeek-R1 大模型本地部署指南
  • hive:分桶表和分区表的区别, 分桶表,抽样查询
  • 国内智驾主要用的芯片以及对应厂商
  • Linux(ubuntu)下载ollama速度慢解决办法
  • 设计模式:状态模式
  • Visual Studio Code使用ai大模型编成
  • 【Godot4.3】自定义StyleBox