2010-05-04 3 views
0

У меня есть запрос. Прежде всего, у нас есть поток приложений iPhone, который имеет обычное приложение. (Content приложение)База данных и база данных для iPhone - iPhone обновляет только модификации

  • Применение запускает & проверяет наличие сети
  • Если сеть доступна - iPhone загружает данные с помощью веб-служб или API,
  • Мы можем хранить эти реакции (веб-службы реагирования/API ответ) в файл * .plist.
  • Когда нам нужно обновить данные, снова веб-служба называется & снова все данные сохраняются * .plist.

  • Теперь предположим, что у меня есть таблица «eBooks» на сервере & Имеет более 500 записей.

  • Вызов API/веб-службы даст ответ 500 записей.
  • OK - в первый раз это нормально ждать ответа (мы могли бы использовать LIBXML2 для кусков)
  • Но что делать, если мы часто загружаем это с помощью веб-службы.

Здесь есть два недостатка

  • Wifi ненужным использование
  • iPhone CPU накладные
  • накладные расходы CPU сервера.

Вы меня принимаете?

Предположим, что на сервере нет никаких изменений, почему iPhone нужно снова вызвать API. Значит, нет никаких изменений в записях. & записей 500, так как тогда зачем их загружать?

Повторю еще раз - проблема.

Предположим, что

  • приложение имеет сервер + базы данных = Клиенты (500 записей в настоящее время)
  • есть 5 iPhone, который извлекает эти данные
  • всех iPhone'ов скачали 500 записей на форуме
  • Теперь сервер добавил новую запись 501
  • iPhone должен скачать только 1 запись не 501.

Как это возможно?

ответ

1

Вы можете добавить временную метку к каждой из записей. Эта временная метка обновляется каждый раз, когда изменения, добавления или удаления выполняются на стороне сервера.

При выполнении запроса вы указываете поле, обозначающее самую известную клиенту отметку времени. Для первого запроса это будет нечто вроде Epoch. Для последующих запросов это будет последнее известное обновление.

Затем сервер должен будет фильтровать записи, поэтому он возвращает только те записи, которые были изменены с момента создания.

+0

@ Claus Broch - идея велика - не могли бы вы дать еще несколько кратких? –

+0

@ Claus Broch - так, iPhone предоставит timestap при вызове веб-сервиса на сервер, а сервер будет проверять каждую запись базы данных на метку времени. serverTimeStamp == iPhoneTimeStamp - для каждой записи. предположим, что есть 500 пользователей приложений iPhone. Что будет с сервером? –

+1

Я предполагаю, что вы представляете данные в какой-то базе данных, поэтому просто нужно построить инструкцию SQL, которая выполняет фильтрацию (например, что-то похожее на «SELECT * from TABLE mydata WHERE timestamp> = querystamp»). Вероятно, сервер будет менее загружен фильтрацией, чем каждый раз, предоставляя полный контент. Это, однако, только грубый гость, вы можете варьироваться. –

0

Вы можете очень легко реализовать пейджинг на своем серверном приложении, чтобы ваши клиенты могли ограничить количество полученных записей. Вы также можете реализовать какой-то уникальный идентификатор, который вы можете кэшировать на клиенте iPhone, а затем, когда вы запрашиваете обновление, вы отправляете уникальный идентификатор последнего элемента, который вы кешировали. Когда ваш сервер отправляет ответ, он должен обслуживать только элементы, более поздние, чем последний элемент, который вы кэшировали.

+0

Почему Wi-Fi необходим для подкачки? – nduplessis

Смежные вопросы