Column Family-RocksDB源码剖析(1) 发表评论 自从RocksDB 3.0引入支持column family,每个KV数据对能够指定关联唯一的column family(默认为“default”),做到相对独立的隔离存储;column family提供了逻辑上划分数据库的能力,支持跨column family进行原子写操作(借助WriteBatch实现)等。阅读全文
Arena内存管理优化-RocksDB源码剖析(0) 发表评论 相比leveldb,rocksdb对内存块的分配主要做了两点改进:一是抽象出内存分配Allocator,支持对不同内存管理策略进行定制扩展;二是启用HugePage支持,提高大内存机器下内存分配和访问的性能。阅读全文
我所理解的double array trie实现 1条回复 double array trie,字典树(trie)结构的一种高效实现方式,与传统字典树相比,压缩存储更省空间,精巧的状态机设计访问更快速,数组线性存取对缓存也更友好,不足之处主要在于构造(插入)过程中冲突解决稍复杂、缓慢。阅读全文
快照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这部分的实现。阅读全文