Leveldb之Iterator总结

看过leveldb代码的同学应该对Iterator这个词不陌生,代码中从基类继承出各种各样的Iterator,满眼看去全是Iterator,前期学习不免眼花缭乱,本篇对这些Iterator进行总结,通过捋清它们之间的关系来绘制出全局的Iterator实现

作用

为什么leveldb需要Iterator呢?我觉得主要用在两个地方:

1. 对外:用在整个DB的迭代,暴露给用户NewIterator接口,方便用户进行整个DB的迭代
2. 对内:用在Compact,需要一个Iterator可以对指定文件集合进行迭代从而完成Compact

全局图

首先给出leveldb中主要Iterator的关系图,这个图是当用户调用NewIterator接口后的过程图,其中虚线方块是调用接口名,实线方块则是各个Iterator了,先粗略看一下,结合下面的讲述,再回过头来看这个图就能有更深的理解:

分类

按照它们的作用,我将它们分成两类,第一类是最底层的Iterator,它们直接和底层的数据结构打交道,在具体的数据结构上完成迭代,本篇称之为底层Iterator,第二类是基于底层封装而来,它们通过对底层Iterator进行封装,来完成符合leveldb特性相关的迭代,本篇称之为封装Iterator

总结

Iterator在leveldb中还是很有分量的,学习它对于更好的理解leveldb及compact实现有很大帮助,本篇是为了描绘各个Itertor关系,对底层迭代器MemtableIteratorBlock::Iter)的实现点到为止,因为他们的实现涉及Memtable,Table及Block的实现,扩展开来又是很大的三块内容,这些以后有时间了再单写几篇来总结吧^^