【问题标题】:How to handle deleting databases in Couch across multiple clients?如何处理跨多个客户端删除 Couch 中的数据库?
【发布时间】:2017-05-17 22:27:26
【问题描述】:

在 CouchDB 中,有时最终您可能会在数据库中拥有比活动文档更多的已删除文档。一段时间后,这变得有点不太理想,因为您同步的已删除文档数据比其他任何东西都多。

The official documentation recommends periodically destroying the databases in order to get around this,但我注意到这样做时发生的所有事情都是客户端具有数据库的本地副本(例如,如果您有一个名为“用户名”的数据库,旨在通过以下方式复制到客户端设备Pouch),当它看到空白数据库时,将其重新填充备份,删除文档记录等。

除了每次都更改数据库名称之外,有什么方法可以向其他 Couch 实例发出信号,表明它们不应该重新填充新的干净的数据库,而是完全将其作为一个新数据库?或者,事实上,还有其他解决方案吗?

【问题讨论】:

    标签: database optimization couchdb database-replication pouchdb


    【解决方案1】:

    是的,如果您有双向复制,那么“另一方”会将所有已删除的文档复制回新数据库。我能想到的唯一两个选择是拥有一个新数据库(使用新名称,这就是您链接到的文档可能的意思),或者使用filtered replication 这样客户端就不会推送已删除的文档(或不会推送早于某个时间点的已删除文档)。

    这些选项中的后者比前者复杂得多。

    【讨论】:

    • 拥有一个新名称的新数据库是我试图避免的事情,因为我每次都必须以某种方式获取数据库名称。并不是说这很困难,只是不理想。过滤复制可能有用,但是如果没有删除的文档,具有已删除文档的未删除副本的旧客户端只会将完整文档放回数据库中(这有点难以理解,但在我的头!)。
    • 是的,您的过滤需要包含逻辑,以便它只过滤已删除的已删除文档,这些文档已被删除足够长的时间,以至于您确信它们在所有地方都被删除了。是的,数据库重命名需要您在所有客户端中参数化您的数据库名称,并有办法更新它们 - 正如您所指出的那样,这很容易做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多