Cleanable
# Cleanup cleanup_;
IteratorWapper
- InternalIterator* iter_- bool valid_- Slice key_
LevelFileIteratorState
InternalIterator* NewSecondaryIterator(const Slice& meta_handle)
- TableCache* table_cache_- bool for_compaction_- int level_
BlockBasedTable::BlockEntryIteratorState
+ InternalIterator* NewSecondaryIterator(const Slice& index_value)
- BlockBasedTable* table_
InternalIterator
Iterator
TwoLevelIterator
+ virtual void Seek(const Slice& target)+ virtual void SeekForPrev(const Slice& target)+ virtual void SeekToFirst()+ virtual void SeekToLast()+ virtual void Next()+ virtual void Prev()+ virtual bool Valid() const+ virtual Slice key() const+ virtual Slice value() const+ virtual Status status() const+ virtual void SetPinnedItersMgr(...)+ virtual bool IsKeyPinned() const+ virtual bool IsValuePinned() const- void SaveError(const Status& s)- void SkipEmptyDataBlocksForward()- void SkipEmptyDataBlocksBackward()- void SetSecondLevelIterator(InternalIterator* iter)- void InitDataBlock()
- TwoLevelIteratorState* state_- IteratorWrapper first_level_iter_- IteratorWrapper second_level_iter_- PinnedIteratorsManager* pinned_iters_mgr_- std::string data_block_handle_
某一层的Iterator是一个TwoLevelIterator,包括:1. first_level_iter_是LevelFileNumIterator2. state_是LevelFileIteratorState,调用NewSecondaryIterator可以通过first_level_iter_拿到对应sst文件的Iterator
TableReader
MergeIterator
+ virtual void AddIterator(InternalIterator* iter)+ virtual bool Valid() const+ virtual void SeekToFirst()+ virtual void SeekToLast()+ virtual void Seek(const Slice& target)+ virtual void SeekForPrev(const Slice& target)+ virtual void Next()+ virtual void Prev()+ virtual Slice key() const+ virtual Slice value() const+ virtual Status status() const+ virtual void SetPinnedItersMgr( PinnedIteratorsManager* pinned_iters_mgr)+ virtual bool IsKeyPinned() const+ virtual bool IsValuePinned() const- void ClearHeaps()- void InitMaxHeap()
单个sst文件的Iterator是一个TwoLevelIterator,包含:1. first_level_iter_是(Index)BlockIter2. state_是BlockEntryIteratorState,调用NewSecondaryIterator可以通过first_level_iter_拿到对应的(Data)BlockIter
first_level_iter_: (Index)BlockIter
BlockBaseTable
+ static Status Open(...)+ InternalIterator* NewIterator(...)+ Status Get(...)- static InternalIterator* NewDataBlockIterator(...)- InternalIterator* NewIndexIterator(...)- Status CreateIndexReader(...)- static Status ReadMetaBlock(...)- static FilterBlockReader* ReadFilter(Rep* rep)
first_level_iter_
LevelFileNumIterator
- const LevelFilesBrief* flevel_- uint32_t index_- mutable FileDescriptor current_value_
BlockIter
ArenaWrappedDBIter
+ virtual Arena* GetArena()+ virtual RangeDelAggregator* GetRangeDelAggregator()+ virtual void SetDBIter(DBIter* iter)+ virtual void SetIterUnderDBIter(InternalIterator* iter)
- DBIter* db_iter_- Arena arena_
TwoLevelIteratorState
+ virtual InternalIterator* NewSecondaryIterator(const Slice& handle) = 0
MemTableIterator
MemTableRep::Iterator* iter_
DBIter
- InternalIterator* iter_- PinnedIteratorsManager pinned_iters_mgr_