Стратегии синхронизации данных между приложением Rails и приложением iPhone - PullRequest
17 голосов
/ 17 мая 2010

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 27 апреля 2012

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

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

2 голосов
/ 17 мая 2010

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

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

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

1 голос
/ 13 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...