Couchbase - 删除基于TTL的旧文档

时间:2016-06-27 14:25:15

标签: java couchbase couchbase-java-api

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

1 个答案:

答案 0 :(得分:1)

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

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

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