分层大小压缩策略 (STCS)
统一压缩策略 (UCS) 是从 Cassandra 5.0 开始推荐用于大多数工作负载的压缩策略。如果您要创建新表,请使用此策略。 |
分层大小压缩策略 (STCS)
推荐用于写入密集型工作负载,并且是传统的推荐压缩策略。如果未指定其他策略,它将是默认的压缩策略。
当 Cassandra 累积了一定数量(默认值:4)的类似大小的 SSTable 时,STCS 会启动压缩。STCS 将这些 SSTable 合并成一个更大的 SSTable。随着这些更大的 SSTable 的累积,STCS 会将它们合并成更大的 SSTable。在任何给定时间,都会存在多个不同大小的 SSTable。
虽然 STCS 在压缩写入密集型工作负载方面效果很好,但它会使读取速度变慢,因为按大小合并的过程不会按行对数据进行分组。这一事实使得特定行的版本更有可能分布在多个 SSTable 中。此外,STCS 不会以可预测的方式清除已删除的数据,因为它的压缩触发器是 SSTable 大小。但是,SSTable 的增长速度可能不足以定期合并和清除旧数据。
大多数 STCS 压缩是次要压缩,它将几个 SSTable 合并成一个。相反,在使用 STCS 执行主要压缩时,在压缩期间每个数据目录将存在两个 SSTable,一个用于已修复的数据,另一个用于未修复的数据。随着最大的 SSTable 的大小增长,在 STCS 压缩期间同时用于新旧 SSTable 的磁盘空间量可能会超过节点上典型的磁盘空间量。这种现象被称为空间放大,即 SSTable 大小增长的问题,以及超出集群压缩能力的问题。不建议对 STCS 进行主要压缩。
STCS 依赖于对 SSTable 平均大小的计算来确定要合并哪些 SSTable。此过程称为分桶。以下选项用于计算将 SSTable 分组到的桶,基于该平均大小。分桶过程根据 SSTable 的大小与平均大小的差异(比平均大小大 50% 或 150%)对 SSTable 进行分组。另一种表达此计算的方法是,分桶过程对大小在 [average-size × bucket_low] 和 [average-size × bucket_high] 之间的 SSTable 进行分组。
|
STCS 选项
分层大小压缩策略 (STCS) 选项使用表选项在每个表中设置。表的 min_threshold
选项是触发次要压缩的主要值。次要压缩不涉及键空间中的所有表。
子属性 | 描述 |
---|---|
enabled |
启用后台压缩。默认值:true |
tombstone_compaction_interval |
Cassandra 在考虑 SSTable 进行墓碑压缩之前,创建 SSTable 后的最短秒数。如果表超过了 |
tombstone_threshold |
可垃圾回收的墓碑与所有包含的列的比率。如果比率超过此限制,Cassandra 将单独对该表启动压缩,以清除墓碑。默认值:0.2 |
unchecked_tombstone_compaction |
如果设置为 |
log_all |
为整个集群激活高级日志记录。默认值:false |
max_threshold |
允许在次要压缩中使用的 SSTable 的最大数量。默认值:32 |
min_threshold |
触发次要压缩的 SSTable 的最小数量。默认值:4 |
bucket_high |
如果 SSTable 的大小小于该桶的平均大小的 150%,则将其添加到该桶中。例如,如果 SSTable 大小为 13 MB,而桶的平均大小为 10 MB,则 SSTable 将被添加到该桶中,并且将为该桶计算新的平均大小。默认值:1.5 |
bucket_low |
如果 SSTable 的大小大于该桶的平均大小的 50%,则将其添加到该桶中。例如,如果 SSTable 大小为 6 MB,而桶的平均大小为 10 MB,则 SSTable 将被添加到该桶中,并且将为该桶计算新的平均大小。默认值:0.5 |
min_sstable_size |
小于此值的 SSTable 将被分组到一个桶中,其中平均大小小于此设置。默认值:50MB |
only_purge_repaired_tombstones |
如果设置为 |