У меня есть приложение для iPhone (iOS), которое хранит данные в локальной базе данных SQLite на каждом устройстве. Приложение используется для управления виртуальным банковским счетом для детей, чтобы отслеживать их пособия, расходы, сбережения и т. Д. (KidsBank и KidsBank Free). Я получаю множество запросов от родителей на предоставление возможности синхронизации между родителями и, возможно, даже устройствами iOS их детей.
Я рассмотрел несколько вариантов, но все они утомительны и нетривиальны, поскольку это в основном требует репликации базы данных или новой архитектуры. Любая транзакция на любом устройстве в идеале должна отображаться (синхронизироваться) со всеми устройствами в семействе (как можно скорее).
В идеале, я хотел бы, чтобы синхронизация была автоматической и не включалась
Опции включают
(1) Использование iCloud
(2) Используйте прямое сетевое соединение между устройствами (Wi-Fi)
(3) Использование базы данных и веб-службы на стороне сервера (JSON / RESTFul)
(1) iCloud
PRO: iCloud обеспечивает синхронизацию распределенных файлов
CON: требуется iOS 5, файлы базы данных SQLite не могут быть синхронизированы через iCloud, классическая репликация базы данных (и нетривиальная)
Использование iCloud является серьезным фактором. Устройства могут записывать собственный журнал транзакций в файл iCloud, где для каждого устройства есть один файл, идентифицируемый уникальным идентификатором устройства. Глобальные уникальные идентификаторы (GID) и отметки времени последнего изменения добавляются в каждую таблицу. Все участвующие устройства будут записывать уникальный идентификатор устройства в отдельный файл в iCloud. После запуска приложения или изменения файла журнала приложение, запущенное на определенном устройстве, загрузит все транзакции, но не те, которые были сгенерированы на их собственном устройстве, из файлов через iCloud. Последнее участвующее устройство для загрузки транзакции удалит транзакцию из файла. Если устройство не является последним участвующим устройством, оно просто подписывает транзакцию и позволяет файлу синхронизироваться через iCloud. Возможно, есть лучшие алгоритмы, но основная идея та же - использование iCloud для просмотра журналов изменений.
(2) Прямое соединение Wi-Fi позволит двум устройствам выполнить sych вручную.
PRO: не так сложно управлять процессом синхронизации
CON: пользователи должны оба выбрать синхронизацию из своих приложений при подключении по Wi-Fi
(3) Переместить всю базу данных или управлять транзакциями на сервере.
PRO: синхронизация больше не требуется
CON: Типичные проблемы для веб-приложения. Потребуется переписать слой службы базы данных (в настоящее время в SQL), чтобы использовать удаленный веб-сервис. Стоимость запуска сервера (я бы использовал AWS).
Может ли кто-нибудь предложить некоторый опыт синхронизации SQLite между несколькими устройствами? Я склоняюсь к использованию iCloud для просмотра журналов транзакций. Я пытаюсь минимизировать стоимость и сложность.