Couchbase——基于TTL删除旧文档

Couchbase - deleting old documents based on TTL

我有一个沙发底桶,里面有很多文件。一段时间后,我发现这些文件正在迅速占用大量存储空间 space。我现在正在为将要存储的所有新文档设置 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;

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

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