Я пытаюсь реализовать синхронизацию / слияние, это звучит так, как это будет работать? - PullRequest
0 голосов
/ 13 января 2012

У меня есть приложение с кучей базовых данных, которые необходимо синхронизировать. Я собираюсь использовать Dropbox для синхронизации нескольких устройств вместе, по крайней мере, если не найду лучшего решения. Есть 4 основных момента, которые необходимо синхронизировать: врачи, жители и два разных типа точек (которые размещены пользователем на графике). У меня нет идентификаторов, привязанных к этим объектам, потому что я думал, что это будет слишком сложно для синхронизации. Я думал о синхронизации их так:

  • Я составляю список из трех под-словарей, которые называются «добавить» и «удалить». Оба («добавить» и «удалить») имеют массив для каждой сущности, которую мне нужно синхронизировать (врач, резидент, очки и т. Д.).
  • Каждый раз, когда пользователь добавляет или удаляет одну из этих вещей, я добавляю новый словарь в соответствующий массив, содержащий все атрибуты и значения атрибутов для этого объекта, который был добавлен / удален.
  • Изменения (вы можете редактировать только точки, а не жителей или врачей) для чего-либо записываются путем добавления нового отредактированного объекта и удаления старого объекта. Таким образом, новый объект добавляется в соответствующий список «добавления», а старый объект добавляется в соответствующий список «удаления»
  • В Dropbox каждое устройство, которое мы пытаемся синхронизировать, имеет папку. Когда он синхронизируется, он загружает файл plist в свою собственную папку устройства. Он также создает резервную копию своего собственного файла sql, загружая его в папку с именем и датой.
  • Затем он проверяет все папки другого устройства и применяет изменения в списках, найденных в этих папках.
  • После того, как все изменения внесены в собственную локальную базу данных и сохранены, они выгружают файл sql в «новейшую» папку в выпадающем списке.
  • Если устройство хочет сбросить свою базу данных или присоединяется новое устройство, оно просто загружает файл sql из самой новой папки.

Есть мысли / идеи / предложения? Спасибо

Ответы [ 2 ]

0 голосов
/ 06 апреля 2012

В конечном итоге я использовал эту модель более или менее, но вместо того, чтобы устройство проверяло все наборы изменений других устройств, оно проверяет набор изменений в своей папке устройства, в которую все другие устройства записывают данные по мере внесения изменений. Таким образом, намного проще организовать изменения в хронологическом порядке. Эта модель хорошо зарекомендовала себя для всех, кому интересно.

* обратите внимание, что я отвечаю на свой вопрос, чтобы люди знали, что я в итоге делал, и что это сработало. извините, это не был действительно вопрос с прямым ответом.

0 голосов
/ 14 января 2012

Чтобы это работало, вам нужно синхронизировать по сети - что на самом деле невозможно. Это очень и очень трудно решить. Поддержка iCloud в iOS 5 решает эту проблему, но это совсем не тривиально.

Вам необходимо записать все изменения в вашу локальную базу данных в файл журнала на сервере, и у каждого изменения должна быть версия. Вы должны иметь возможность объединять все изменения из сети (то есть воспроизводить, а затем возвращать в локальную базу данных) и обрабатывать конфликты объединения (у вас могут быть локальные изменения, конфликтующие с входящими изменениями).

У меня очень высокая база данных на сервере, и приложение обращается к этой базе данных (например, через REST). Для этого вам понадобится сервер.

Ваш подход обречен на провал. К сожалению.

...