如何处理跨多个客户端在 Couch 中删除数据库?
How to handle deleting databases in Couch across multiple clients?
在 CouchDB 中,有时您最终可能会在数据库中拥有比活动文档更多的已删除文档。一段时间后,这变得有些不理想,因为您同步的已删除文档数据比其他任何数据都多。
The official documentation recommends periodically destroying the databases in order to get around this,但我注意到执行此操作时发生的所有事情是客户端具有数据库的本地副本(例如,如果您有一个名为 "username" 的数据库,旨在通过 Pouch 复制到客户端设备),当它看到空白数据库时,重新填充它备份,删除文档记录和所有。
除了每次都更改数据库名称之外,是否有任何方法可以向其他 Couch 实例发出信号,告知它们不应重新填充新的、干净的数据库,而是将其完全作为一个新数据库?或者,事实上,任何其他解决方案?
是的,如果您有双向复制,那么 "other side" 会将所有已删除的文档复制回新数据库。我能想到的唯一两个选择是拥有一个新数据库(使用新名称,这可能是您链接到的文档的意思),或者使用 filtered replication 这样客户端就不会推送已删除的文档(或者不推送早于某个时间点的已删除文档)。
这些选项中的后者比前者复杂得多。
在 CouchDB 中,有时您最终可能会在数据库中拥有比活动文档更多的已删除文档。一段时间后,这变得有些不理想,因为您同步的已删除文档数据比其他任何数据都多。
The official documentation recommends periodically destroying the databases in order to get around this,但我注意到执行此操作时发生的所有事情是客户端具有数据库的本地副本(例如,如果您有一个名为 "username" 的数据库,旨在通过 Pouch 复制到客户端设备),当它看到空白数据库时,重新填充它备份,删除文档记录和所有。
除了每次都更改数据库名称之外,是否有任何方法可以向其他 Couch 实例发出信号,告知它们不应重新填充新的、干净的数据库,而是将其完全作为一个新数据库?或者,事实上,任何其他解决方案?
是的,如果您有双向复制,那么 "other side" 会将所有已删除的文档复制回新数据库。我能想到的唯一两个选择是拥有一个新数据库(使用新名称,这可能是您链接到的文档的意思),或者使用 filtered replication 这样客户端就不会推送已删除的文档(或者不推送早于某个时间点的已删除文档)。
这些选项中的后者比前者复杂得多。