快照Snapshot-leveldb源码剖析(14) 发表评论 leveldb基于SequenceNumber实现了快照,做到读写隔离,数据库不断写入新数据的同时,仍然可以通过快照读取到旧数据;另一方面,多线程并发访问情况下也无需采取额外的同步措施就可做到安全的访问。阅读全文
版本控制VersionEdit-leveldb源码剖析(13) 发表评论 每做一次Compaction就会在当前版本的基础上生成新的版本,代表当前数据库内存数据和磁盘文件的存活状态,版本的变化以VersionEdit增量的形式写入MANIFEST文件,数据库恢复时也基于此进行重建。阅读全文
DB写Put-leveldb源码剖析(12) 发表评论 写操作会封装成WriteBatch,然后再写MemTable,为防止过量写影响读的效率,会有一定策略来限制写,本篇将分析具体调用流程及详细实现。阅读全文
DB读Get-leveldb源码剖析(11) 发表评论 读操作基于user_key可以找到当前最大SequenceNumber的数据,也支持获取指定快照的数据,本篇将分析具体调用流程及详细实现。阅读全文
SSTable之Compaction下篇-leveldb源码剖析(10) 发表评论 因Compaction的实现细节比较繁琐,故分为两部分进行源码剖析,本篇为下篇,主讲compaction的实际work及后续工作。阅读全文
SSTable之Compaction上篇-leveldb源码剖析(9) 1条回复 Compaction操作是以后台线程的形式进行,本部分主要讨论触发机制、合并策略以及详细流程等。本篇为上篇,主讲触发机制,minor compaction,人工和自动触发合并的前期准备工作等。阅读全文
SSTable之两级Cache-leveldb源码剖析(8) 发表评论 两级Cache,即TableCache和BlockCache,前者用于缓存SSTable的对应索引元数据,后者用于缓存文件block数据块。本篇主要分析key查找在MemTable(包括mem和imm)均未命中后续的查找过程,主要是Cache这部分的实现。阅读全文
SSTable之文件格式及生成-leveldb源码剖析(7) 发表评论 SSTable文件的生成时机,一是在将Immutable Memtable的内存数据flush落盘时,二是在做major compaction合并文件时,两者实际均通过封装的TableBuilder完成,本文仅讨论SSTable的文件格式,以及TableBuilder(包含BlockBuilder、FilterBlockBuilder)的运行过程。阅读全文
SSTable之overview-leveldb源码剖析(6) 发表评论 SSTable全称sorted string table,是不可修改且持久化到磁盘的文件,将Immutable Memtable的内存数据flush到磁盘或相邻层的数据compaction机制等生成,可以多线程环境下被安全的访问而无需任何额外的同步措施。阅读全文
文件系统及Env-leveldb源码剖析(5) 发表评论 为方便不同平台移植或定制需求的开发,leveldb定义了平台无关的运行环境、文件系统、多线程等基础接口,封装于Env类中,并提供了默认的符合posix语义的派生类实现(PosixEnv),用户可根据需要选择或定制实现。阅读全文