01
动机
02
构建 Pebble
-
我们非常了解 CockroachDB 对 RocksDB 的使用。Pebble 的目的不是要完全替代 RocksDB,而仅仅是替代 CockroachDB 使用的 RocksDB 中的功能。据估算,这将更换任务的范围至少减少了50%。目前,Pebble 代码库的拥有略超过 45k 行代码和另外 45k 行测试。这只是 RocksDB 代码大小的一小部分,主要原因是我们没有复制 RocksDB 的所有功能。 -
我们不是从零开始。LevelDB 的 Go 端口几年前就开始着手编写了,但从未完成。虽说这些代码很少还保存在 Pebble 中,但它确实列出了最初的框架并提供了用于读取和写入低级文件格式的早期代码。 -
我们可以将 RocksDB 的代码称为实现模板。例如,虽然未正式指定低级 RocksDB 文件格式,但 RocksDB 代码提供了足够多的关于这些格式的文档。虽然重用 RocksDB 文件格式从 Pebble 设计中消除了一定程度的自由度,但这并不是一个繁重的约束。而且,不仅仅是文件格式,我们还可以从 RocksDB 代码的所有部分中获取灵感和想法。
2.1 功能
-
基本操作:Set, Get, Merge, Delete, Single Delete, Range Delete -
批处理
-
索引批处理 -
只写批处理
-
基于块的稳定器
-
表级布隆过滤器 -
前缀Bloom过滤器
-
检查站 -
迭代器
-
迭代器选项(上下限,表格过滤器) -
前缀迭代 -
反向迭代
-
基于各种级别的压缩
-
并发压缩 -
手动压缩 -
L0内压缩
-
SSTable摄取 -
快照
-
Backups -
Column families -
Delete files in range -
FIFO compaction style -
Forward iterator / tailing iterator -
Hash table format -
Memtable bloom filter -
Persistent cache -
Pin iterator key / value -
Plain table format -
SSTable ingest-behind -
Sub-compactions -
Transactions -
Universal compaction style
2.2 双向兼容
03
测试
-
Pebble unit tests -
Randomized tests (a.k.a metamorphic tests) -
Bidirectional compatibility tests -
CockroachDB unit tests -
CockroachDB nightly tests (a.k.a. roachtests)
3.1 单元测试
3.2 随机测试
3.3 崩溃测试
3.4 双向兼容测试
3.5 利用CockroachDB测试
4
性能
5
结论和未来工作方向
相关链接
本文始发于微信公众号(GoCN):Pebble 介绍:由 RocksDB 启发,用 Go 编写的 K/V 存储
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论