Cassandra 数据上的 TTL Remover

Posted

技术标签:

【中文标题】Cassandra 数据上的 TTL Remover【英文标题】:TTL Remover on Cassandra Data 【发布时间】:2019-05-11 20:53:06 【问题描述】:

我有一个场景,应用程序已将数据插入到 Cassandra 表中,其 (TTL) 为 5 天。我也有 (GC_GRACE_SECONDS) 到 5 天,以便在压缩启动后立即清除墓碑。

现在,我有一个场景,我需要为一张表保留 60 天的数据。我已更改应用程序写入以将新数据的 TTL 更新为 60 天。但我正在寻找一种解决方案,可以更改现有数据的 TTL(从 5 天到 60 天)。

由于某种原因,我尝试了 Instaclustr/TTLRemover,但代码对我们不起作用。 我们正在使用 Apache Cassandra 3.11.3。

【问题讨论】:

【参考方案1】:

只是为了说明参数:

default_time_to_live:以秒为单位的 TTL(生存时间),其中零被禁用。最大可配置值为 630720000(20 年)。如果该值大于零,则为整个表启用 TTL,并为每列添加过期时间戳。每次更新数据时都会计算一个新的 TTL 时间戳,并在所有数据过期后删除该行。 默认值:0(禁用)。

gc_grace_seconds :在数据被标记为墓碑(删除标记)之后的秒数,它才有资格进行垃圾收集。默认值:864000(10 天)。默认值允许 Cassandra 有时间在删除之前最大化一致性。 注意:宽限期内的墓碑记录将被排除在提示或批量突变之外。

在您的情况下,您可以将 TTL 和 gc_grace_seconds 更新为 60 天,以便新数据在 60 天后过期。但是由于您现有的数据已经用 ttl 标记为 5 天,因此不会用新的 ttl 更新,将在 5 天内删除。据我所知,没有办法更新现有数据的 ttl。

【讨论】:

【参考方案2】:

我们可以通过两种方式设置 TTL 1) 从查询 2) 在表上。 只需更新该表上的 TTL 或使用新的 TTL 值重新插入查询。

【讨论】:

以上是关于Cassandra 数据上的 TTL Remover的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Achilles 更新 cassandra 中的 TTL,如果不存在则抛出异常

从没有墓碑和 ttl 的 Cassandra 中删除整个分区?

Cassandra remove the offline node

Cassandra 什么是墓碑

用于 TimeUUID 列的 Cassandra Map Reduce

Cassandra - 将一个巨大的字段设置为 null 而不归还磁盘空间