释放被覆盖数据的磁盘空间?

时间:2016-05-16 19:53:18

标签: cassandra

我有一个表,其行使用常规INSERT语句经常被覆盖。该表包含~50GB的数据,其中大部分数据每天都被覆盖。

但是,根据OpsCenter,磁盘使用率不断上升且未被释放。

我已经验证了行被覆盖而不是简单地附加到表中。但他们显然仍占用磁盘上的空间。

如何释放磁盘空间?

1 个答案:

答案 0 :(得分:3)

在封面中,Cassandra在这些写入过程中的方式是使用更新的时间戳将新行附加到SSTable。当您执行读取时,最新的行(基于时间戳)将作为行返回给您。但是,这也意味着您使用两倍的磁盘空间来完成此任务。直到Cassandra运行压缩操作,才会删除旧行并恢复磁盘空间。以下是有关Cassandra如何写入磁盘的一些信息,这些信息解释了该过程:

http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_write_path_c.html?scroll=concept_ds_wt3_32w_zj__dml-compaction

压缩是在逐个节点的基础上完成的,并且是一个非常磁盘密集的操作,可能会影响群集在运行期间的性能。您可以使用nodetool compact命令运行手动压缩:

https://docs.datastax.com/en/cassandra/2.0/cassandra/tools/toolsCompact.html

正如Aaron在上面的评论中提到的,每天覆盖集群中的所有数据并不是Cassandra最好的用例,因为这个问题就像这样。