我正在使用Cassandra,现在,我有一个STCS压缩策略的项目A。我必须在不更改projectA中的数据的情况下将压缩策略更改为TWCS。我该怎么办?
我可以在TWCS中创建一个新的数据集,但我需要迁移projectA中的数据我不知道策略如何转换以及如何修复迁移。
您可以使用 CQL 命令
ALTER TABLE
更改表的压缩策略。
请注意,虽然更改压缩非常简单,但您需要考虑一些事情,我将在下面讨论。
更改已包含数据的表的压缩策略可能会显着影响集群的性能,因为它将触发完整的压缩周期来重写所有 SSTable。
根据数据目录使用的磁盘类型以及集群的繁忙程度等因素,重写所有文件可能需要数小时甚至数天的时间,并且对于生产集群来说尤其可能会出现问题。
我还应该指出,您应该仅将
TimeWindowCompactionStrategy
仅用于真实的时间序列数据集。否则,表的性能可能无法预测。
将架构的副本保存在安全位置,尤其是正在修改的表。例如,保存以下输出:
DESCRIBE TABLE ks_name.table_name;
确保所有节点上都有足够的可用磁盘空间,至少有 20-30% 的可用空间,对于非常大的表,最好高达 50%。
确保数据磁盘有足够的空间用于额外的重新压缩 I/O。对于接近最大读写负载的集群,可以考虑添加节点来增加集群容量。
测试,测试,测试!如果没有先在非生产环境中进行测试,请勿执行此操作。
使用以下示例更改压缩策略:
ALTER TABLE ks_name.table_name
WITH COMPACTION = {
'class' : 'TimeWindowCompactionStrategy',
'compaction_window_unit' : 'HOURS',
'compaction_window_size' : 24
};
在此示例中,24 小时窗口内的所有 SSTable 将被压缩在一起。您需要根据您的要求自定义时间窗口选项。
验证表是否已更改。例如:
DESCRIBE TABLE ks_name.table_name;
如果表有任何与之关联的索引,您将需要重建这些索引。例如,重建二级索引:
$ nodetool rebuild_index ks_name table_name idx_name
通过以下方式监控每个节点上的压缩进度:
$ nodetool compactionstats
此外,监控集群和应用程序的性能。干杯!