在我们的键空间中,我们只有几个表,其中一个包含了大部分数据。在该表中,只有一个ColumnEntity(例如,列X)包含99.99%的数据。当数据不再相关时,我们将TTL设置几天,并将列X设置为null(来自java进程)。理想情况下,这应该立即释放磁盘上的大量空间,因为X列拥有90%的键空间数据,但我们没有看到磁盘空间使用量的任何减少。
而且,在TTL过期后,数据正在完全删除,但我们仍然没有看到任何空间被释放出来。
我们少了什么?
发布于 2020-06-18 08:21:19
在Cassandra中,不需要修改任何数据--所有的文件都是不可变的.当您执行删除或插入null (它是相同的)时,除了磁盘上有以前的数据之外,特殊的标记是添加了。因此,当您添加数据时,实际上添加了更多的数据:-)
当SSTable文件通过背景压缩压缩时,数据的实际删除就会发生。文件压缩的调度取决于所使用的压缩策略及其配置选项。有些情况下,当大文件中有旧数据时,可能会有一段时间没有压缩。根据Cassandra/DSE的版本,您可以通过在每个节点上执行nodetool compact -s来强制压缩所有数据,但这需要有足够的磁盘空间(表的大小)。另一个机会是在单独的nodetool garbagecollect -g CELL上使用SSTables,但它也需要空闲的磁盘空间。
P.S.我建议至少在DS201上上DataStax学院课程。
https://stackoverflow.com/questions/62444324
复制相似问题