Подтвердить что ты не робот

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

У меня есть приложение для 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 для перемещения журналов транзакций. Я пытаюсь минимизировать затраты и сложность.

4b9b3361

Ответ 1

Переход на iCloud - это, пожалуй, лучшее решение, как это доказано и сделано Apple. Вам не нужно беспокоиться о требованиях к iOS 5, так как согласно большинству статистических данных более 90% используют его. iOS 5 можно обновить до. Затем вы можете переименовать свою старую версию как Lite и продолжить без синхронизации.

Синхронизация, вероятно, одна из самых сложных вещей, которые вы делаете.

Одно из решений, которое я сделал, состоит в том, что все изменения в базе данных оставляют журнал с отметкой времени, уникальным и несколькими другими вещами, чтобы убедиться, что транзакция полностью анонимна и полностью уникальна. Я сделал чрезвычайно простой веб-сервис с двумя операциями, вы можете добавить к нему транзакцию, поэтому я синхронизирую каждый раз, когда пользователь подключается к Wi-Fi, поэтому я нажимаю все изменения, получаю результат с сервера, а затем удаляю записи транзакций, поскольку они синхронизируются.

Другим действием является выборка записей, отправка метки времени последней синхронизации, идентификатора пользователя и т.д.

Все данные отправляются с использованием JSON и принимаются как таковые. Он может легко обрабатывать десятки тысяч пользователей, работающих на небольшом сервере Amazon EC2.

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

Надеюсь, это поможет вам.

Ответ 2

После того, как вы нашли время, чтобы вернуться к работе над приложением, а также с прохождением времени и выпуском репликации Core Data iCloud, я конвертировал свое приложение в Core Data (NSSQLiteStoreType) и отслеживал уведомления, такие как persistentStoreDidImportUbiquitousContentChanges. Использование легких переносов тоже. Хорошо работает.