# RocksDB

适用环境:内存、Flash、hard disks、HDFS

# 数据结构

  • memtable(内存数据结构)

  • sstfile(磁盘)

有序存储,方便查询

  • logfile(顺序写)

数据先写入 memtable ,部分请求内容写入 logfile (WAL:Write-Ahead Logging)

memtable 内存满之后,执行 flush 操作,将数据转移到 sstfile ,同时删除 logfile 的数据

RocksDB 的 key 和 value 完全是 byte stream(无长度限制)

DB 的所有数据按照 key 有序存储(因此 iterator 可以支持 rangeScan 查询), compare 方法可以用户自定义

Snapshot 可以创建一个时间点的快照( GetIterator 可以执行在某一个 Snapshot 上)

# 读放大 和 写放大

  • 数据存入内存,构建成一棵树

  • 内存数据越来越大,flush 到磁盘

  • 磁盘定期执行 merge 操作,合并成为一棵更大的树(L0 → LN,L0 的热度最高,LN 的热度最低)

读取数据需要一步步从内存到硬盘,因此称为读放大。

# 同步写 和 异步写

  • 同步写:写入磁盘返回
  • 异步写:写入内存返回,写入磁盘是异步操作

异步写操作系统崩溃会丢掉部分数据(一般不会发生),同步写效率比异步写差千倍左右。

# 事务(Transations)

支持乐观和悲观锁

# Column Family

列族

每个 key 都与唯一的列族结合

跨列族的原子性操作

快速删除 / 添加列族(共享 WAL 日志,不共享 memtabletable 文件

一个列族 flush 后,创建新的 WAL 日志,老的 WAL 不删除,等到所有的列族都 flush 后才会删除老的 WAL 文件

更新于

请我喝[茶]~( ̄▽ ̄)~*

ceilzcx 微信支付

微信支付

ceilzcx 支付宝

支付宝

ceilzcx 贝宝

贝宝