【问题标题】:Purging documents in Couchbase Lite在 Couchbase Lite 中清除文档
【发布时间】:2016-03-28 02:04:33
【问题描述】:

我有一个使用 Couchbase lite 的移动应用程序。当用户注销时,我想删除设备上的一些文件;用户特定的文档。我不想删除所有文件。文档有一个purgeDocument() 方法,我认为我可以调用这些用户特定的文档。

问题在于,如果用户重新登录并运行拉取复制,则清除的文档不会重新同步到设备。

根据我对 CouchDB 同步协议的了解很少,这些不会重新同步是有道理的,因为这些用户特定文档上没有更新的序列更新来触发重新同步。

我应该如何解决这个问题?

可能性

  1. 删除整个数据库(包括常用文档)并失去性能。
  2. 不知何故重置了复制器的最后一个序列,并希望复制器不会通过网络传输已下载的文档。 (可能会搞砸 CBL)
  3. 拥有单独的数据库,一个存储用户特定的文档,一个包含通用文档。数据库可以具有过滤的复制器(按通道),因此将传入数据分区到单独的数据库中是可行的。当使用 CBLModel 对象包装器时,问题将是不同数据库的文档之间的无缝引用加载。

【问题讨论】:

  • 我相信你应该选择第三个
  • 我不知道如果我必须管理另一个数据库会遇到的开销或不必要的复杂性。

标签: couchdb couchbase couchbase-lite couchbase-sync-gateway


【解决方案1】:

在使用 Couchbase Lite 清除文档后尝试推送,这允许您稍后从服务器中提取文档。

【讨论】:

    【解决方案2】:

    您可以在用户登录时继续清除文档。

    为了解决重新同步特定文档的问题,我认为最简单的方法是使用过滤复制,其中过滤器是文档 ID。

    这些文档 ID 可以通过可派生的方式创建。例如,它可以是 UserDocument::。

    现在,当用户登录时,您可以使用文档 ID 作为过滤器开始一次镜头复制。这只能一次性完成。当此 One Shot 完成时,您可以通过更改复制设置(更改过滤器/通道)再次开始复制。

    以下是 Couchbase 的 URL,它解释了按文档 ID 过滤复制。

    https://developer.couchbase.com/documentation/mobile/1.4/guides/couchbase-lite/native-api/replication/index.html#filtering-by-document-ids

    【讨论】:

      【解决方案3】:

      我建议您的后端在用户登录时修改所选文档 - 这可能只是时间戳更新,这会将新修订发布到设备上

      【讨论】:

        【解决方案4】:

        我从 Purging documents 小节中的 official documentation 了解到,您不会因为文档没有被修改/更新而再次检索该文档(简而言之,它的 rev 是相同的)在服务器端。

        当用户再次登录您的应用程序时,您可以尝试再次创建一个具有相同类型的虚拟文档,例如用户名(或您用来识别用户配置的任何内容),以便您触发从服务器。您可能会遇到可以从服务器获取修订版轻松解决的冲突。

        我希望这个想法能有所帮助。

        评论后更新

        这个想法是将您要清除的用户文档的idtype 存储在某处。这样,当用户再次登录时,您可以使用这两个字段创建一个新的虚拟文档。也许这个新的虚拟文档会触发拉取复制。

        注意:我还没有尝试过这种方法。我只是猜测它可能是解决您的问题的方法。

        【讨论】:

        • 所以你的意思是在登录时,我创建一个重复的用户记录,我知道服务器上存在但在设备上丢失,然后服务器将发送正确的文档?我不明白为什么服务器会推送冲突的修订。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-26
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        相关资源
        最近更新 更多