LevelDB:整体架构

整体架构

LevelDB 整体架构.png

上图简单展示了 LevelDB 的整体架构。LevelDB 的静态结构主要由六个部分组成:

  1. MemTable:内存数据结构,具体实现是 SkipList。 接受用户的读写请求,新的数据修改会首先在这里写入。
  2. Immutable MemTable:当 MemTable 的大小达到设定的阈值时,会变成 Immutable MemTable,只接受读操作,不再接受写操作,后续由后台线程 Flush 到磁盘上。
  3. SST Files:Sorted String Table Files,磁盘数据存储文件。分为 Level0 到 LevelN 多层,每一层包含多个 SST 文件,文件内数据有序。Level0 直接由 Immutable Memtable Flush 得到,其它每一层的数据由上一层进行 Compaction 得到。
  4. Manifest Files:Manifest 文件中记录 SST 文件在不同 Level 的分布,单个 SST 文件的最大、最小 key,以及其他一些 LevelDB 需要的元信息。由于 LevelDB 支持 snapshot,需要维护多版本,因此可能同时存在多个 Manifest 文件。
  5. Current File:由于 Manifest 文件可能存在多个,Current 记录的是当前的 Manifest 文件名。
  6. Log Files (WAL):用于防止 MemTable 丢数据的日志文件。

粗箭头表示写入数据的流动方向:

  1. 先写入 MemTable。
  2. MemTable 的大小达到设定阈值的时候,转换成 Immutable MemTable。
  3. Immutable Table 由后台线程异步 Flush 到磁盘上,成为 Level0 上的一个 sst 文件。
  4. 在某些条件下,会触发后台线程对 Level0 ~ LevelN 的文件进行 Compaction。

读操作的流动方向和写操作类似:

  1. 读 MemTable,如果存在,返回。
  2. 读 Immutable MemTable,如果存在,返回。
  3. 按顺序读 Level0 ~ Leveln,如果存在,返回。
  4. 返回不存在。

参考文档

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木宛城主

SharePoint自动化部署,利用SPSD工具包

目录 怎样使用SPSD 配置Environment XML文件 PowerShell激活Feature  上篇博客讲了利用PowerShell导出、导入AD...

2389
来自专栏岑玉海

Hbase 学习(四) hbase客户端设置缓存优化查询

我们在用hbase的api对hbase进行scan操作的时候,可以设置caching和batch来提交查询效率,那它们之间的关系是啥样的呢,我们又应该如何去设...

57110
来自专栏大数据挖掘DT机器学习

用Python调用百度OCR接口实例

本文主要针对Python开发者,描述百度文字识别接口服务的相关技术内容。OCR接口提供了自然场景下整图文字检测、定位、识别等功能。文字识别的结果可以用于翻译、搜...

9195
来自专栏Java成神之路

hadoop_学习_00_资源帖

2.Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0

862
来自专栏V站

Knowledge丨WordPress数据库文件分析

折腾WordPress必须要有很厚的基础才行,深入更是要小心。西顾再次mark下来知更鸟的文章,做下笔记。想研究模板,可review下前文《Skill丨Word...

2254
来自专栏计算机视觉life

OpenCV学习入门(二):Image Watch神器

Image Watch是在visual studio 2012及以上版本上使用的一款OpenCV工具,能够在调试过程中实时显示内存中矩阵Mat(存放图像,数组等...

2215
来自专栏人工智能LeadAI

在NVIDIA Jetson TX2上安装TensorFlow

刷机的目的是把Ubuntu操作系统和JetPack SDK安装到Jetson TX2上。刷机的操作按照官方教程即可,比较容易。这个过程中有一点需要注意:Jets...

3492
来自专栏白老大的专栏

腾讯云 Redis 集群版配置管理揭秘 ( 上 )

腾讯云 Redis(CRS)集群版已经有数千用户,售出数十 T 容量,那么 CRS 是如何做配置管理的呢?通用的集群系统都需要做配置管理分发,成员健康度检查,希...

1.3K1
来自专栏Python

Django admin 一些有用的设置

Django自带的后台管理是Django明显特色之一,可以让我们快速便捷管理数据。后台管理可以在各个app的admin.py文件中进行控制。以下是我最近摸索总结...

5527
来自专栏性能与架构

数据表水平拆分

水平拆分就是把一张大表的内容拆分到不同数据表中,来提升数据库的性能 1张表 -> N张表 ? 拆分是根据路由算法来决定 常用的路由算法:哈希值取模 例如 ...

3558

扫码关注云+社区

领取腾讯云代金券