java - Couchbase - 根据 TTL 删除旧文档

标签 java couchbase couchbase-java-api

我有一个沙发底座桶,里面有许多文档。一段时间以来,我发现这些文档正在迅速占用大量的存储空间。我现在正在为所有将要存储的新文档设置 TTL。有没有办法为所有现有文档设置 TTL 或根据过期时间删除现有文档?不同的文档根据文档类型的不同,其过期时间也不同(从15分钟到1个月不等)。请问您能建议我可以使用的方法吗?

最佳答案

您可以在文档上设置过期时间,然后更新该文档。当然,您必须检查所有文档并为每个文档设置到期日。

我不知道如何在 Java 中执行此操作,但它可能类似于 .NET:

// get the document into a variable named 'doc', then
doc.Expiry = 123;
_bucket.Update(doc);

如果您只有一些众所周知的文档,那么这应该很容易。

您还可以使用 N1QL 查询根据到期时间检索文档。 See this blog post for more information ,但要点是这样的查询:

SELECT META(default).id, *
FROM default 
WHERE DATE_DIFF_STR(STR_TO_UTC(exp_datetime),MILLIS_TO_UTC(DATE_ADD_MILLIS(NOW_MILLIS(),30,"second")),"second") < 30 
  AND STR_TO_UTC(exp_datetime) IS NOT MISSING;

这将选择将在 30 秒内过期的文档。因此,您可以编写一个使用 WHERE 子句的 N1QL DELETE 查询。

更新:Couchbase 的一位同事向我指出 issue MB-16242 。您还无法使用 N1QL UPDATE 设置过期时间。。但正如我上面所说,您可以根据到期时间选择/删除文档。

关于java - Couchbase - 根据 TTL 删除旧文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38056490/

相关文章:

当节点宕机时 Couchbase 会爬行吗?不应该很快就失败吗?

JavaFX 在 FXML 中定义内部类

java - 如何在 Android 中使用 jar 文件显示图像?

JavaFX 8 - 如何在 HTMLEditor 上按下退格键?

java - 如何配置java客户端让couchbase自动重新连接?

node.js - 使用 node.js 多次插入 Couchbase

java - Couchbase 集群 - 为 Java SDK2 发现不可用的服务器

java - 当第一个节点没有响应时,Couchbase Client Java SDK 不会使用另一个集群节点

java - 如何使 gif 运行一次并在 Java 中停止?

java - Couchbase 在 N1QL 参数化查询中使用了错误的索引