LevelDB
2022-05-05 08:39:16 0 举报
原理图
作者其他创作
大纲/内容
Read op
0-50
level 1
ComPtr当前compaction的下标
...
过滤数据
Data
CRCCRC校验码
1. write log
Max key 1data block i 中最大的key值
offset该data block起始地址在sstable中的偏移量
value
日志格式
301-500
由于在leveldb中,一次更新或者一次删除,采用的是append的方式,并非直接更新原数据。因此对应同样一个key,会有多个版本的数据记录,而最大的sequence number对应的数据记录就是最新的。
Middle
Key:\"name\"
level 2
15-80
sequence number(7 bytes)最大的数据项为最新值
entry number
checkSum
session record
索引数据
manifest
LRU
levelDb 内部存储形式internalKey
Sequel:100
snapshot session record
First
Entry n
Max key ...data block i 中最大的key值
201-300
Base lg(1 byte)表示每2KB的数据,创建一个新的过滤器来存放过滤数据
Data 1
Data n
Snapshot(98)
leveldb并不会为每一对keyvalue对都存储完整的key值,而是存储与上一个 key非共享 的部分,避免了key重复内容的存储
Restart Point 1
length该data block的大小
....
1. find index2. find in data block3. find in the next data block
Index bolck's index
level 0
Value:\"cat\"
batch结构
501-2000
batch data
Meta index bolck's index
Add tables新增哪些sst文件
major compaction
Length
Index blockindex block中用来存储每个data block的索引信息
sequence number
Filter 1 offset第i个filter data在整个filter block中的起始偏移量
2. Write Memory db
current就是记载当前的manifest文件名
Share key length与前一条记录key共享部分的长度
Meta index block用来存储filter block的索引信息
versionNew = versionOld + versionEditversionEdit指代的是基于旧版本的基础上,变化的内容(例如新增或删除了某些sstable文件)。manifest文件就是用来记录这些versionEdit信息的。
valuevalue内容
150-200
LRUNode
Delete
50-100
Full
Filter data 1
Compression Type压缩类型
Sequel:98
value length
Journal Num日志文件编号
type
block1
key length
Max key ndata block i 中最大的key值
Entry 1keyvalue数据
Padding
100-300
Del tables删除哪些sst文件
数据项的格式
Filter offset's offset可以首先读出filter offset's offset的值,然后依次读取filter i offset,根据这些offset分别读出filter data
Footer用来存储meta index block及index block的索引信息
Restart Point length
2. search in immuTable memory db
当0层文件数超过预定的上限(默认为4个);当level i层文件的总大小超过(10 ^ i) MB;当某个文件无效读取的次数过多;
frozen log
日志结构
type(1 byte)更新还是删除
Last
block3
Seq Num操作seqNumber等信息
File System
3. search in level i sstables
0-150
记载了当时leveldb的全量版本信息,其余若干条Session Record仅记录每次更迭的变化情况
2-100
151-300
key -> value结构
Seq Num数据项中最大的sequence number
Unshared key length与前一条记录key不共享部分的长度
101-150
MemTable
Filter Bolck用来存储一些过滤器相关的数据
block2
Entry 2
ukey用户定义的key
每间隔若干个keyvalue对,将为该条记录重新存储一个完整的key。重复该过程(默认间隔值为16),每个重新存储完整key的点称之为Restart point。
因为restart point 保存的是完整的数据,可以通过restart point 来快速定位数据所在的区
Memory
当其容量达到4MB,变为不可更改
Minor compaction就是将内存文件持久化到硬盘
1. search in memory db
Entry 3
0-100
key
value lengthvalue长度
ImmuTableMemTable
Filter n offset
Frezze
Value:\"dog\"
unshared key content与前一条记录key非共享的内容
Maigic
log
Write op
Filter data 2
Restart Point 2
Filter data n
Recent LRUNode
0 条评论
下一页