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

Стратегии синхронизации данных между приложениями Rails и iPhone

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

Я хотел бы знать, какие стратегии вы использовали для синхронизации данных между приложениями iPhone (чтение: мобильный) и приложениями Rails (чтение: веб).

  • Существуют ли какие-либо стратегии, которые особенно хорошо масштабируются?
  • Как вы справлялись с большими объемами данных? (Используете ли вы постраничные ответы?)
  • Как вы убедитесь, что данные не перезаписаны?
  • Есть ли причина избежать Ruby on Rails?
    • если да, можете ли вы предложить альтернативу? Что лучше об альтернативе?
  • Какие стратегии не удалось?
    • Почему вы считаете, что эти стратегии не удались?

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

Пользователь сможет обновлять данные на мобильном устройстве и обновлять данные через веб-приложение.

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

4b9b3361

Ответ 1

Прошло около двух лет с тех пор, как я задал этот вопрос, и пейзаж резко изменился. В настоящее время поставщики бэкэнд-услуг, такие как Kinvey, Apple выпустила iCloud и несколько проектов с открытым исходным кодом для синхронизации с внешние источники данных возникли.

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

Ответ 2

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

Я создал объект данных, который представляет собой общий объект синхронизации, в котором я храню уникальный идентификатор, полезную нагрузку и последнюю дату доставки. У меня есть еще одна логика, которая захватывает объекты Sync из основных данных и отправляет их. Если получен хороший ответ (т.е. Ответ действительно вернулся, а текст ответа - это то, что я ожидал), этот объект синхронизации будет удален. Это помогает гарантировать, что ваши данные синхронизации добираются до места назначения должным образом и не просто теряются в море. Это также хорошая модель для работы в автономном режиме. Вы можете просто сохранить ваши объекты синхронизации в автономном режиме и начать их отправку, как только вы снова в сети.

С точки зрения Интернета, Rails Metal звучит так, как будто это может быть подходящим для такой ситуации. Я никогда не использовал его сам, но, основываясь на некоторых чтениях, похоже, что Metal предназначен для ситуаций, когда высокий трафик может быть возможен, и быстрые ответы имеют решающее значение. В основном это сокращает накладные расходы маршрутизатора Rails и т.д. Надеюсь, что это поможет.

Ответ 3

Если вы используете рельсы, вы можете взглянуть на мой плагин plistifier, который я только что написал: Проверьте мой плагин plistifier http://github.com/jeena/plistifier