Лучшая стратегия того, чтобы синхронизировать данные в приложении для iPhone

Я работаю над обычным приложением для 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 для каждого поля данных и данных обновления постепенно?

7
задан Jonas 19 December 2011 в 03:34
поделиться

1 ответ

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

После этого самое время подумать о том, чтобы сделать его инкрементальным, но только после того, как вы проведете некоторое тестирование, чтобы выяснить, действительно ли это необходимо. Если вы настраиваете протокол обновления на максимально низкую пропускную способность, вы можете обнаружить, что даже «большое» обновление загружается достаточно быстро.

Другой способ взглянуть на это - спросить себя, как часто возникают проблемы с сетью, когда средний пользователь выполняет синхронизацию? Вероятно, вы не захотите настраиваться на маловероятные сценарии.

Если вы пытаетесь оптимизировать (свести к минимуму) передачу данных, вы можете рассмотреть вариант, отличный от XML, поскольку XML довольно подробен. Или, по крайней мере, вы можете обменять удобочитаемость XML на пространство, сделав каждое имя элемента и атрибут как можно меньше и удалив все ненужные пробелы.

2
ответ дан 7 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: