Разрабатываю что-то вроде системы совместной работы над общими данными. Предполагается интеграция с Google Drive, поэтому можно считать что своего сервера нет, и клиенты ответственны за целостность данных.
1) Допустим есть несколько клиентов, они скачали общий файл, ушли в оффлайн и начали его изменять (сначала клиент 1 изменил данные, затем клиент 2).
2) Клиент 1 соединился с drive, проверил версию файла, например через Custom properties, (
https://developers.google.com/drive/properties) и просто добавил свои данные.
3) Клиент 2 затем тоже подключился и увидел что версия имеющаяся у него в оффлайне старее той что на сервере. Каким образом залить его изменения?
Есть идея организовать все изменения в виде серии патчей (create, update, delete), а при подсоединении к сети скачивать свежую версию файла, применять к ней патчи (изменения, произведенные в оффлайне), но в момент применения патчей на клиентской стороне данные на сервере могут успеть измениться. Для этого наверное можно через те же Custom Properties организовать блокировку файла, но что делать если клиент не «разблокирует» файл? Ограничить время блокировки? Не очень хорошо если данных много и они на самом деле будут заливаться чуть дольше этого. Или есть более удачное решение такой проблемы, чем мои велосипеды?
upd 1: Небольшие эксперименты с Google Keep показали что он не умеет работать с конфликтами и просто сравнивает время изменения файла и хранит только свежее, т.е. в нашем случае изменения 1 клиента не сохранятся после подключения к сети клиента 2, и актуальными данными будут данные с клиента 2