Это действительно зависит от вашего приложения.
Наиболее надежной системой, вероятно, будет мастер-среда с объектно-ориентированными базами данных, такими как CouchDB.
Есть некоторые, которые имеют отличную поддержку из коробки, но вы также можете сделать это на стороне приложения, которая, вероятно, более гибкая.
Подход, описанный в этом ответе, однако, работает хорошо, только если вы можете свести свои изменения к объектам документа.
Эта процедура выглядит следующим образом:
Каждый документ получает метку времени last_modification.
Клиент сохраняет метку времени, когда она последний раз синхронизировалась с сервером.
Удаленные документы не удаляются сразу, а получают отметку времени удаленного_
Когда соединение прерывается, клиент может продолжить изменять локальные документы
Когда соединение устанавливается снова, каждая модификация на сервере и клиенте, которая произошла после последней отметки времени синхронизации, извлекается.
Документы обновляются в обоих направлениях. Разрешение конфликтов в документах, которые были изменены с обеих сторон, выполняется на основе временной карты lsat_modification
Имейте в виду, что на сервере и клиенте могут быть небольшие смещения во времени, поэтому вы не можете на 100% полагаться на него. Синхронизация нужна. Также вы потеряете модификации, сделанные той стороной, которая изменила первой. Однако это должно быть проблемой, с которой вы можете столкнуться в своем приложении (например, системные конфликты cvs)
Также могут быть выбраны временные метки изменений документа и / или полей
Как уже говорилось, это действительно зависит от вашего приложения и многое другое от ваших данных.
Ваша проблема также возникает в системах CVS при разработке программного обеспечения (версии SVN и прочее!)
Представьте, что всегда выполняется svn-проверка, а затем svn-обновление. Маби, это возможно для вашего приложения, если вы храните свои данные в файлах XML или что-то подобное?
SVN немного старомоден, имеет некоторые недостатки и не настолько надежен, поэтому для этого случая он не подходит, но GIT может очень хорошо выполнять эту работу.
Системы мастер-репликации на основе SQL (Mysql и т. Д.) Также очень мощные, но в то же время довольно сложны в обслуживании и не так просты в настройке.
Я надеюсь, что этот ответ полезен, потому что я не совсем уверен в вашем случае использования, но если вы изложите его немного более подробно, я смогу помочь вам в дальнейшем.