主页 > IT业界  > 

LevelDB---two_level_iterator

LevelDB---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()

标签:

LevelDB---two_level_iterator由讯客互联IT业界栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“LevelDB---two_level_iterator