如何将压缩策略更改为TWCS?

问题描述 投票:0回答:1

我正在使用Cassandra,现在,我有一个STCS压缩策略的项目A。我必须在不更改projectA中的数据的情况下将压缩策略更改为TWCS。我该怎么办?

我可以在TWCS中创建一个新的数据集,但我需要迁移projectA中的数据我不知道策略如何转换以及如何修复迁移。

cassandra data-compaction
1个回答
0
投票

您可以使用 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

此外,监控集群和应用程序的性能。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.