我知道分级压缩在 Cassandra、rocksdb 等 DBS 中是如何工作的。有些最大级别数为 4,有些最大级别数为 7。这个数字如何影响压缩过程?为什么我不能只有 2 个级别,第一个级别已刷新内存表数据(文件之间可能重叠),第二个级别包含不重叠的 SST?
如果有任何文档或重复的问题,请重定向。
Edit-1:当级别数增加时,重复数据会增加。
最佳答案
LCS旨在解决STCS的空间放大问题。它还可以减少读取放大(每个读取请求所需的平均磁盘读取次数)。
分级压缩将小sstables(“片段”)划分为多个级别:
0级(L0)是新的sstables,最近从memtables中刷新。随着它们的数量增加(并且读取速度减慢),我们的目标是将 sstables 从这个级别移到下一个级别。 其他每个级别(L1、L2、L3 等)都是大小呈指数增长的单次运行:L1 是 10 个 sstable 的运行,L2 是 100 个 sstable 的运行,L3 是 1000 个 sstable 的运行,并且很快。 (系数 10 是 Scylla 和 Apache Cassandra 中的默认设置)。
在解决或至少显着改善空间放大问题的同时,LCS 使另一个问题(写入放大)变得更糟。
“写放大”是指新刷新的 sstable 数据的每一个字节我们必须写入磁盘的字节数。写放大始终高于 1.0,因为我们将每条数据写入提交日志,并且然后再次写入到一个sstable中,然后每次compaction时都会涉及到这条数据并将其复制到一个新的sstable中,这又是一次写入。
在这里阅读更多相关信息:
关于cassandra - 分层压缩中层数的影响是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59934904/