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 文件。
我有一个沙发底桶,里面有很多文件。一段时间后,我发现这些文件正在迅速占用大量存储空间 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 文件。