这实际上取决于您的应用程序。
最健壮的系统可能是具有 CouchDB 等面向对象数据库的主主环境。
有一些开箱即用的强大支持,但您也可以在应用程序端进行,这可能更灵活。
但是,此答案中描述的方法仅在您可以将修改归结为文档实体时才有效。
程序如下:
每个文档都会收到一个 last_modification 时间戳。
客户端在上次与服务器同步时存储时间戳。
已删除的文档不会立即被删除,但会收到一个 deleted_at 时间戳
当连接中断时,客户端可以继续修改本地文档
当再次建立连接时,在获取最后一个同步时间戳之后发生的服务器和客户端上的所有修改。
文档会双向更新。双方都修改过的文档的冲突解决是基于 lsat_modification 时间图完成的
请记住,服务器和客户端上的时间可能存在小的偏移,因此您不能 100% 依赖它。需要同步。此外,您会丢失首先修改的一方所做的修改。但是,这应该是您可以在应用程序中处理的问题(例如 cvs 系统冲突)
还可以选择基于文档合并和/或字段的修改时间戳
正如已经说过的,这实际上取决于您的应用程序,而更多地取决于您的数据。
您的问题也出现在软件开发中的 CVS 系统中(SVN 修订版和其他东西!)
想象一下总是执行 svn 签入,然后执行 svn 更新。如果您将数据存储在 XML 文件或类似文件中,这可能适用于您的应用程序吗?
SVN 有点老派,有一些缺点并且不太可靠,因此对于这种情况它不适合,但 GIT 可能非常有能力完成这项工作。
基于 SQL(Mysql 等)的主主复制系统也非常强大,但也很难维护,也不容易设置。
我希望这个答案很有用,因为我不太确定您的用例,但是如果您说得更详细一点,我可能会为您提供进一步的帮助。