LevelDB整体架构学习笔记

一、简介

LevelDB是一个可持久化的KV数据库引擎,由Google传奇工程师Jeff Dean和Sanjay Ghemawat开发并开源。

二、设计思路

众所周知,普通机械磁盘的顺序写性能远高于随机写,例如15000转的SAS盘,4000 IO写入,顺序写IOPS 为 200MB/s,而随机写性能只有 1MB/s,相差200倍。LevelDB的设计正是利用了磁盘的这个特性。

LevelDB的数据是存储在磁盘上的,采用 LSM-Tree 结构。LSM-Tree将磁盘的随机写转化为顺序写,从而大大提高了写速度。

为了做到这一点,LSM-Tree的思路是将索引树拆成一大一小两棵树,较小的一颗常驻内存,较大的一颗持久化到磁盘,这一大一小两棵树共同维护一个有序的Key空间。

写入操作,会首先操作内存中的树,随着内存中树的不断变大,会触发与磁盘中树的归并操作,而归并操作本身仅有顺序写。

在这里插入图片描述
上图中,红色区域是要进行归并的数据块,计算出顺序后,会存储到图中下面的磁盘空间,而这种存储方式是追加式的,也就是顺序写入磁盘。

随着数据的不断写入,磁盘中的树会不断膨胀,为了避免每次参与归并的操作的数据量过大,以及优化读操作的考虑

猜你喜欢

转载自blog.csdn.net/shijinghan1126/article/details/109059761
今日推荐