background

facebook 在今年(2021年)的论文, 主要讨论了 fb 这几年在 rocksdb 方面的积累, 本来期望还是很大的, 以为有很多特殊的技巧, 但是, 阅读下来总体而言, 确实只是这么多年在 开发落地 rocksdb 方面的总结. 可以作为入门阅读. 这里挑了一些自己感兴趣的方面.

summary

ssd 的写放大原理

linkbench

Dynamic Leveled Compaction, where the size of each level in the tree is automatically adjusted based on the actual size of the last level (instead of setting the size of each level statically) [19].

fb udb

NAND flash

prefix bloom filters, applying the bloom filter before index lookups, and other bloom filter improvement:cpu 利用率提升

常规思考

  1. 资源的隔离性. 考虑 多进程(每个进程一个rocksdb)、多线程(多个 rocksdb instance). 还有很多工作要做
  2. 分布式场景可以不需要 wal, 比如 replication log 替换掉 wal log
  3. 默认参数不一致,参数与存储格式 绑定, 无法升级. 解决方案: 文件配置, validation & migration tool.
  4. 参数的automatic adaptivity/自动适配
  5. 限速的文件删除, 避免 cfs trim -> ssd gc -> 影响前台io -> 限流
  6. replication & backup: ogic copying 和 physical copying

存储介质

自己薄弱的地方, 后续需要重点关注

open-channel SSDs [50, 66], multi-stream SSD [68] and ZNS [4] promise to improve query latency and save flash erase cycles

Storage Class Memory (SCM)

SSD DIF/DIX 的数据保护

数据安全性

论文重点关注的内容, 也是最近存储系统关注的重点. 论文中提及: block level checksum、 filechecksum 和 wal checksum, 来避免静默错误.

除此之外, 在分布式场景中 还需要 end-to-end 校验. 还可以考虑 ssd 的 ecc (纠错技术).

kv接口

感觉更像是 总结经验: resource management, WAL treatment, batched file deletions, data format compatibility, and configuration management

version & timestamp

  1. 当前 不支持 乱序写 & seq number 的多版本,
  2. 指定过去的快照  目前在 rocksdb 是不支持的
  3. 支持了 时间戳, 但是实现 放到了meta,各种优势不理解, 需要理解

对标产品

Several studies have compared the performance of RocksDB with other databases such as InnoDB [41], TokuDB [19] [37], and WiredTiger [10]

write amplification can be reduced by separating key and value (e.g. WiscKey [35] and ForrestDB [1]), so we are adding this to RocksDB (called BlobDB)[https://github.com/facebook/rocksdb/blob/master/utilities/blob_db/blob_db.cc].

参考