Точная синхронизация данных часто зависит от вашего приложения и ваших данных. Это выходит за рамки SO вопроса, но вот некоторые мысли, если вы реализуете свой собственный ...
Некоторые интересные моменты дизайна:
- Надежно получая дельту
- Работа с конфликтами
- Насколько в режиме реального времени?
Для надежного получения дельты будьте осторожны, полагаясь на дату и время для распределенных машин. В этом посте обсуждались некоторые из этих проблем и некоторые альтернативы.
Можно ли рассчитывать на правильность часов устройства iOS?
Объединять новые сущности легко, но если несколько человек редактируют одну и ту же сущность, вам нужно решить, как объединить. Для конфликтов вы можете в порядке предпочтения (1) автоматическое объединение - придумать алгоритм, который автоматически объединяет содержимое без вмешательства пользователя и в идеале без потери данных (2) полагаться на пользователя для объединения с интерфейс и (3) форма автоматического слияния: последняя запись выигрывает. Также есть варианты, в которых вы чередуете ревизии - это форма побед последней записи, но ревизии сохраняются. Вы также можете автоматически объединить на уровне поля сущности, если это уместно. Мой пост на вопрос выше касается чередования, но это зависит от ваших данных.
Насколько реально в реальном времени? При синхронизации время от времени подключенных устройств устройства будут все дальше и дальше устареть, и потребуется время, чтобы наверстать упущенное. Рассмотрим пакетные наборы изменений в шаблоне связи для оптимизации, но это все равно не будет в реальном времени. Примите это во внимание в проекте - видит ли пользователь, что данные оживляются в текущих представлениях при синхронизации данных?
С архитектурной точки зрения вы, вероятно, захотите представить свои данные в облаке через службы REST или веб-службы SOAP, поскольку они кроссплатформенные. Для платформ с несколькими устройствами вы, скорее всего, в конечном итоге перенесете алгоритм синхронизации. Лучшее, на что вы можете надеяться, это использовать что-то вроде Sqlite, чтобы вы могли делиться кодом схемы базы данных ваших устройств и операторами SQL.