为什么rocksDB需要多级?

问题描述 投票:0回答:1

rocksDB 1 级中的所有键都已排序。因此我们可以在这个关卡中快速获得钥匙。为什么rocksDB还需要将level 1的文件压缩到level 2?

我在LevelDB的doc上找到了解释:如果同一目录中的文件太多,则在一个目录中打开文件会很慢。但是,正如文档中提到的,我们可以使用分片来解决这个问题。我认为分片比压缩容易得多。我说得对吗?

提前致谢!

leveldb rocksdb lsm-tree
1个回答
5
投票

多级可以减少写入放大。

因为

level 0
上的数据没有排序,所以它可能与
level 1
上的大部分数据重叠。这意味着来自
level0 -> level1
的压缩需要压缩大部分数据,这种情况经常发生。 如果您还有 1 个级别:
level2
,则 >90% 的数据位于级别 2,因此
level0->level1
压缩会小得多,这会减少压缩带来的写入放大。级别越多,一般来说写放大越小,但读放大越高,因为需要读取的级别越多。

这不仅仅是RocksDB,而是所有LSM-tree。在 RocksDB 中,您实际上可以通过设置

num_levels
将级别数配置为 2,我们不建议在正常用例中这样做:https://github.com/facebook/rocksdb/blob/0ed8cb666de61d2e18bbb1fc90e05b734cee02de/include/ Rocksdb/advanced_options.h#L433-L434

© www.soinside.com 2019 - 2024. All rights reserved.