##压实策略
如compaction所述,压实过程会合并keys,columns,清除逻辑删除表,合并SSTables,并在合并的SSTable中创建新的索引。
在cassandra.yaml文件中,可以配置以下全局压缩参数:
-
snapshot_before_compaction
-
concurrent_compactors
-
compaction_throughput_mb_per_sec
**注:**compaction_throughput_mb_per_sec参数设计用于大型分区。Cassandra在整个系统中对这个进行压实。
Cassandra为测试压实策略提供了启动选项,而不会影响生产工作量。
Cassandra支持以下压缩策略,您可以使用CQL进行配置:
-
**LeveledCompactionStrategy (LCS):**分级压缩策略创建一个固定的,相对较小(默认为160 MB)的SSTables,这些SSTable被分组为级别。在每个级别内,SSTables保证不重叠。每个级别(L0,L1,L2等)是以前的10倍。由于SSTables不断被压缩到更高的级别,因此磁盘I / O在更高级别上更加统一和可预测。在每个级别,行键合并到下一级别的不重叠的SSTable中。这个过程可以提高读取的性能,因为Cassandra可以确定每个级别的哪个SSTables检查是否存在行密钥数据。这个压缩策略是在Google的LevelDB实施之后建模的。另见LCS压实子属性。
-
**SizeTieredCompactionStrategy (STCS):**默认的压缩策略。当磁盘上有许多类似大小的SSTables时,这个策略会触发一个小的压缩,就像table subproperty所配置的一样min_threshold。轻微压缩不涉及密钥空间中的所有表。另请参阅STCS压缩子属性。
-
**TimeWindowCompactionStrategy (TWCS) :**这个策略是时间序列数据的一个替代方案。TWCS使用一系列时间窗口来压缩SSTables 。在时间窗口的情况下,TWCS使用STCS将所有从内存刷新的SSTable压缩成更大的SSTable。在时间窗口结束时,所有这些SSTable被压缩成一个单一的SSTable。然后下一个时间窗口开始,重复这个过程。时间窗口的持续时间是唯一需要的设置。请参阅TWCS压缩子属性。有关TWCS的更多信息,请参阅数据如何维护?。
-
**DateTieredCompactionStrategy (DTCS):**这个策略是时间序列数据的替代方案。它在Cassandra 3.0.8 / 3.8及更高版本中被弃用。DTCS将在一定时间内写入的数据存储在同一个SSTable中。例如,Cassandra将最后一小时的数据存储在一个SSTable 时间窗口中,接下来的4小时数据存储在另一个时间窗口中,依此类推。压缩时触发 min_threshold(默认为4),这些窗口中的SSTables已到达。时间序列工作负载最常见的查询检索数据的最后一小时/一天/一个月。卡桑德拉可以限制返回给那些有相关数据的SSTables。此外,Cassandra可以将已经设置为在SSTable中使用TTL过期的数据与其他预定在大约同一时间到期的数据一起存储。Cassandra可以放弃SSTable而不进行压缩。另请参阅DTCS压缩子属性。
要配置压缩策略属性和CQL压缩子属性(如要紧缩的最大SSTable数量和最小SSTable大小),请使用CREATE TABLE或ALTER TABLE。
###步骤
1.使用ALTER TABLE语句更新表来设置压缩策略。
ALTER TABLE users WITH compaction = { 'class' : 'LeveledCompactionStrategy' }
2.将压缩策略属性更改为SizeTieredCompactionStrategy,并使用CQL min_threshold属性指定触发压缩的最小SSTables数量。
ALTER TABLE users WITH compaction = {'class' : 'SizeTieredCompactionStrategy', 'min_threshold' : 6 }
3.可以使用压缩度量标准监视配置结果,请参阅压实度量标准。
4.Cassandra 3.0和更高版本支持Compaction的扩展日志记录。该实用程序必须配置为表配置的一部分。扩展压缩日志存储在一个单独的文件中。有关详细信息,请参阅启用扩展压缩日志记录。
##配置压实策略
可以配置表属性和子属性来管理压实。该CQL表格属性文档描述的类型可用压实选项。压实是默认启用的。
###步骤
1.禁用压实,使用CQL将压实参数enabled设置为false。
CREATE TABLE DogTypes (
block_id uuid,
species text,
alias text,
population varint,
PRIMARY KEY (block_id))
WITH compression = { 'enabled' : false };
2.在现有表上启用压实,使用ALTER TABLE将压缩算法class设置为LZ4Compressor(Cassandra 1.2.2和更高版本),SnappyCompressor或DeflateCompressor。
CREATE TABLE DogTypes (
block_id uuid,
species text,
alias text,
population varint,
PRIMARY KEY (block_id))
WITH compression = { 'class' : 'LZ4Compressor' };
3.更改现有表上的压实,使用ALTER TABLE将压缩算法class设置为 DeflateCompressor。
ALTER TABLE CatTypes WITH compression = { 'class' : 'DeflateCompressor', 'chunk_length_in_kb' : 64 }
4.可以使用CQL调整每个表的数据压实策略以更改表。