包含标签 LevelDB 的文章

LevelDB源码解析(12) Memtable落盘

背景 LevelDB源码解析(4) MemTable介绍了Memtable,LevelDB会先把key-value插入到MemTable中。如果MemTable写满了,就会新建一个MemTable进行写入。旧的Memtablex会落盘。一个Memtable会产……

阅读全文

LevelDB源码解析(11) SST文件结构

背景 前面我们逐渐深入的介绍了LevelDB从插入key-value到落盘的整个过程,感兴趣的读者可以移步相关文章: LevelDB源码解析(4) MemTable LevelDB源码解析(5) WriteBatch LevelDB源码解析(6) 写任务(WriterBatch)合并 LevelDB源码……

阅读全文

LevelDB源码解析(9) FilterBlockBuilder

背景 Filter block为SST中一个区块,filter block由多个filter组成,每个data block对应一个filter(但是一个filter可能对应多个data block)。LevelDB在进入data block中查找前会先检查filter,如果fi……

阅读全文

LevelDB源码解析(8) BlockBuilder

背景 一个SST文件由5个区块组成,其中三个区块都是由BlockBuilder构建的,所以在讲SST文件的构建之前,先讲一下BlockBuilder。BlockBuilder接受一组key-value,将其序列化到buffer中,buffer的数据就是要写入……

阅读全文

LevelDB源码解析(7) 预写日志(WAL)

背景 LevelDB每次写key-value不会直接写到文件中,而是先暂存在Memtable中,Memtable写满后再写到文件中。如果发生故障(比如宕机),保存在Memtable中的key-value就会全部丢失。所以为了保证数据的原子性和持久性,每次写k……

阅读全文

LevelDB源码解析(6) 写任务(WriterBatch)合并

背景 写任务合并是由函数BuildBatchGroup来完成的,BuildBatchGroup会把任务队列writers_中若干个Writer的数据合并到一起,从而减少磁盘写次数,提高写性能。虽然每次写入的时候是往Memtable里写,但是为了在故障发生时保……

阅读全文

LevelDB源码解析(5) WriteBatch

简介 LevelDB的官方注释是这么介绍WriteBatch的: WriteBatch holds a collection of updates to apply atomically to a DB 如何保证原子性可能需要看完对WriteBatch的使用才能理清楚,这里只能确定一个WriteBatch对象可以包含多条更新记录(插入/删除),支持批量写入。 WriteBa……

阅读全文

LevelDB源码解析(4) MemTable

简介 MemTable是LevelDB在内存中的缓存库。用户写入数据时,LevelDB会先把数据写入到MemTable中。如果MemTable写满了,就会新建一个MemTable进行写入。后台再异步把旧的MemTable压缩写到磁盘上。因为旧的MemTabl……

阅读全文

LevelDB源码解析(3) 变长编码

背景 LevelDB在内存中存储key、value时,最后是以单值形式存储到一个跳跃表中的,跳跃表我们在上一篇文章LevelDB源码解析之SkipList(跳跃表)聊过了。这里主要想谈一下,LevelDB是如何把key、value编码到一个单值里面的,顺带分……

阅读全文