为Couchbase Server中的文档设置TTL

时间:2016-06-10 04:18:48

标签: couchbase

我想在couchbase服务器上设置TTL(生存时间),以便连续从移动设备推送所有文件进行复制。我没有在文档中找到任何明确的解释/示例来执行此操作。 应该通过Sync Gateway为从移动设备到服务器的文档设置TTL的方法是什么。

方法1: 一种方法是在服务器端创建一个视图,将createDate作为键返回。我们将查询该视图以获取今天日期的密钥,这些密钥将返回今天的文档,我们可以为这些文档设置TTL。但是我们如何以及何时称之为这种观点,这是一种好方法吗?

方法2: 我是否应该使用webhooks来监听通过Couchbase Lite推送复制进行的文档更改(创建),为新文档设置TTL并保存回Couchbase服务器?

还有其他更好的方法吗?

另外,仅为特定文档设置TTL的方法是什么?

编辑:我最后的方法: 我将在couchbase服务器上创建以下视图:

function (doc, meta) {
  emit(dateToArray(doc.createdDate));
}

我将有一份工作,每天在EOD运行,查询视图以获取今天创建的文档,并为这些文档设置TTL。 通过这种方式,我可以定期删除文档。

如果有任何问题或者有更好的方法,请告诉我。

3 个答案:

答案 0 :(得分:0)

当达到TTL时,Couchbase不会删除; 相反,当您访问(过期)文档时, 然后Couchbase检查到期,在那一刻删除它。

http://developer.couchbase.com/documentation/server/4.0/developer-guide/expiry.html

答案 1 :(得分:0)

希望来自移动团队的人可以插入并确认这一点,但我认为移动SDK不允许此刻设置到期日。

我想您可以在文档中添加创建/更新时间,并创建一个批处理作业,使用“核心”SDK定期查找旧文档(通过N1QL或专用视图)并删除它们。

答案 2 :(得分:0)

目前无法像使用Couchbase Server智能客户端那样通过Sync Gateway设置文档的TTL。使用文档上的本机样式TTL,Sync Gateway存在概念阻抗不匹配。这是因为同步网关协议基于revision trees运行,即使文档被删除,仍然有一个文档可以标记已删除的文档

我也会对可能需要TTL(例如缓存)的工作负载持谨慎态度,Sync Gateway文档即使在被删除后也会占用空间,因此您的数据集可能会继续无限增长。

如果您确实需要TTL,并且如果您认为数据集大小不是问题,那么最好的方法是在文档中存储一个表示文档到期时间的字段。然后你会做两件事:

  • 访问文档时,如果文档已过期,则手动将其删除
  • 定期遍历all docs端点并删除过去找到的所有文件。