【问题标题】:Set TTL for documents in Couchbase Server为 Couchbase 服务器中的文档设置 TTL
【发布时间】:2016-06-10 04:18:47
【问题描述】:

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

方法一: 一种方法是在服务器端创建一个视图,该视图将返回 createdDate 作为键。我们将在该视图中查询今天日期的键,这将返回今天的文档,我们可以为这些文档设置 TTL。但是我们如何以及何时调用此视图?这是一个好方法吗?

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

还有其他更好的方法吗?

还有什么方法可以为特定文档设置 TTL?

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

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

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

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

【问题讨论】:

  • 您使用哪个库来访问Couchbase?每个库都提供像addset 这样的方法,其中肯定有一个参数,您可以通过该参数设置Key 的TTL。如需仅为特定文档设置 TTL,请参阅 developer.couchbase.com/documentation/server/current/sdks/…
  • 我正在使用 .net sdk。我已经浏览了上述文件。但是,它适合通过 Sync Gateway 将文档从移动设备复制到服务器的流程中的什么地方呢?我将如何访问这些文档并为其设置 TTL?
  • 在您的系统中您可以通过库访问 Couchbase 的地方,您将使用库函数来设置 TTL。每个文档都将由一个密钥标识。所以你需要把这个关键信息传递给图书馆。假设 Module_A 可以访问 Couchbase,并且在 Module_X 中生成了复制文档的请求,那么您需要将所有必要的信息从 Module_X 传递给 Module_A。 Module_X 也应该有文档信息和代表 Couchbase 中文档的Key

标签: couchbase


【解决方案1】:

希望移动团队的某个人可以插话并确认这一点,但我认为移动 SDK 目前不允许设置到期时间。

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

【讨论】:

    【解决方案2】:

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

    我也会警惕可能需要 TTL 的工作负载(例如缓存),同步网关文档即使在被删除后也会占用空间,因此您的数据集可能会继续无限增长。

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

    • 访问文档时,如果它已过期,则手动删除它
    • 定期迭代 all docs 端点并删除您找到的任何过期时间已过去的文档。

    【讨论】:

    • 我将采用问题末尾提到的方法。如果有任何问题,请告诉我。
    • 我会非常谨慎地对 Sync Gateway 创建的任何文档设置 TTL,因为 Sync Gateway 不希望文档在没有直接通过 Sync Gateway 通信的情况下被删除。
    • 我找到了一种解决方法,可以将服务器上的文档删除传送到同步网关。我将为同步存储桶配置一个影子存储桶。删除将在影子存储桶上发生,并且此更改将通过同步网关复制到同步存储桶,同步网关将为该文档设置必要的元数据(例如 _deleted = true)。现在,此删除更改将自动复制到移动设备。让我知道你的想法。
    • 应该 工作,我会非常小心使用影子存储桶,因为它们将被正式弃用(而且它们甚至没有正式记录)。您还需要注意影子存储桶与修订树相关的行为,因为删除影子存储桶中的文档可能会在同步网关存储桶中留下其他活动修订。
    • 知道当 Shadowing 被弃用时,什么样的逻辑会取代它?我们能否在我们的案例中使用该逻辑?
    【解决方案3】:

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

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

    【讨论】:

    • 好的,但我的问题是,为从移动设备通过同步网关发送到服务器的文档设置 TTL 的方法应该是什么。
    • 这让我很困惑;这个答案是不正确的。文档过期后不会立即删除,也不会在过期后被访问后立即删除;当定期进程(过期寻呼机)扫描并删除过期文档时,它们会被删除。更清晰的解释在这里docs.couchbase.com/server/5.5/understanding-couchbase/…
    猜你喜欢
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多