Лучшее решение для синхронизации списков объектов между мобильным и веб-сервером - PullRequest
2 голосов
/ 12 января 2011

Я ищу опыт / мнения / знания по использованию определенных методов, форматов файлов (например, syncML) и библиотек (funambol, другие?) Для синхронизации списков между несколькими мобильными устройствами и веб-сервером?

Нам бы хотелось, чтобы у пользователя была возможность редактировать списки на нескольких мобильных устройствах и в Интернете, периодически синхронизировать их, обрабатывать изящные конфликты и т. Д. ..... без необходимости заново изобретать колесо.

Опыт работы с syncML, библиотеки (с лицензией в стиле Apache) для syncML или других приложений, а также опыт будут очень полезны.

Мы разрабатываем:
- Java SE (appengine и другие платформы) для сервера - так что JavaСервлет 2.3
- J2ME (на Symbian и других)
- iOS
- Android

и поэтому, если возможно, нужно решение с широким охватом и хорошими библиотеками на этих платформах.

Данные
Элементы в списках будут продуктами.Это может быть просто текстовое имя, введенное пользователем, или структурированное описание продукта со многими полями.У нас есть определенный формат XML, который уже будет развиваться.Мы предпочли бы синхронизировать список этих фрагментов XML.

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

Подробности
Мы ожидаем, что каждая мобильная «копия» списка сохранит данные в локальном хранилище данных с датой последней синхронизациис сервером и списком изменений sinc.Мы также ожидаем, что каждый элемент в списке будет иметь локальный идентификатор и глобальный (идентификатор сервера), используемый для синхронизации во время синхронизации.

Over-the-wire-format
Мы предпочитаем использовать XMLформат для передачи данных во время синхронизации, который имеет один или несколько списков, и элементы внутри каждого списка в качестве элементов, с идентификаторами каждого в качестве атрибутов элементов.

Ответы [ 2 ]

0 голосов
/ 12 января 2011

Одна идея, которая, вероятно, слишком проста, использует тот же метод, что и SVN или CVS.

  1. Сначала устройство извлекает данные (извлечение).
  2. После синхронизации произойдет обновление
  3. если у вас есть какие-либо конфликты, спросите пользователя, какую версию он предпочитает (я бы дал возможность выбрать одну из двух, создать новую или рассмотреть их как две разные вещи)
  4. после разрешения конфликтов передайте текущее состояние

Что нужно подумать:

  1. каждый элемент должен соответствовать файлу (лучше для сложных данных) или все элементы (принадлежащие одному и тому же пользователю) должны быть помещены в один файл?
  2. использование идентификатора элемента может упростить процесс избежания ложных конфликтов между элементами с похожим содержимым
  3. вам, вероятно, следует преобразовать любой элемент, которым вы обмениваетесь, в xml-файл (или аналогичный), чтобы легче было отслеживать версии
  4. это не значит, что вам нужно отправлять xml туда-сюда. Вы можете преобразовать xml в желаемый формат (например, параметры, закодированные в URL, в xml)
  5. использование строгого формата для файлов, находящихся под контролем версий, упростит синхронизацию

Объясняя мой последний пункт:

Не кодируйте параметры url в порядке их поступления, а выбирайте логический порядок. Например, «a = 111 & b = 222» и «b = 222 & a = 111» должны храниться с одним и тем же текстом. Убедитесь, что одни и те же данные всегда будут иметь одинаковое представление, даже если вы получите их в другом формате.

Это были только мои первые мысли ...

0 голосов
/ 12 января 2011

Какие объекты в списке? Что за данные?

Как вы хотите, чтобы конфликты обрабатывались? Например, если объект удален на устройстве A, синхронизирован с сервером (поэтому объект также удаляется на сервере), но устройство B тем временем редактирует этот объект, а затем синхронизирует. Должен ли объект быть повторно добавлен? Должно ли оно быть удалено на устройстве B?

...