我需要在特定的时间后生成SSTables,比如10分钟,但是使用TWCS并设置"compaction_window_size“和"compaction_window_unit",我不能理解何时生成SSTables。
我尝试了所有的组合,但我不能确定何时创建SSTables
CREATE TABLE twcs.twcs2 (
id int PRIMARY KEY,
age int,
name text
) WITH bloom_filter_fp_chance = 0.01
AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
AND comment = ''
AND compaction = {'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy', 'compaction_window_size': '1', 'compaction_window_unit': 'MINUTES', 'max_threshold': '32', 'min_threshold': '4'}
AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND crc_check_chance = 1.0
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 3600
AND gc_grace_seconds = 60
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99PERCENTILE';这里我设置了'compaction_window_unit'='MINUTES‘和'compaction_window_size':'1’,因此如果在表上执行了某些操作(数据的插入/删除/更新),则每隔1分钟就会生成一次SSTables,但这并没有发生。
发布于 2019-10-03 20:30:11
TWCS是一种压缩策略。压缩策略与生成的sstables无关。一旦它们被创建,它就是一个协调和清理的“算法”。TWCS的工作方式是将sstables合并到windows中。这里的关键词是“合并”。不能保证在该时间范围内将“生成”sstables,但在窗口到期后生成的任何内容都将合并在一起。因此,如果你有每小时一次的窗口/存储桶,那么在这段时间内可能会生成,也可能不会生成。如果在窗口期间创建了多个稳定表,则使用STCS对它们进行压缩/合并/协调(将大小相似的稳定表合并在一起)。一小时后,为该窗口保留的所有sstable都将被压缩到一个sstable中。随着时间的推移,您将在每个窗口中看到一个sstable (如果在该窗口期间没有生成任何内容,则不会显示)。在TTL和gc_grace通过后,整个窗口就会被删除(而不是与其他窗口合并,然后删除过期记录的大量工作)。
如果窗口内的行没有重叠,TWCS工作得很好。如果存在重叠,则在具有重叠记录的最新sstable过期之前,将无法删除最旧的窗口sstable。换句话说,TWCS对于不跨窗口的插入工作得很好(记住,更新和删除也被认为是插入)。您需要确保使用TTL进行清理(即,不要运行delete语句,因为这将导致重叠)。此外,根据我在使用此工具时发现的情况,请确保关闭对具有TWCS的表的修复,因为这可能会导致大问题(看不见的重叠)。
因此,简而言之,TWCS不会导致生成sstables (创建sstables时有一些与压缩策略无关的规则),它只是保持事物“干净”的另一种方法。
希望这能有所帮助。
发布于 2019-10-03 13:30:54
https://stackoverflow.com/questions/58212745
复制相似问题