Я работаю над обычным приложением для iPhone, которое извлекает данные с сервера (XML, JSON и т. Д.), И мне интересно, как лучше всего реализовать синхронизацию данных. Критериями являются скорость (меньше сетевого обмена данными), надежность (восстановление данных в случае сбоя обновления), автономный доступ и гибкость (адаптируется, когда структура базы данных изменяется незначительно, как новый столбец). Я знаю, что это варьируется от приложения к приложению, но вы, ребята, не могли бы поделиться своей стратегией / опытом?
Что касается меня, я думаю о чем-то вроде этого:
1) Сохранить дату последнего изменения в iPhone
2) После запуска отправьте сообщение вида getNewData.php? LastModifiedDate = ...
3) Сервер обработает и отправит обратно только измененные данные с последнего раза.
4) Эти данные отформатированы так:
<+><data id="..."></data></+> // add this to SQLite/CoreData
<-><data id="..."></data></-> // remove this
<%><data id="..."><attribute>newValue</attribute></data></%> // new modified value
Я не хочу делать ‹+>, ‹->,‹%> ... также для каждого атрибута, потому что это было бы слишком сложно, поэтому, вероятно, при получении поля ‹%> я бы просто удалил данные с указанным идентификатором, а затем добавьте его снова (при условии, что здесь идентификатор не является автоматически увеличивающимся полем).
5) Как только все будет загружено и обновлено, я обновлю поле Дата последнего изменения.
Основная проблема этой стратегии: если сеть выходит из строя, когда я что-то обновляю => Дата последнего изменения еще не обновлена => в следующий раз, когда я перезапускаю приложение, мне придется повторить то же самое снова. Не говоря уже о потенциально противоречивых данных. Если я использую временную таблицу для обновления и сделаю все это атомарным, это сработает, но опять же, если обновление будет слишком длинным (много изменений данных), пользователю придется долго ждать, пока не станут доступны новые данные. Должен ли я использовать Last-Modified-Date для каждого поля данных и обновлять данные постепенно?