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

IOS - Основные рекомендации по синхронизации базы данных и базы данных сервера

Я начинаю настраивать базовую модель данных для крупномасштабного приложения и надеялся на некоторую обратную связь о правильных методах/методах синхронизации, когда речь идет о базе данных сервера и автономных возможностях.

Я использую PHP и mySQL для своего веб-сервера/базы данных.

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

A) Убедитесь, что приложение и сервер синхронизируются во время онлайн-и офлайн-использования (т.е. автономная активность будет активирована сразу же). B) Оптимизируйте скорость сохранения данных в приложении.

Мои главные вопросы:

Каков наилучший способ проверить, какие новые/обновленные данные в приложении все еще нужно синхронизировать (после использования в автономном режиме)?

(т.е. во всех моих основных объектах данных я помещаю атрибут "isSynchronized" типа BOOL, а затем обновляюсь до "YES" после успешной отправки и ответ отправляется с сервера). Это лучший способ?

Каков наилучший способ оптимизации скорости хранения данных с сервера на основные данные?

(т.е. как я могу только обновлять данные в Core Data, которые старше, чем в базе данных сервера, без повторения каждой сущности и просто обновления каждый раз)? Можно ли без добавления столбца базы данных сервера отслеживать отметки времени обновления для КАЖДОЙ таблицы?

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

4b9b3361

Ответ 1

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

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

Производительность - это проблема, когда много записей изменилось. Я выполняю синхронизацию на фоне NSOpeartion, у которого есть собственный контекст управляемого объекта. Когда фоновый поток завершил внесение изменений в контекст управляемого объекта, существует API для объединения всех изменений в контекст объекта с управляемым потоком, который можно настроить, чтобы просто отбросить все изменения, если есть какие-либо конфликты, вызванные пользователь меняет данные во время синхронизации. В этом случае я просто подожду несколько секунд, а затем снова попробую выполнить синхронизацию.

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

(кстати, когда я сказал, что "много записей изменилось", я имел в виду 30 000 строк, обновляемых или вставленных на телефон)