我们有几个表格采用Leveled压缩策略和SizeTiered压缩策略。我们多久需要进行一次压实?提前致谢
答案 0 :(得分:5)
压缩自行运行(只要你没有在yaml中禁用自动压缩)。
根据cassandra写入路径,我们会定期将memtables刷新到磁盘上的SSTables(已排序的字符串表),这些是不可变的。当您更新现有单元格时,它最终会以sstable编写。可能与原始记录不同。当我们阅读时,有时C *必须扫描各种sstables(通过一些优化,请参见bloom过滤器)来查找单元格的最新版本。在卡桑德拉,最后写作获胜。
压缩采用sstables并将它们压缩在一起以删除重复数据,以优化读取。这是一种自动操作,但您可以tune compactions或多或少地运行。
大小分层压缩是cassandra中的默认压缩策略,它查找大小相同的sstables并在找到足够的时候将它们压缩在一起(默认为4)。尺寸分层比平整的IO密集度更低,并且当你有更小的盒子和旋转驱动器时,它通常会更好地工作。
Leveled 压缩针对读取进行了优化,当您读取繁重的工作负载或严格的读取SLA时,可能会有很多更新。由于您需要花费更多周期来优化读取,因此级别压缩会增加IO和CPU密集度,但读取本身应该更快并且命中更少的SStables。当你第一次启用这些或者你的工作量增长时,请密切注意io等待以及nodetool compaction stats
中的待定压缩。
多线程压缩 - 关闭它,开销大于收益。到了在C * 2.1中被删除的程度。
并发压缩器 - 现在默认为2,用于默认为默认情况下的核心数。如果你在2.0分支上并且没有运行最新的DSE,请检查此默认值并考虑将其减少到2.这是您可以运行的同时压缩任务的数量(不同的列族)。
压缩限制 - 限制压缩占用的资源量的一种方法。您可以使用nodetool getcompactionthreshold
和nodetool setcompactionthreshold
动态调整此值。您希望将此调整到不累积待处理任务的点。 0 - >无限。无限制地,通常不是最快的设置,因为系统可能陷入困境。