【问题标题】:Determine TTL of stored documents - Couchbase确定存储文档的 TTL - Couchbase
【发布时间】:2016-10-29 18:22:13
【问题描述】:

我有一堆文档存储在 couchbase 存储桶中。我想找到每个文档的 TTL。有办法吗?

编辑:

我创建了一个视图来显示元数据。我假设下面是 unix 的到期时间。

{
   "id": "beer-Milk-New",
   "rev": "9-145c05b4021400005771779102000000",
   "expiration": 1467053969,
   "flags": 33554432
}

【问题讨论】:

    标签: couchbase ttl


    【解决方案1】:

    您没有指定 Couchbase Server 的哪个版本,但此答案假定您使用的是 4.x 并且可以运行 N1QL 查询。

    我认为你在正确的轨道上。查看这篇关于在到期之前检测到期的博文:http://blog.couchbase.com/2016/april/detecting-expirations-of-documents-with-couchbase-server-and-n1ql

    基本上你需要两个步骤。首先,创建一个关于过期时间的索引。

    CREATE INDEX iExpiration ON default(exp_datetime) USING GSI;
    

    这不是严格必要的,我不认为,但它会提高性能。

    其次,只需运行如下所示的 N1QL 查询(它将列出将在接下来的 30 秒内过期的文档)。

    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;
    

    因此,如果您想找到每个文档的 TTL,您可能需要从当前时间中减去 exp_datetime(我相信是 CLOCK_MILLIS())。

    【讨论】:

    • 请注意这里的exp_datetime必须为每个文档显式添加和维护。 Couchbase 不会通过普通方式自动暴露实际的 TTL。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多