Cassandra控制SSTable尺寸

时间:2015-04-01 13:30:43

标签: cassandra cassandra-2.0

有没有办法可以控制SSTable的最大大小,例如100 MB,这样当CF实际上有超过100MB的数据时,Cassandra会创建下一个SSTable?

1 个答案:

答案 0 :(得分:6)

不幸的是,答案并非如此简单,您的SSTables的大小将受到您的压缩策略的影响,并且没有直接的方法来控制您的最大sstable大小。

当memtables作为SSTables刷新到磁盘时,最初会创建SSTable。这些表的大小最初取决于您的memtable设置和堆的大小(memtable_total_space_in_mb是一个很大的影响者)。通常这些SSTables非常小。 SSTables作为名为compaction的过程的一部分合并在一起。

如果您使用尺寸分层压缩策略,您将有机会获得非常大的SSTable。当SCSables通过将它们组合成一个文件,过期数据和合并键时,至少有min_threshold(默认值为4)相同大小的sstables时,它们会将SSTables组合成一个小的压缩。这有可能在一段时间后创建非常大的SSTable。

使用Leveled Compaction Strategy有一个sstable_size_in_mb选项可控制SSTables的目标大小。通常,SSTables将小于或等于此大小,除非您有一个包含大量数据的分区键('宽行')。

我还没有尝试使用Date-Tiered Compaction Strategy,但是它与STCS类似,因为它合并了相同大小的文件,但它按时间顺序保存数据,并且它有一个配置可以停止压缩可能有趣的旧数据(max_sstable_age_days)。

关键是找到最适合您数据的压缩策略,然后调整最适合您的数据模型/环境的属性。

您可以阅读有关压缩here的配置设置的更多信息,并阅读this guide以了解STCS或LCS是否适合您。