Couchbase -基于TTL删除旧文档



我有一个包含许多文档的couchbase桶。经过一段时间,我发现这些文档正在迅速占用大量的存储空间。我现在正在为将要存储的所有新文档设置TTL。是否有办法为所有现有文档设置TTL或根据过期时间删除现有文档?不同的文档根据文档类型有不同的过期时间(从15分钟到1个月不等)。你能建议一个我可以使用的方法吗?

您可以在文档上设置expiration,然后更新该文档。当然,您得把所有的文件都看一遍,并为每份文件设置有效期。

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

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

最新更新