从 CB 中删除未使用的密钥

问题描述 投票:0回答:2

我们在 CB 中有大约 100 万个密钥,每个密钥的有效期为 10 天。 基本上每隔 10 天我们就会运行一个计划,为这 100 万个密钥在 CB 中重新插入数据。

其中约有 50 万个未使用的密钥。无法确定哪些密钥将被使用,哪些不会。

我检查过是否有办法为一个键定义 2 个 TTL。

  1. 固定一定时间后删除记录。 (到期)
  2. 如果密钥在特定时间段内未使用,则删除记录

有什么方法可以删除这些未使用的密钥。

java spring-boot couchbase couchbase-java-api
2个回答
3
投票

这是在应用层很容易实现的东西。假设您希望在 90 天后删除所有新密钥并删除 30 天未使用的任何密钥。

创建文档时,添加创建时间戳字段和 30 天的 TTL。然后,当您的应用程序读取/更新文档时,您可以在文档上设置一个新的 TTL,计算为时间戳 + 90 天。

30 天后,任何未使用的文档都将过期,已访问和更新的文档将在 60 天后获得 TTL。

谢谢, Ian McCloy(首席产品经理,Couchbase)


0
投票

Couchbase Eventing 服务可以定期运行以删除旧数据,它不需要索引,因此在某些情况下这是一个很好的解决方案。这不像 Ian 的 TTL 方法那么干净,但如果你有一组混合文档,有些你想清除,有些你想保留。

参考这篇文章:https://forums.couchbase.com/t/delete-1-billion-doc-having-docs-key-company-name-employeeid/27261/4

请注意,在 Couchbase 的更高版本中,您还可以将常量传递给“cutoff_millis”时间戳的事件函数,或者只从 Date.now() 计算它。

如果您想自动执行此操作,您可以通过 Eventing REST API 和 crontab 作业进行部署和取消部署。

© www.soinside.com 2019 - 2024. All rights reserved.