0

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

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

提前致谢!

4

1 回答 1

2

多个级别可以减少写入放大。

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

它不仅适用于 RocksDB,而且适用于所有 LSM-tree。在 RocksDB 中,您实际上可以通过设置将级别数配置为 2,num_levels我们不建议将其用于正常用例:https://github.com/facebook/rocksdb/blob/0ed8cb666de61d2e18bbb1fc90e05b734cee02de/include/rocksdb/advanced_options。 h#L433-L434

于 2021-07-08T16:44:31.467 回答