Apache Cassandra CQL 压缩策略配置详解
概述
在Apache Cassandra数据库中,压缩(Compaction)是一个关键的后台进程,它负责合并多个SSTable文件,清除过期或已删除的数据,并优化读取性能。本文将深入解析Cassandra中各种压缩策略的配置参数,帮助数据库管理员根据不同的业务场景选择合适的压缩策略。
压缩策略基础配置
所有压缩策略都支持以下通用配置参数:
compaction = {
'class' : 'compaction_strategy_name',
'enabled' : (true | false),
'log_all' : (true | false),
'only_purge_repaired_tombstone' : (true | false),
'tombstone_threshold' : <ratio>,
'tombstone_compaction_interval' : <sec>,
'unchecked_tombstone_compaction' : (true | false) }
通用参数详解
-
enabled:控制是否启用后台压缩
true
:启用小规模压缩false
:禁用小规模压缩- 默认值:
true
-
log_all:启用集群范围的详细日志记录
- 默认值:
false
- 默认值:
-
only_purge_repaired_tombstone:控制墓碑(tombstone)的清理行为
true
:仅清理已修复SSTable中的墓碑false
:在压缩时清理所有墓碑- 默认值:
false
-
tombstone_threshold:垃圾回收墓碑与总列数的比率阈值
- 超过此阈值将触发压缩
- 默认值:
0.2
-
tombstone_compaction_interval:SSTable创建后可以运行压缩的最小时间间隔(秒)
- 默认值:
86400
(1天)
- 默认值:
-
unchecked_tombstone_compaction:是否跳过压缩前的预检查
true
:跳过预检查false
:执行预检查- 默认值:
false
统一压缩策略(UnifiedCompactionStrategy)
统一压缩策略(UCS)是Cassandra推荐的默认策略,适用于大多数部署场景。
compaction = {
'class' : 'UnifiedCompactionStrategy',
'scaling_parameters' : list of scaling parameters,
'target_sstable_size': <text>,
'base_shard_count': <int> }
UCS特有参数
-
scaling_parameters:触发小规模压缩前的最大SSTable数量
- 默认值:
32
- 默认值:
-
target_sstable_size:目标SSTable大小
- 必须指定字节单位(如'1 GiB')
- 默认值:
1 GiB
-
base_shard_count:最小分片数
- 默认值:
4
(系统表为1)
- 默认值:
-
expired_sstable_check_frequency_seconds:检查过期SSTable的频率
- 默认值:
10分钟
- 默认值:
-
sstable_growth:SSTable增长因子(λ)
- 范围:0到1之间
- 控制密度增长对单个SSTable大小和分片数的影响
- 默认值:
0.333
大小分层压缩策略(SizeTieredCompactionStrategy)
STCS是Cassandra的默认压缩策略,适用于写入密集型工作负载。
compaction = {
'class' : 'SizeTieredCompactionStrategy',
'bucket_high' : <factor>,
'bucket_low' : <factor>,
'min_sstable_size' : <int>,
'min_threshold' : <int>,
'max_threshold' : <int> }
STCS特有参数
-
min_threshold:触发小规模压缩的最小SSTable数量
- 默认值:
4
- 默认值:
-
max_threshold:触发小规模压缩的最大SSTable数量
- 默认值:
32
- 默认值:
-
bucket_high:SSTable大小比较上限因子
- 默认值:
1.5
- 默认值:
-
bucket_low:SSTable大小比较下限因子
- 默认值:
0.5
- 默认值:
-
min_sstable_size:小SSTable的分组阈值(MB)
- 默认值:
50
- 默认值:
分层压缩策略(LeveledCompactionStrategy)
LCS适用于读取密集型工作负载,提供更稳定的读取性能。
compaction = {
'class' : 'LeveledCompactionStrategy',
'sstable_size_in_mb' : <int> }
LCS特有参数
-
sstable_size_in_mb:目标SSTable大小(MB)
- 默认值:
160
- 默认值:
-
fanout_size:层级大小增长因子
- 默认值:
10
- 默认值:
时间窗口压缩策略(TimeWindowCompactionStrategy)
TWCS适用于时间序列数据,按时间窗口组织数据。
compaction = {
'class' : 'TimeWindowCompactionStrategy',
'compaction_window_unit' : <days>,
'compaction_window_size' : <int> }
TWCS特有参数
-
compaction_window_unit:时间窗口单位
- 默认值:
days
- 默认值:
-
compaction_window_size:每个窗口的单位数
- 默认值:
1
- 默认值:
总结
选择合适的压缩策略对Cassandra性能至关重要:
- UCS:推荐用于大多数通用场景
- STCS:适合写入密集型工作负载
- LCS:适合读取密集型工作负载
- TWCS:适合时间序列数据
理解这些策略及其配置参数,可以帮助您根据特定工作负载需求优化Cassandra性能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考