cassandra - 分层压缩中层数的影响是什么?

标签 cassandra leveldb rocksdb scylla

我知道分级压缩在 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/

相关文章:

cassandra - 了解 Cassandra - 它可以取代 RDBMS 吗?

cassandra - 如何在不创建快照的情况下删除cassandra表中的所有记录

database - Go 中多线程 LevelDB 的合适方法是什么?

c++ - RocksDB - 在相同 KEY-VALUEs 的 2 次 Put 操作后,数据库大小加倍

rocksdb - 在Java中创建RocksDB SST文件以进行批量加载

nosql - Apache Cassandra如何进行聚合操作?

cassandra - Scylla 数据中心和 Cassandra 数据中心在同一集群中

python - 无法从 python leveldb 数据库中删除锁定

javascript - levelDB 是否仍然损坏数据?

c++ - RocksDB 获取列族键值