水平压实中的层数有什么影响?

Bis*_*hnu 6 cassandra leveldb rocksdb scylla

我知道 Cassandra、rocksdb 等 DBS 中的分级压缩是如何工作的。有些级别的最大数量为 4,有些级别为 7。这个数字如何影响压缩过程?为什么我不能只有 2 个级别,第一个已刷新内存表数据(文件之间可能重叠)和第二个包含非重叠 SST?

如果有任何文档或重复问题,请重定向。

编辑 1:当级别数增加时,重复数据会增加。

Tom*_*San 5

LCS 来解决STCS 的空间放大问题。它还减少了读取放大(每个读取请求所需的平均磁盘读取数)。

Leveled compaction 将小的 sstables(“碎片”)划分为多个级别:

级别 0 (L0) 是新的 sstables,最近从内存表中刷新。随着它们的数量增加(并且读取速度变慢),我们的目标是将 sstables 从这个级别移到下一个级别。其他每个级别,L1、L2、L3 等,都是一个大小呈指数增长的单次运行:L1 是 10 个 sstables 的运行,L2 是 100 个 sstables 的运行,L3 是 1000 个 sstables 的运行,以及很快。(因子 10 是 Scylla 和 Apache Cassandra 中的默认设置)。

在解决或至少显着改善空间放大问题的同时,LCS 使另一个问题,即写入放大问题变得更糟。

“写放大”是每一个新刷新的sstable数据我们必须写入磁盘的字节数。写放大总是高于1.0,因为我们将每条数据都写入commit-log,然后再写入再次到一个sstable,然后每次压缩涉及到这条数据并将其复制到一个新的sstable,这就是另一个写入。

在此处阅读更多相关信息: