RocksDB简介 #

一、什么是RocksDB #

1.1 键值存储概述 #

键值存储(Key-Value Store)是最简单的数据存储模型,通过唯一的键来存储和检索值。

text
应用程序
    ↓
键值存储引擎
    ↓
┌─────────────────┐
│ Key   │ Value   │
├───────┼─────────┤
│ key1  │ value1  │
│ key2  │ value2  │
│ key3  │ value3  │
└───────┴─────────┘

1.2 RocksDB定义 #

RocksDB 是由 Facebook 开发的开源嵌入式键值存储引擎,基于 Google 的 LevelDB 进行了深度优化和扩展。

特性 说明
嵌入式 作为库嵌入应用程序,无需独立服务进程
LSM-Tree 采用LSM树存储结构,写入性能优异
高性能 针对SSD等快速存储设备优化
可配置 提供丰富的配置选项
跨平台 支持Linux、macOS、Windows

二、RocksDB发展历史 #

2.1 诞生背景 #

text
2011年  Google发布LevelDB
    ↓
2012年  Facebook开始基于LevelDB开发RocksDB
    ↓
2013年  RocksDB开源
    ↓
2015年  MyRocks项目启动
    ↓
2017年  RocksDB成为CNCF项目
    ↓
至今    RocksDB 8.x版本

2.2 为什么基于LevelDB开发 #

LevelDB特点 RocksDB改进
单线程Compaction 多线程Compaction
单一层压缩策略 多种压缩策略
无列族支持 支持列族
配置选项有限 丰富的配置选项
无事务支持 支持事务

2.3 版本演进 #

版本 年份 主要特性
2.x 2013 基础功能完善
3.x 2014 列族、事务支持
4.x 2015 单删除、合并操作符
5.x 2016 写入性能优化
6.x 2018 SstFileWriter、备份改进
7.x 2021 BlobDB、Tiered Compaction
8.x 2023 性能优化、新压缩算法

三、RocksDB核心特点 #

3.1 LSM-Tree存储结构 #

LSM-Tree(Log-Structured Merge-Tree)是一种写入优化的数据结构。

text
写入流程
    ↓
┌─────────────┐
│   MemTable  │ ← 内存中的有序表
│   (跳表)     │
└──────┬──────┘
       │ 写满后刷盘
       ↓
┌─────────────┐
│  Immutable  │ ← 不可变内存表
│   MemTable  │
└──────┬──────┘
       │ 后台刷盘
       ↓
┌─────────────┐
│    Level 0  │ ← SST文件
├─────────────┤
│    Level 1  │
├─────────────┤
│    Level 2  │
├─────────────┤
│    ...      │
└─────────────┘

3.2 高性能写入 #

cpp
// 顺序写入,性能极高
for (int i = 0; i < 1000000; i++) {
    db->Put(WriteOptions(), "key" + std::to_string(i), "value");
}

// 批量写入,原子性保证
WriteBatch batch;
for (int i = 0; i < 1000; i++) {
    batch.Put("key" + std::to_string(i), "value");
}
db->Write(WriteOptions(), &batch);

3.3 列族支持 #

cpp
// 创建多个列族
ColumnFamilyHandle* cf1;
ColumnFamilyHandle* cf2;
db->CreateColumnFamily(ColumnFamilyOptions(), "cf1", &cf1);
db->CreateColumnFamily(ColumnFamilyOptions(), "cf2", &cf2);

// 不同列族数据隔离
db->Put(WriteOptions(), cf1, "key", "value_in_cf1");
db->Put(WriteOptions(), cf2, "key", "value_in_cf2");

3.4 丰富的配置选项 #

cpp
Options options;
// 压缩配置
options.compression = CompressionType::kLZ4Compression;
// 块缓存配置
options.block_cache = NewLRUCache(1024 * 1024 * 1024); // 1GB
// 写缓冲区配置
options.write_buffer_size = 64 * 1024 * 1024; // 64MB
// Compaction配置
options.max_background_compactions = 4;

四、RocksDB应用领域 #

4.1 数据库存储引擎 #

text
┌─────────────────────────────────────┐
│           数据库架构                │
├─────────────────────────────────────┤
│  SQL层 → 存储引擎接口 → RocksDB     │
│              ↓                      │
│           LSM-Tree                  │
└─────────────────────────────────────┘

典型应用:

数据库 用途
MyRocks MySQL存储引擎
TiKV 分布式事务KV
CockroachDB 分布式SQL数据库
YugabyteDB 分布式SQL数据库

4.2 流处理系统 #

系统 用途
Apache Flink 状态后端存储
Kafka Streams 流处理状态存储
Samza 状态管理

4.3 区块链存储 #

text
区块链节点
    ├── 区块数据 → RocksDB
    ├── 交易数据 → RocksDB
    ├── 状态数据 → RocksDB
    └── 索引数据 → RocksDB

典型应用:

  • Ethereum
  • Hyperledger Fabric
  • Celo

4.4 时序数据库 #

系统 用途
InfluxDB 时序数据存储
TimescaleDB 时序扩展
QuestDB 高性能时序数据库

五、RocksDB架构概览 #

5.1 整体架构 #

text
┌─────────────────────────────────────────┐
│              应用层                      │
├─────────────────────────────────────────┤
│              API层                       │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │   DB    │ │Iterator │ │Snapshot │   │
│  └─────────┘ └─────────┘ └─────────┘   │
├─────────────────────────────────────────┤
│              核心组件                    │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │MemTable │ │  WAL    │ │ Version │   │
│  └─────────┘ └─────────┘ └─────────┘   │
├─────────────────────────────────────────┤
│              存储层                      │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐   │
│  │  SST    │ │ Block   │ │ Filter  │   │
│  │  Files  │ │ Cache   │ │ Block   │   │
│  └─────────┘ └─────────┘ └─────────┘   │
├─────────────────────────────────────────┤
│              文件系统                    │
└─────────────────────────────────────────┘

5.2 核心组件 #

组件 功能
MemTable 内存中的有序表,接收写入
Immutable MemTable 不可变内存表,等待刷盘
WAL Write-Ahead Log,保证持久性
SST Files 磁盘上的排序文件
Block Cache 数据块缓存
Version Set 版本管理

六、RocksDB与其他存储对比 #

6.1 与LevelDB对比 #

特性 RocksDB LevelDB
Compaction 多线程 单线程
列族 支持 不支持
事务 支持 不支持
压缩算法 多种 Snappy
配置选项 丰富 有限
性能 更高 一般

6.2 与传统数据库对比 #

特性 RocksDB MySQL(InnoDB)
数据模型 键值 关系型
存储结构 LSM-Tree B+Tree
写入性能 极高 中等
读取性能
范围查询 支持 支持
事务 简单事务 完整ACID
SQL支持 完整

6.3 与Redis对比 #

特性 RocksDB Redis
存储 磁盘持久化 内存为主
容量 受磁盘限制 受内存限制
速度 极快
数据结构 键值 丰富
持久化 原生支持 需配置
分布式 不支持 集群模式

七、为什么学习RocksDB #

7.1 市场需求 #

text
存储引擎技能需求(2024)
┌─────────────────────┐
│ 1. RocksDB    ████  │
│ 2. LevelDB    ██    │
│ 3. LMDB       █     │
│ 4. BoltDB     █     │
└─────────────────────┘

7.2 学习价值 #

1. 技能基础

text
RocksDB学习
    ├── LSM-Tree原理
    ├── 键值存储设计
    ├── 性能优化
    └── 存储引擎开发

2. 职业发展

职位 RocksDB技能要求
存储工程师 精通
数据库内核开发 精通
后端开发 熟练
大数据工程师 了解
运维工程师 熟练

7.3 学习路线 #

text
入门阶段
├── 了解LSM-Tree原理
├── 安装编译RocksDB
├── 基本API使用
└── 简单读写操作

进阶阶段
├── 迭代器和快照
├── 列族管理
├── 批量操作
└── 事务处理

高级阶段
├── 存储引擎原理
├── Compaction策略
├── 性能调优
└── 故障排查

专家阶段
├── 源码分析
├── 自定义扩展
├── 生产优化
└── 最佳实践

八、学习资源 #

8.1 官方资源 #

资源 地址
GitHub https://github.com/facebook/rocksdb
官方文档 https://rocksdb.org/
Wiki https://github.com/facebook/rocksdb/wiki

8.2 学习建议 #

  1. 理解原理:深入理解LSM-Tree存储结构
  2. 动手实践:编译源码,编写示例程序
  3. 性能测试:使用db_bench进行性能测试
  4. 源码阅读:阅读核心模块源码
  5. 生产应用:结合实际项目应用

九、总结 #

RocksDB核心特点:

特点 说明
高性能 针对SSD优化,写入性能极高
可靠性 WAL保证数据持久性
灵活性 丰富的配置选项
可扩展 支持列族、事务等高级特性
开源 Apache 2.0许可证

下一步,让我们开始安装RocksDB!

最后更新:2026-03-27