Cassandra 控制 SSTable 大小

Cassandra control SSTable size

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

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

SSTables 最初是在 memtables 作为 SSTables 刷新到磁盘时创建的。这些表的大小最初取决于您的 memtable 设置和堆的大小(memtable_total_space_in_mb 是一个很大的影响因素)。通常这些 SSTable 非常小。作为称为 compaction.

的过程的一部分,SSTables 合并在一起

如果您使用 Size-Tiered Compaction Strategy,您就有机会拥有非常大的 SSTable。当至少有 min_threshold(默认 4)个相同大小的 sstables 时,STCS 将通过将它们组合到一个文件中、过期数据和合并键来将 SSTables 合并到一个较小的压缩中。这有可能在一段时间后创建非常大的 SSTable。

使用 Leveled Compaction Strategy 有一个 sstable_size_in_mb 选项可以控制 SSTables 的目标大小。一般来说,SSTables 将小于或等于这个大小,除非你有一个包含大量数据的分区键 ('wide rows')。

我还没有对 Date-Tiered Compaction Strategy 进行太多试验,但它的工作原理与 STCS 相似,因为它合并相同大小的文件,但它按时间顺序将数据保存在一起,并且它有一个停止配置压缩旧数据 (max_sstable_age_days) 这可能很有趣。

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

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