重置同步的 CouchDB 的状态



我们使用CouchDB和PouchDB在浏览器中复制远程数据库。 我们创建CouchDB的备份,以防万一出现问题。

在数据丢失时引入备份没有问题,但是将系统重置为旧状态似乎很难实现,这也应该影响所有同步的PouchDB。

例如:User1User2将本地 PouchDB 与远程 CouchDB 同步。User1创建一个新的文档D1该文档也会同步到远程数据库和User2。现在,User1想要将数据库重置为创建D1之前的状态。为此,用户删除自己的本地数据库并将远程 CouchDB 重置为以前的状态。当User1与远程 CouchDB 同步时,D1将不存在。但是User2的本地数据库中仍然有D1,一旦它与远程数据库同步,D1也将回到CouchDB并同步到User1的本地数据库。最终,系统将处于与重置之前相同的状态。

对于我们的项目,要求每个用户在备份系统之前删除本地数据库是不切实际的。

一个过程怎么会像这样将这样的分布式系统重置为旧状态。

一些额外的挑战:

  • 这个例子相当简单,应该只是给出一个大致的想法正在发生的事情。最后,可能有大量的创建,编辑和删除操作必须通过备份撤消。
  • 某些客户端在系统重置发生时可能处于脱机状态

好吧,没有简单的出路。一些选项是:

  1. 实际上不要删除数据库。相反,请调整还原方法,以便删除要还原的数据库中的所有文档,然后像备份中一样单独重新创建。您可以比较修订/使用_changes提要过滤掉可能保持不变的文档。

  2. 编程方式删除其他用户的本地数据库,然后再尝试同步,以防进行还原。

我不明白为什么在删除文档时必须从以前的状态恢复数据库 - 通常删除的数据库条目也会在其他同步客户端上被删除。

但是我有一个非常相似的设置,我必须定期删除CouchDB并设置一个新的。我所做的是向每个客户端发送一个信号,触发自动删除他的本地 PouchDB 并重新连接到数据库。效果很好。

最新更新