cassandra-将一个巨大的字段设置为null而不返回磁盘空间

t1qtbnec  于 2021-06-13  发布在  Cassandra
关注(0)|答案(1)|浏览(397)

在我们的键空间中,只有几个表,其中一个表包含大部分数据。在该表中,只有一个columnentity(比如x列)包含99.99%的数据。当数据不再相关时,我们将ttl设置几天,并将x列设置为null(来自java进程)。理想情况下,这应该会立即释放磁盘上的大量空间,因为列x有90%的总键空间数据,但我们没有看到磁盘空间使用的任何减少。
而且,在ttl过期之后,数据被完美地删除了,但是我们也没有看到任何空间被释放出来。
我们错过了什么?

gpnt7bae

gpnt7bae1#

在cassandra中,没有数据被就地修改-所有文件都是不可变的。当执行delete或insert null(相同)时,除了磁盘上有以前的数据之外,还会添加特殊标记。因此,当您添加数据时,实际上是在添加更多的数据:-)
当sstable文件被后台压缩时,数据的实际删除就会发生。文件压缩的调度取决于所使用的压缩策略及其配置选项。当您在大文件中有旧数据时,可能会有一段时间无法压缩的情况。根据您的cassandra/dse版本,您可以通过执行 nodetool compact -s 但这需要有足够的磁盘空间(表的大小)。另一个机会是利用 nodetool garbagecollect -g CELL 但它也需要可用的磁盘空间。
p、 我建议至少在税务学院修ds201课程。

相关问题