我知道在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中,这是另一次写入。
在这里阅读更多关于它的信息: