我们使用CouchDB和PouchDB在浏览器中复制远程数据库。我们创建了CouchDB的备份,以防万一出现问题。
当数据丢失时引入备份是没有问题的,但是将系统重置到一个旧的状态,这也会影响所有同步的PouchDB,似乎很难实现。
例如:User1
和User2
将本地PouchDB与远程CouchDB同步。User1
创建新文档D1
,该文档也同步到远程数据库和User2
。现在User1
希望将数据库重置为创建D1
之前的状态。为此,用户删除自己的本地数据库并将远程CouchDB重置为先前状态。当User1
与远程CouchDB同步时,但是User2
在他的本地数据库中仍然有D1
,D1
也将回到CouchDB上并同步到User1
的本地数据库。最终系统处于重置前的状态。
对于我们的项目,要求每个用户在备份系统之前删除本地数据库是不切实际的。
一个程序怎么可能看起来像会重置这样一个分布式系统到一个旧的状态。
其他一些挑战:
- 这个例子相当简单,应该只是给予了一个大概的想法正在发生什么。最后可能有大量的创建,编辑和删除操作,必须与备份撤销。
- 系统重置时,某些客户端可能处于脱机状态
2条答案
按热度按时间rdrgkggo1#
好吧,没有简单的出路。一些选择是:
1.不要真的删除数据库。相反,调整您的恢复方法,以便删除要恢复的数据库中的所有文档,然后像备份中一样单独重新创建。您可以比较修订/使用
_changes
feed过滤掉可能保持不变的文档。1.在尝试同步之前,以编程方式删除其他用户的本地数据库,以防进行恢复。
1tu0hz3e2#
我不明白为什么在删除文档时必须从以前的状态恢复数据库-通常被删除的数据库条目在其他同步客户端上也会被删除。
但是我有一个非常类似的设置,我必须定期删除CouchDB并设置一个新的。我所做的是向每个客户端发送一个信号,触发自动删除其本地PouchDB并重新连接到DB。效果很好。