Cassandra 卡桑德拉控制表大小

Cassandra 卡桑德拉控制表大小,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,有没有一种方法可以控制SSTable的最大大小,例如100 MB,这样当CF的数据量实际超过100 MB时,Cassandra就会创建下一个SSTable?不幸的是,答案并不那么简单,sstable的大小将受到压缩策略的影响,没有直接的方法来控制最大sstable大小 SSTables最初是在memtables作为SSTables刷新到磁盘时创建的。这些表的大小最初取决于memtable设置和堆的大小(memtable\u total\u space\u in\u mb是一个很大的影响因素)。通

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

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

SSTables最初是在memtables作为SSTables刷新到磁盘时创建的。这些表的大小最初取决于memtable设置和堆的大小(
memtable\u total\u space\u in\u mb
是一个很大的影响因素)。通常,这些SSTABLE非常小。SSTables作为名为的过程的一部分合并在一起

如果您使用大小分层压缩策略,您就有机会拥有非常大的SSTABLE。当至少存在相同大小的
min\u threshold
(默认值4)SSTables时,STC将通过将SSTables组合到一个文件、过期数据和合并密钥,以较小的压缩方式组合SSTables。这有可能在一段时间后创建非常大的SSTABLE

使用分层压缩策略,有一个
sstable\u size\u in_mb
选项控制sstable的目标大小。通常,SSTables将小于或等于此大小,除非您有一个包含大量数据的分区键(“宽行”)

我还没有对日期分层压缩策略进行过太多的实验,但它的工作原理与STC相似,因为它合并了相同大小的文件,但它将数据按时间顺序放在一起,并且它有一个停止压缩旧数据的配置(
max\u sstable\u age\u days
),这可能很有趣

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


您可以阅读有关压缩和读取的配置设置的更多信息,以帮助了解STC或LCS是否适合您。

还应补充:说到SSTable大小,有一个令人满意的中间值,您也不希望SSTable太小,因为它会创建大量的读取来获取数据,因为它使行更可能分布在各个表中。SSTABLE的可接受大小可能取决于您的环境和需求,因此优化和测试最适合您的可能是好的。谢谢您提供的信息。我在哪里指定
sstable\u size\u(单位:mb)
?我尝试将它像
sstable\u size\u一样放入conf/cassandra.yaml中的\u mb:40
,但cassandra启动失败,错误为org.apache.cassandra.exceptions.ConfigurationException:Invalid yaml。请从您的cassandra中删除属性[sstable_size_in_mb]。yaml@RRMadhav,很可能您的表仍在使用SizeTieredCompactionStrategy。此选项仅在LeveledCompactionStrategy中受支持,您可以使用以下CQL命令更改压缩策略:ALTER TABLE tablename with COMPACTING={'class':'LeveledCompactionStrategy','sstable_size_in_mb':40}。我建议使用默认的sstable大小160MB,因为这是cassandra团队发现的最理想的大小,从经验来看,有很多小sstable不利于读取性能。不,我创建了压缩={'class':'LeveledCompactionStrategy'}和…的表,在desc表中,它显示的是相同的:compression={'class':'LeveledCompactionStrategy'}哦,我明白了,sstable_size_in_mb不在cassandra.yaml中,它是表配置的一部分。