angularjs скачать Стратегии синхронизации данных с сервером в PhoneGap



скачать cordova (1)

Позвольте мне дать ответ на ваш вопрос на основе моего опыта, связанного с частью синхронизации, поскольку у меня недостаточно опыта работы с PhoneGap, поэтому пропустим вопрос о локальном хранилище PhoneGap v SQLite.

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

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

Кроме того, вы можете рассмотреть другие варианты, но это зависит от вашей серверной части:

Кроме того, мое намерение сначала создать интернет-зависимость, а затем добавить синхронизацию ... Это хорошая идея, или я стреляю себе в ногу? Нужно ли мне синхронизировать его с самого начала?

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

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

Для начала я подумываю использовать UUID, а не последовательные целые первичные ключи. Я также думал о назначении каждому устройству идентификатора, который имеет префикс на любых генерируемых им ключах, но это кажется деликатным. Кто-нибудь использовал любую технику? Мысли?

Это зависит от ваших спецификаций проекта и, в частности, от вашей серверной части. Например, мобильные сервисы Azure позволяют использовать только целые типы для первичных ключей. Хотя уникальные идентификаторы в качестве первичных ключей довольно удобны в распределенных системах (есть и некоторые недостатки).

Связано с назначением идентификатора устройства - я не уверен, что понимаю суть, хотя я не знаю особенностей вашего проекта. Посмотрите на алгоритм синхронизации, который используется в нашей системе ( двунаправленная синхронизация с использованием REST между несколькими клиентами Android и центральным SQL Server ).

Как насчет записей, отредактированных в нескольких местах? Если два клиента редактируют, а затем хотят синхронизировать, у вас есть некоторая двусмысленность в отношении слияния, например, при объединении ветвей в git или других системах управления версиями. Как вы справляетесь с этим? Я думаю, git делает это, сохраняя разницу в каждом фиксации. Думаю, вы могли бы хранить отличия? Чем больше я думаю об этом, тем сложнее это звучит. Я передумал это или не думал об этом?

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

Если вероятность конфликтов в вашей системе будет высокой, например, пользователи будут часто менять одни и те же записи. Затем вы должны лучше отслеживать, какие поля (столбцы) записей были изменены в вашей синхронизации, а затем, как только конфликт обнаружен:

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

Я начинаю свой первый проект PhoneGap, используя AngularJS. Это приложение, основанное на базе данных, с использованием REST API в качестве бэкэнд. Начнем с того, что я не собираюсь хранить данные локально вообще, поэтому он не будет делать многое без Интернета.

Тем не менее, в конечном итоге мне захочется, чтобы он хранили данные на локальном компьютере и синхронизировался, когда доступен Интернет, поскольку я знаю, что я лично иногда отключаю интернет-соединения на своем телефоне (воздушные самолеты, разряженные батареи) или нет баров. Мне было интересно, можете ли вы указать мне на некоторые хорошие ресурсы для такого типа синхронизации. Некоторые рекомендуемые библиотеки? Или, возможно, некоторые дискуссии о подводных камнях и о том, как их крутить вокруг. Я немного поработал, но думаю, что сейчас я не знаю вопросов, которые нужно задать.

Кроме того, мое намерение сначала создать интернет-зависимость, а затем добавить синхронизацию ... Это хорошая идея, или я стреляю себе в ногу? Нужно ли мне синхронизировать его с самого начала?

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

Для начала я подумываю использовать UUID, а не последовательные целые первичные ключи. Я также думал о назначении каждому устройству идентификатора, который имеет префикс на любых генерируемых им ключах, но это кажется деликатным. Кто-нибудь использовал любую технику? Мысли?

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

Как насчет записей, отредактированных в нескольких местах? Если два клиента редактируют, а затем хотят синхронизировать, у вас есть некоторая двусмысленность в отношении слияния, например, при объединении ветвей в git или других системах управления версиями. Как вы справляетесь с этим? Я думаю, git делает это, сохраняя разницу в каждом фиксации. Думаю, вы могли бы хранить отличия? Чем больше я думаю об этом, тем сложнее это звучит. Я передумал это или не думал об этом?

Как насчет хранилища на стороне клиента? Я подумал о SQLite или о локальном хранилище PhoneGap ( http://docs.phonegap.com/en/1.2.0/phonegap_storage_storage.md.html ). Рекомендации? Синхронизация будет проходить через REST API, обмениваясь JSON, поэтому я думал о том, что на самом деле хранит данные как JSON, или что-то похожее на JSON, которое легко конвертировать, было бы неплохо. С другой стороны, если мне нужно будет обменять какой-то формат данных, возможно, это то, что мне нужно хранить?





synchronization