按缓冲池、写前日志、MVCC 落点、脏页写出与故障模式对照 PostgreSQL、InnoDB、RocksDB 与 WiredTiger;只谈机制与代价,不写未实测延迟排名。
用部署形态、写并发、查询形态与持久化需求收束 SQLite / PostgreSQL·InnoDB / DuckDB / RocksDB 选型;给出站内阅读地图、全系列学术谱系与开放问题,标志 SQLite 内核系列完成。
本文总结了TiKV/HTAP系列的核心内容,包括选型决策树、站内阅读地图及学术谱系。读者可以理解如何选择合适的KV存储,特别是在数据规模、分布式事务和新鲜度要求方面。系列共18篇,探讨了从Region切分到Multi-Raft复制的各个环节,并指出了当前的开放问题,如千万级Region的运维上限和跨Region的可观测性。
> 本文是写作规划,不是可发布正文。拆解对象:RocksDB 主线(facebook/rocksdb 9.x);LevelDB 1.23 作 fork 基线对照。不写 SQL 教程,不写 storage/32 参数 cookbook 重复,不写 TiKV/Raft 全文。 > > 关联文档:index.md(读者入口)…
本目录为 [RocksDB 内核系列](../index.html) 提供可复现实验脚本。
本文介绍了RocksDB的内核机制及其在存储引擎中的位置和适用场景。作为写优化的LSM引擎,RocksDB适合高写入负载的应用,如TiKV、Flink和Kafka Streams。文章还分析了RocksDB与LevelDB的区别及其在不同系统中的嵌入方式,强调了其在生产环境中的重要性和调优策略。
本文讨论了LevelDB 1.23的架构及其与RocksDB的差异,重点介绍了DBImpl的核心成员、读写路径、后台任务处理以及SST文件与MANIFEST的语义。LevelDB设计简洁,但存在单线程压缩和无列族等限制,这促使了RocksDB的开发,以满足更高的并发和多租户需求。
RocksDB 是 Facebook 基于 LevelDB 的改进版本,专注于多核利用和可观测性。与 LevelDB 相比,RocksDB 引入了多线程后台处理、独立的列族和更强的监控能力,架构演进包括并行化的 Flush 和 Compaction 机制、RateLimiter 限流和 Direct I/O 支持,显著提升了性能和可维护性。
本文探讨了RocksDB的写路径架构,重点介绍了WriteBatch的使用、WAL记录格式及其持久化机制。RocksDB通过Group Commit合并多个写操作,确保数据在崩溃后可恢复。写入顺序为先写WAL,再写MemTable,最后更新序列号。sync选项影响数据持久性,确保已写入的数据不会丢失。文章还对比了RocksDB与LevelDB的不同之处,强调了多线程写入和Column Family的支持。
本文讨论了RocksDB中MemTable的结构与功能,重点介绍了MemTable在写路径中如何与写前日志(WAL)协作,以确保数据的持久性和原子性。MemTable采用跳表实现,支持并发写入,并通过FlushJob将数据写入排序字符串表(SST)。文章分析了MemTable的生命周期、Flush调度及其对性能的影响,强调合理配置write_buffer_size和max_write_buffer_number的重要性,以优化写入效率和减少写放大。
本文讨论了RocksDB的FlushJob和MemTable的刷写过程,介绍了SST文件的结构,包括数据块、索引块和过滤块。阐述了MANIFEST文件的作用,管理SST文件的版本和层级,以及VersionSet的工作机制。最后提到sst_dump工具用于验证SST文件的属性和一致性。
本文探讨了RocksDB的读取路径,重点分析了GetImpl函数的实现。读取过程涉及MemTable、Immutable MemTable和SST文件的查找,使用SuperVersion确保读操作的一致性。详细讨论了Internal Key的设计和sequence number的管理,以确保返回最新版本。此外,提及了Snapshot的管理和合并操作的特殊情况,强调了RocksDB在多版本控制和一致性方面的机制。
本文讨论了RocksDB中Iterator的实现,重点介绍了如何在SuperVersion上进行范围查询。通过多个InternalIterator和MergeIterator的组合,DBIter将多版本的用户键折叠为用户可见的记录,并处理tombstone的可见性。文章详细阐述了NewInternalIterator的构建过程、MergeIterator的堆归并机制以及DBIter的可见性判断,强调了tombstone对扫描性能的影响。
本文讨论了RocksDB的读取性能优化,重点在于Table Cache和Block Cache的作用。Table Cache缓存已打开的TableReader,避免重复打开SST文件;Block Cache缓存数据块,减少I/O开销。使用Bloom Filter和Ribbon Filter可以跳过不存在的键的I/O,Partitioned Index则通过分割大型索引降低读取成本。调参时需综合考虑文件数和缓存策略,以优化读取性能。
本文讨论了RocksDB的Leveled Compaction机制,重点在于如何维护层级结构以优化读写性能。L0层文件重叠会导致读放大,因此需要通过compaction将数据逐层下推,以保持L1及以下层不重叠。文章分析了compaction的触发条件、分数计算及动态层级字节配置,并强调了L0文件数对读放大和写停滞的影响。实验结果表明,短时间内可能看不到compaction,需要延长测试以获取准确数据。
本文讨论了RocksDB中通过层级分数和LevelCompactionPicker控制L0与Size Ratio的机制,介绍了Universal、FIFO和TTL等不同的Compaction策略,以及Write Stall的触发条件和处理方式。重点分析了WriteController的作用,如何通过状态机管理写入延迟和停止,以优化数据库性能。最后强调了通过GetProperty和统计信息监测写入状态的重要性。
本文讨论了RocksDB相较于LevelDB的多线程flush和compaction机制,重点介绍了CompactionJob的生命周期、Env线程池的调度策略以及RateLimiter的工作原理。实验对比了不同速率限制下的写入性能,强调了RateLimiter在控制写入带宽和避免写入阻塞中的重要性,指出RocksDB在多核并行compaction方面的优势。
本文讨论了RocksDB中的列族(Column Family, CF)机制,强调其共享WAL和独立MemTable/SST的特性。CF允许在同一数据库实例中实现多组比较器和独立的压缩策略,以满足不同状态变量的隔离需求。文章还介绍了Flink如何将多种状态变量映射到不同的CF,以优化性能和管理。WAL的回收机制与CF的flush操作密切相关,影响整体性能。
本文讨论了RocksDB的事务机制,包括悲观锁和乐观事务的实现。WriteBatch确保批内原子性,但不处理并发冲突。TransactionDB使用悲观锁进行冲突检测,而OptimisticTransactionDB在提交时检查冲突。WritePrepared优化了两阶段提交的路径。TiKV在分布式层实现事务,RocksDB事务API为本地引擎提供能力,适用于低冲突和高冲突的事务处理场景。
本文讨论了RocksDB的三种数据搬运机制:Checkpoint、BackupEngine和SstFileWriter。Checkpoint通过硬链接创建一致性快照,BackupEngine支持增量备份和跨文件系统恢复,SstFileWriter用于离线生成SST文件。这三种机制在一致性和操作方式上各有不同,适用于不同的生产运维场景。
完成下面两步后,将自动完成登录并继续当前操作。