У меня есть приложение для 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 позволит двум устройствам вручную синхронизировать. PRO: Не так сложно управлять процессом синхронизации CON: пользователи должны выбирать синхронизацию из своих приложений при подключении к Wi-Fi
(3) Переместить всю базу данных или управлять транзакциями на сервере. PRO: синхронизация больше не требуется CON: Типичные проблемы для веб-приложения. Необходимо будет переписать уровень службы базы данных (в настоящее время в SQL) для использования удаленного веб-сервиса. Стоимость запуска сервера (я бы использовал AWS).
Может ли кто-нибудь предложить некоторый опыт синхронизации SQLite между несколькими устройствами? Я склоняюсь в сторону использования iCloud для перемещения журналов транзакций. Я пытаюсь минимизировать затраты и сложность.