本文讨论了LevelDB 1.23的架构及其与RocksDB的差异,重点介绍了DBImpl的核心成员、读写路径、后台任务处理以及SST文件与MANIFEST的语义。LevelDB设计简洁,但存在单线程压缩和无列族等限制,这促使了RocksDB的开发,以满足更高的并发和多租户需求。
RocksDB 是 Facebook 基于 LevelDB 的改进版本,专注于多核利用和可观测性。与 LevelDB 相比,RocksDB 引入了多线程后台处理、独立的列族和更强的监控能力,架构演进包括并行化的 Flush 和 Compaction 机制、RateLimiter 限流和 Direct I/O 支持,显著提升了性能和可维护性。
本文探讨了RocksDB的内核机制,包括LevelDB、WAL、Compaction和Column Family等,重点分析了其在流计算和数据平台中的应用,尤其是在Flink和TiKV中的嵌入方式。同时讨论了写优化LSM的实现、读写路径、Compaction策略及其对性能的影响,适合流计算工程师和存储开发者阅读。
文章介绍了LRU缓存结构的设计,重点分析了LRUHandle节点的成员及其作用,如缓存对象、清理函数和引用计数等,揭示了作者在可读性与性能之间的权衡。
Leveldb 的写操作默认是异步的,可能在系统崩溃时导致数据丢失。为避免此问题,可以通过 fsync() 等函数设置同步写入以确保数据完整性。通常情况下,异步写入已足够,但若需更高的数据安全性,可定期使用同步写操作或将写入合并到 WriteBatch 中。
Version 是 leveldb 在磁盘上的文件 level 结构的抽象, 也是访问磁盘文件的隘口. 也就是说, 要读取磁盘上的文件, 必须要经过 Version. 要针对磁盘上的数据库做一些优化或者统计,
Leveldb 是一个 LSM-Tree 类型的数据库, LSM 最后一个字母就是 merge, 压实就是 merge 具体实现. 该算法在 LSM-Tree 论文阅读笔记 里有介绍, 如果不了解建议先读下这篇小文. 1. 压实介绍当 level-L
上一篇讲了 leveldb 中 Table 的设计和实现, 它是磁盘 sstable 文件的内存形式, 但是 Table 在实际中不会被用户直接用到, 而是借助 TableCache.
leveldb, leveldb, 每个 level 保存的内容就是一组 sorted string table (简称 sstable) 文件.
迭代器的设计和实现是 leveldb 的精华之一. 前几篇文章都多少提到了迭代器的使用, 本篇让我们深入一下迭代器的设计实现, 也为接下来的几篇剖析打下基础.
memtable 可以看作是 log 文件的内存形式, 但是格式不同. 每个 log 文件在内存有一个对应的 memtable, 它和正在压实的 memtable(所以可能同时有两个 memtable 存在) 以及磁盘上的各个 level 包含的文件构成了数据全集. memtable 的本质就是一个 SkipList.
本文基于leveldb 1.9.0代码。 整体架构 # leveldb 如上图,leveldb的数据存储在内存以及磁盘上,其中: memtable:存储在内存中的数据,使用skiplist实现。 immutable memtable:与memtable一样,只不过这个memtable不能再进行修改,会将其中的数据落盘到level...
Tiresias 发布了 v0.3 版本,重新实现了同步逻辑并修复了部分 BUG。新逻辑将源读取与目标更新分开,使用 leveldb 存储数据,更好地处理连接失败等问题。同时新增对 fs glob path 和 Consul 的支持,简化了管理。
完成下面两步后,将自动完成登录并继续当前操作。