我们在 CB 中有大约 100 万个密钥,每个密钥的有效期为 10 天。 基本上每隔 10 天我们就会运行一个计划,为这 100 万个密钥在 CB 中重新插入数据。
其中约有 50 万个未使用的密钥。无法确定哪些密钥将被使用,哪些不会。
我检查过是否有办法为一个键定义 2 个 TTL。
有什么方法可以删除这些未使用的密钥。
这是在应用层很容易实现的东西。假设您希望在 90 天后删除所有新密钥并删除 30 天未使用的任何密钥。
创建文档时,添加创建时间戳字段和 30 天的 TTL。然后,当您的应用程序读取/更新文档时,您可以在文档上设置一个新的 TTL,计算为时间戳 + 90 天。
30 天后,任何未使用的文档都将过期,已访问和更新的文档将在 60 天后获得 TTL。
谢谢, Ian McCloy(首席产品经理,Couchbase)
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 作业进行部署和取消部署。