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

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

Edit-1:当级别数增加时,重复数据会增加。

最佳答案

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

分级压缩将小稳定块(“碎片”)划分为多个级别:

级别0(L0)是新的sstable,最近已从memtable中清除。随着它们的数量增加(并且读取速度变慢),我们的目标是将sstables从该级别移至下一个级别。
L1,L2,L3等其他每个级别都是按指数级增长的单次运行:L1是10 sstables的运行,L2是100 sstables的运行,L3是1000 sstable的运行,并且很快。 (因子10是Scylla和Apache Cassandra中的默认设置)。

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

“写入放大”是我们必须为新刷新的稳定数据的每个字节写入磁盘的字节数,写入放大率始终高于1.0,因为我们将每条数据写入提交日志,然后再写入再次写入一个sstable,然后每次压缩都涉及到这条数据并将其复制到新的sstable中,这是另一次写入。

在这里阅读更多关于它的信息:

  • https://www.scylladb.com/2018/01/31/compaction-series-leveled-compaction/
  • https://docs.scylladb.com/kb/compaction/
  • https://docs.scylladb.com/architecture/compaction/compaction-strategies/
  • 10-05 23:03