Да, я знаю, что есть пара вопросов, связанных с синхронизацией с iPhone и Web DB, но ни один из них мне не помог.
Я также много гуглил, но редко встречал информацию о двусторонней синхронизации. Может быть, я просто использовал неправильные ключевые слова.
Я создаю приложение прямо сейчас, и у меня возникла идея добавить две синхронизации к моему приложению и моему веб-сервису.
Моей первой мыслью было, что это будет нелепо легко, но оказывается, что это не так просто.
Я нашел пару проблем и некоторые решения своих проблем, но я хотел бы услышать от вас, ребята, будут ли эти мысли создавать другие проблемы или эти решения хорошие или плохие.
Идея моего приложения состоит в том, чтобы помочь мне синхронизировать свои заметки, которые я буду брать с собой на ходу с iPhone, на работе или дома с веб-приложением.
Эти два конца всегда должны синхронизироваться, потому что я не знаю, какое устройство (iPhone или компьютер) я буду использовать, чтобы взять, отредактировать или просто прочитать мои заметки.
Что у меня с обеих сторон:
Для моего веб-сервиса (и веб-приложения) я буду использовать rails, и я думаю, что mysql на стороне БД.
На iPhone я буду использовать БД SQLite с оболочкой Objective-C (FMDB).
Оба будут обмениваться данными через JSON (используя фреймворк JSON на стороне iPhone).
Мои идеи пока:
Первичный ключ должен быть уникальным с обеих сторон
В качестве первичного ключа я буду использовать UUID
. Я думаю, что это уникальное решение с обеих сторон, и оно не создаст дубликатов (по крайней мере, я надеюсь).
Редакции для изменения данных
Каждое изменение будет сохранено как ревизия с ключом SHA1
, который я создам из date + note data
.
Объект ревизии также включает в себя такую информацию, как:
- дата
- какой объект примечания относится к этой ревизии
- изменения сделаны на каком устройстве?
- что меняли? (на самом деле я не уверен, что включу эту информацию)
Мое "решение" до сих пор состоит в том, что я буду отслеживать каждую модификацию (создавать, обновлять, удалять) в таблице историй с ревизиями с обеих сторон.
Со стороны iPhone я сначала обновлю свою таблицу истории из веб-базы данных, а затем зафиксирую свои изменения в веб-базе данных.
Это должно работать, верно?
Это звучит не так уж плохо для меня, но мой вопрос здесь заключается в том, как я могу справиться с конфликтами? Я не хочу беспокоить пользователя сообщениями о том, как обрабатывать конфликты.
Сводка моих вопросов:
- Мое "решение" хорошо или плохо? Что я должен изменить, чтобы сделать его лучше?
- Как я могу обрабатывать конфликты изменений, чтобы пользователь их не замечал?
- У вас есть какие-нибудь ресурсы, которые я мог бы прочитать о двусторонней сортировке?
EDIT:
Спасибо всем за ваши ответы. Теперь я знаю, что я не одинок в этой «проблеме», и не существует простого и подходящего решения для всех приложений. Я предполагаю, что до сих пор хорошо справляюсь со своими идеями или решениями и постараюсь придумать правила синхронизации.
Моя идея на данный момент такова: я разработаю его настолько просто, насколько это возможно, и буду использовать его для своих собственных нужд. Решите проблемы, которые я обнаружил при использовании и синхронизации. После этого я приглашаю своих друзей проверить и решить проблемы, которые у них есть.
Я думаю, что таким образом я могу придумать реальные правила синхронизации моих данных с Интернетом, потому что я вижу, что на самом деле делают люди и где проблемы.
Что вы думаете?