Приложение для iPhone (iOS), использующее локальный sqlite и желающее синхронизировать между несколькими устройствами

У меня есть приложение для iPhone (iOS), которое хранит данные в локальной базе данных SQLite на каждом устройстве. Приложение используется для управления виртуальным банковским счетом для детей, чтобы отслеживать их пособия, расходы, сбережения и т. Д. (KidsBank и KidsBank Free). Я получаю много запросов от родителей о предоставлении возможности синхронизации между родителями и, возможно, даже их детские устройства iOS.

Я рассмотрел несколько вариантов, но все они утомительны и нетривиальны, поскольку в основном это требует репликации базы данных или новой архитектуры. Любая транзакция на любом устройстве в идеале должна отображаться (синхронизироваться) для всех устройств в семействе (как можно быстрее).

В идеале, я бы хотел, чтобы синхронизация была автоматической и отключена.

Возможные варианты: (1) Использование iCloud (2) Используйте прямое сетевое соединение между устройствами (Wi-Fi) (3) Использование базы данных на стороне сервера и веб-службы (JSON / RESTFul)

(1) iCloud PRO: iCloud обеспечивает распределенную синхронизацию файлов ПРОТИВ: Требуется iOS 5, файлы базы данных SQLite не могут быть синхронизированы через iCloud, классическая репликация базы данных (и нетривиально)

Использование iCloud является серьезным соображением. Устройства могут записывать собственный журнал транзакций в файл iCloud, где есть один файл для каждого устройства, идентифицированного уникальным идентификатором устройства. В каждую таблицу добавляются глобальные уникальные идентификаторы (GID) и отметки времени последнего изменения. Все участвующие устройства запишут уникальный идентификатор устройства в отдельный файл в iCloud. При запуске приложения или при изменении файла журнала приложение, работающее на определенном устройстве, будет загружать все транзакции, но не те, которые сгенерированы на их собственном устройстве, из файлов через iCloud. Последнее участвующее устройство, загрузившее транзакцию, удалит транзакцию из файла. Если устройство не является последним участвующим устройством, оно просто подписывает транзакцию и позволяет файлу синхронизироваться через iCloud. Могут быть алгоритмы получше, но основная идея та же - использование iCloud для просмотра журналов изменений.

(2) Прямое соединение Wi-Fi позволит двум устройствам синхронизироваться вручную.ЗА: Не так сложно управлять процессом синхронизации ПРОТИВ: Пользователи должны выбрать синхронизацию из своих приложений при подключении к Wi-Fi

(3) Переместить всю базу данных или управлять транзакциями на сервере. PRO: синхронизация больше не требуется ПРОТИВ: типичные проблемы для веб-приложений. Потребуется переписать уровень службы базы данных (в настоящее время в SQL), чтобы использовать удаленную веб-службу. Стоимость запуска сервера (я бы использовал AWS).

Может ли кто-нибудь предложить опыт синхронизации SQLite между несколькими устройствами? Я склоняюсь к использованию iCloud для просмотра журналов транзакций. Я стараюсь минимизировать стоимость и сложность.

12
задан Bill Bunting 5 February 2012 в 04:32
поделиться