Рекомендации по синхронизации данных списка между базой данных и приложением PhoneGap

Сценарий

У меня есть следующие компоненты, которые составляют приложение в стиле проверки

  • Веб-приложение (планирует новые проверки и обновления/удаляет запланированные проверки до тех пор, пока они не будут отправлены на устройство)
  • База данных (хранит запланированные проверки)
  • Служба WCF Restful (возвращает последние данные расписания пользователя устройства по запросу)
  • И приложение PhoneGap (отображает список запланированных проверок пользователя устройства, сохраняя данные, возвращенные из службы WCF, в локальном хранилище)

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

Проблема

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

Решение

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

Лазейки в этом разрешении

  1. Если я отмечаю элементы как «полученные приложением» в веб-службе, когда список возвращается, может возникнуть ошибка между возвратом данных из службы WCF и получением их устройством, что означает, что они никогда не достигали устройства. Это может привести к тому, что элементы будут помечены как «на устройстве», хотя это не так.
  2. В качестве альтернативы, если я решу подождать, пока устройство не получит список, а затем отправлю сообщение обратно в базу данных, чтобы сказать, что устройство получило элементы, это сообщение может быть отправлено не сразу из-за отсутствия подключения к Интернету. Это означает, что пользователь веб-портала может обновить или удалить запланированный для пользователя элемент, даже если он находится на его устройстве.

Мой вопрос

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


person Will.Harris    schedule 23.10.2015    source источник


Ответы (1)


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

person Manali Satam    schedule 23.10.2015
comment
Спасибо за ответ, забавно то, что я использовал временные метки в другой части мобильного приложения для синхронизации данных!! хаха. Я думаю, это то, что вы называете туннельным видением, поскольку я даже не рассматривал такой подход. - person Will.Harris; 23.10.2015
comment
@Will Рад это знать! - person Manali Satam; 25.10.2015