开源RocksDB类数据库参考架构
组件场景
RocksDB是基于LSM-Tree设计的KV数据存储引擎,写吞吐极高、读性能强、压缩比高,适用于写密集、高并发、需要本地持久化的场景,其LSM-Tree的存储引擎模型,使其硬盘写大量为顺序IO,具有对机械盘友好的特点。
架构原理
图1 RocksDB架构图
|
模块名称 |
作用说明 |
|---|---|
|
WAL(Write-Ahead Log) |
数据写入Memtable前,先在WAL日志上记录,避免宕机丢数据,保证已返回成功的写入不丢失。 |
|
Manifest Log |
保存数据库的元数据信息,包括当前有哪些SSTable文件、每个文件属于哪一层(L0到Ln)、它们的键值范围、哪些文件是新生成的、哪些将被删除,同时还支持多版本和多列族(ColumnFamily)的管理。 |
|
Memtable |
内存里的跳表(SkipList),所有写入先写这里,顺序写、极快。写满后变成Immutable Memtable,后台刷盘。 |
|
Immutable Memtable |
Memtable写入内容达到一定容量后,memtable转化为只读的Immutable Memtable,等待被flush到持久化层的L0层。 |
|
SSTable(Sorted String Table) |
磁盘上有序、不可变的KV文件,按key排序,支持二分查找,多层结构:L0、L1、L2…。 |
|
Compaction |
把多层/重复/过期/删除的数据合并,删掉旧版本,让数据保持有序、减少读放大。 |
|
Block Cache |
内存中的读缓存,缓存磁盘SSTable文件中的数据块,减少磁盘I/O、提升读性能、降低延迟。 |
父主题: 方案架构