在远程数据库中清除文档后如何重新复制文档

How to re-replicate documents after they have been purged in remote database

我有一个应用程序,其中远程数据库中可用的文档是服务器上可用文档的子集。当用户所需的子集发生变化时,远程数据库中不再需要的文档将被清除(是的,清除,而不是删除)并复制新文档。如果用户所需的子集被更改为包括以前已清除的文档,我找不到一种方法来再次复制已清除的文档以在客户端上恢复它们​​。

要考虑的一个简单场景是:

  1. 创建两个数据库,A 和 B
  2. 在 A
  3. 中创建文档 "D"
  4. 将数据库 A 复制到 B
  5. 在 B 中,清除 D
  6. 再次将A复制到B,注意D没有被复制

我试过压缩B,但没有用。我可以理解为不断复制,D不会再发送,因为它没有变化。但是我也无法使用一次性复制来重新复制 D。一旦 CouchDB 处于这种状态,我如何制作从 A 到 B 的复制副本 D?

我正在使用 CouchDB 2.3。

复制完成后,CouchDB 在每个节点上存储一个本地 replication log

它可能正在获取此日志,并从它停止的地方继续,因此忽略了上次复制之前发生的更改(例如创建现在已清除的文档)。

我可以想到两个解决方案:

  1. 通过查找 _local/ 文档并删除它们来手动删除这些复制日志。

  2. 更改复制参数,哪怕是稍微更改一下,以便 CouchDB 生成一个新的 replication ID 以便进行日志记录。一种方法是添加一个过滤函数(它可以是一个不过滤任何东西的过滤函数)。