1

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

4

1 回答 1

1

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

我不知道如何在 Java 中做到这一点,但它可能类似于 .NET:

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

如果您只有几个知名文档,那么这应该很容易。

您还可以使用 N1QL 查询根据到期时间检索文档。有关更多信息,请参阅此博客文章,但要点是这样的查询:

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 秒内过期的文档。因此,您可以编写一个DELETE使用WHERE子句的 N1QL 查询。

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

于 2016-06-27T21:30:36.733 回答