В сегодняшнем мире, где множество компьютеров, мобильных устройств или веб-служб делят данные или действуют как концентраторы, синхронизация становится более важной. Как мы все знаем, решения, которые sync arent наиболее удобные и лучше всего не синхронизировать вообще.
Мне все же интересно узнать, как реализовать синхронизирующее решение для синхронизации между несколькими объектами. Существует уже много разных подходов, таких как сравнение измененного поля даты или хэша и использование самых последних данных или позволяющий пользователю выбрать то, что он хочет использовать в случае конфликта. Другой подход - попытаться автоматически объединить конфликтующие данные (что, на мой взгляд, не так умно, потому что машина не может угадать, что имел в виду пользователь).
В любом случае, вот несколько вопросов, связанных с синхронизацией, на которые мы должны ответить, прежде чем приступать к реализации синхронизации:
- Каковы последние данные? Как я могу представить его?
- Что мне делать в случае конфликта? Слияние? Я предлагаю и спрашиваю пользователя, что делать?
- Что мне делать, когда я попадаю в несогласованное состояние (например, отключается из-за плохого мобильного сетевого подключения)?
- Что мне делать, когда я не хочу попасть в несогласованное состояние?
- Как возобновить текущую синхронизацию, которая была прервана?
- Как мне обрабатывать хранилище данных (например, базу данных MySQL в веб-службе, основные данные на iPhone и как объединить/синхронизировать данные без большого количества кода клейма)?
- Как мне обрабатывать изменения от пользователя, которые происходят во время синхронизации (который работает в фоновом режиме, поэтому пользовательский интерфейс не заблокирован)?
- Как и в каком направлении я распространяю изменения (например, пользователь создает запись "Foo" на своем компьютере и не синхронизируется, затем переходит в режим ожидания и создает еще одну запись "Foo" , что происходит, когда он пытается синхронизировать оба устройства)? Будет ли у пользователя две записи "Foo" с разными уникальными идентификаторами? Будет ли у пользователя только одна запись, но какая?
- Как мне обрабатывать синхронизацию, когда у меня есть иерархические данные? Низходящий? Вверх дном? Я обрабатываю каждую запись атомарно или я смотрю только на супернов? Насколько велика компромисс между упрощением вещей и инвестированием слишком много времени в реализацию?
- ...
Есть много других вопросов, и я надеюсь, что могу вас вдохновить. Синхронизация - довольно общая проблема. После того, как будет найден хороший, универсальный подход синхронизации, его должно быть проще применить к конкретному приложению, а не начинать думать с нуля. Я понимаю, что уже существует множество приложений, которые пытаются решить (или успешно решить) синхронизацию, но они уже довольно специфичны и не дают достаточного количества ответов на общие подходы к синхронизации.