我有一个表,其行使用常规INSERT
语句经常被覆盖。该表包含~50GB的数据,其中大部分数据每天都被覆盖。
但是,根据OpsCenter,磁盘使用率不断上升且未被释放。
我已经验证了行被覆盖而不是简单地附加到表中。但他们显然仍占用磁盘上的空间。
如何释放磁盘空间?
答案 0 :(得分:3)
在封面中,Cassandra在这些写入过程中的方式是使用更新的时间戳将新行附加到SSTable。当您执行读取时,最新的行(基于时间戳)将作为行返回给您。但是,这也意味着您使用两倍的磁盘空间来完成此任务。直到Cassandra运行压缩操作,才会删除旧行并恢复磁盘空间。以下是有关Cassandra如何写入磁盘的一些信息,这些信息解释了该过程:
压缩是在逐个节点的基础上完成的,并且是一个非常磁盘密集的操作,可能会影响群集在运行期间的性能。您可以使用nodetool compact命令运行手动压缩:
https://docs.datastax.com/en/cassandra/2.0/cassandra/tools/toolsCompact.html
正如Aaron在上面的评论中提到的,每天覆盖集群中的所有数据并不是Cassandra最好的用例,因为这个问题就像这样。