LevelDB整体架构分析

LevelDB整体架构分析

1.   整体架构
      Leveldb是一种基于operation log的文件系统,是Log-Structured-Merge Tree的典型实现。LSM源自Ousterhout和Rosenblum在1991年发表的经典论文<<The Design and Implementation of a Log-Structured File System >>。

LevelDB整体架构分析_第1张图片
2.   简要分析

       从图中可以看出构成LevelDb静态结构的包括六个主要部分内存中的MemTableImmutable MemTable以及磁盘上的几种主要文件Current文件Manifest文件log文件以及SSTable文件当然LevelDb除了这六个主要部分还有一些辅助的文件但是以上六个文件和数据结构是LevelDb的主体构成元素

      LevelDbLog文件和MemtableBigtable论文中介绍的是一致的当应用写入一条Key:Value记录的时候LevelDb会先往log文件里写入成功后将记录插进Memtable这样基本就算完成了写入操作因为一次写入操作只涉及一次磁盘顺序写和一次内存写入所以这是为何说LevelDb写入速度极快的主要原因

      Log文件在系统中的作用主要是用于系统崩溃恢复而不丢失数据假如没有Log文件因为写入的记录刚开始是保存在内存中的此时如果系统崩溃内存中的数据还没有来得及Dump到磁盘所以会丢失数据Redis就存在这个问题)。为了避免这种情况LevelDb在写入内存前先将操作记录到Log文件中然后再记入内存中这样即使系统崩溃也可以从Log文件中恢复内存中的Memtable,不会造成数据的丢失

      当Memtable插入的数据占用内存到了一个界限后需要将内存的记录导出到外存文件中LevleDb会生成新的Log文件和Memtable,原先的Memtable就成为Immutable Memtable,顾名思义就是说这个Memtable的内容是不可更改的只能读不能写入或者删除新到来的数据被记入新的Log文件和Memtable,LevelDb后台调度会将Immutable Memtable的数据导出到磁盘形成一个新的SSTable文件SSTable就是由内存中的数据不断导出并进行Compaction操作后形成的而且SSTable的所有文件是一种层级结构第一层为Level 0,第二层为Level 1,依次类推层级逐渐增高这也是为何称之为LevelDb的原因

      SSTable中的文件是Key有序的就是说在文件中小key记录排在大Key记录之前各个LevelSSTable都是如此但是这里需要注意的一点是Level 0SSTable文件后缀为.sst)和其它Level的文件相比有特殊性这个层级内的.sst文件两个文件可能存在key重叠比如有两个level 0sst文件文件A和文件B,文件Akey范围是:{bar, car},文件BKey范围是{blue,samecity},那么很可能两个文件都存在key=”blood”的记录对于其它LevelSSTable文件来说则不会出现同一层级内.sst文件的key重叠现象就是说Level L中任意两个.sst文件那么可以保证它们的key值是不会重叠的这点需要特别注意后面您会看到很多操作的差异都是由于这个原因造成的

      SSTable中的某个文件属于特定层级而且其存储的记录是key有序的那么必然有文件中的最小key和最大key,这是非常重要的信息LevelDb应该记下这些信息Manifest就是干这个的它记载了SSTable各个文件的管理信息比如属于哪个Level,文件名称叫啥最小key和最大key各自是多少

      Current文件是干什么的呢这个文件的内容只有一个信息就是记载当前的manifest文件名因为在LevleDb的运行过程中随着Compaction的进行SSTable文件会发生变化会有新的文件产生老的文件被废弃Manifest也会跟着反映这种变化此时往往会新生成Manifest文件来记载这种变化Current则用来指出哪个Manifest文件才是我们关心的那个Manifest文件

     具体参见:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

你可能感兴趣的:(LevelDB整体架构分析)