Я ищу некоторые общие стратегии для синхронизации данных на центральном сервере с клиентскими приложениями, которые не всегда онлайн.
В моем конкретном случае, У меня есть приложение для телефона Android с базой данных sqlite и веб-приложение PHP с базой данных MySQL.
Пользователи смогут добавлять и редактировать информацию в приложении для телефона и в веб-приложении. Мне нужно убедиться, что изменения, сделанные в одном месте, отражаются повсюду, даже если телефон не может немедленно связаться с сервером.
Меня не интересует, как передавать данные с телефона на сервер или наоборот. Я упоминаю о своих конкретных технологиях только потому, что не могу использовать, например, функции репликации, доступные для MySQL.
Я знаю, что проблема синхронизации данных клиент-сервер существует уже давно, и хотела бы получить информацию - статьи, книги, советы и т. д. - о схемах решения проблемы. Я хотел бы узнать об общих стратегиях работы с синхронизацией, чтобы сравнить сильные и слабые стороны и компромиссы.
Первое, что вам нужно решить, - это общая политика относительно того, какая сторона считается «авторитетной» в случае противоречивых изменений.
То есть: предположим, что запись № 125 была изменена на сервере 5 января в 22:00, а такая же запись была изменена на одном из телефонов (назовем ее клиентом A) 5 января в 23:00. Последняя синхронизация была 3 января. Затем пользователь снова подключается, скажем, 8 января.
Определить, что нужно изменить, «легко» в том смысле, что и клиент, и сервер знают дату последней синхронизации, поэтому все создано или обновлено (подробнее об этом см. Ниже) поскольку необходимо согласовать последнюю синхронизацию.
Итак, предположим, что единственная измененная запись - № 125. Вы либо решаете, что одна из двух автоматически «выигрывает» и перезаписывает другую, либо вам необходимо поддерживать фазу согласования, когда пользователь может решить, какая версия (серверная или клиентская) является правильной, перезаписывая другую.
Это решение чрезвычайно важно, и вы должны взвесить «роль» клиентов. Особенно, если существует потенциальный конфликт не только между клиентом и сервером, но и в случае, если разные клиенты могут изменять одну и ту же запись (записи).
[Предполагая, что № 125 может быть изменен вторым клиентом (клиентом B), есть вероятность, что клиент B, который еще не синхронизировался, предоставит еще одну версию той же записи, что делает предыдущее разрешение конфликта спорным ]
Относительно пункта « создано или обновлено » выше ...как вы можете правильно идентифицировать запись, если она была создана на одном из клиентов (при условии, что это имеет смысл в вашей проблемной области)? Предположим, ваше приложение управляет списком деловых контактов. Если клиент A говорит, что вам нужно добавить недавно созданного Джона Смита, а на сервере есть Джон Смит, созданный вчера клиентом D ... вы создаете две записи, потому что не можете быть уверены, что они не разные люди? Вы попросите пользователя уладить и этот конфликт?
Есть ли у клиентов «владение» подмножеством данных? Т.е. если Клиент B настроен как «авторитет» для данных для Области №5, может ли Клиент A изменять / создавать записи для Области №5 или нет? (Это упростит разрешение некоторых конфликтов, но может оказаться невозможным в вашей ситуации).
Подводя итог, можно выделить следующие основные проблемы:
Библиография:
Подробнее об этом, конечно же, в Википедии .
Простой алгоритм синхронизации автора статьи Vdirsyncer
SyncML®: синхронизация и управление мобильными данными (Книга по O'Reilly Safari)
Оптимистическая репликация ЯСУШИ САЙТО (HP Laboratories) и МАРК ШАПИРО (Microsoft Research Ltd.) - ACM Computing Surveys, Vol. V, No. N, 3 2005.
Александр Трауд, Юрген Наглер-Ихляйн, Франк Каргл и Майкл Вебер. 2008. Циклическая синхронизация данных посредством повторного использования SyncML. В материалах Девятой Международной конференции по управлению мобильными данными (MDM '08). IEEE Computer Society, Вашингтон, округ Колумбия, США, 165–172. DOI = 10.1109 / MDM.2008.10 http://dx.doi.org/10.1109/MDM.2008.10
Лам Ф., Лам Н. и Вонг Р. 2002. Эффективная синхронизация для мобильного XML данные. В материалах одиннадцатой международной конференции по управлению информацией и знаниями (Маклин, Вирджиния, США, 4–9 ноября 2002 г.). ЦИКМ '02. ACM, Нью-Йорк, Нью-Йорк, 153–160. DOI = http://doi.acm.org/10.1145/584792.584820
Cunha, P. R. и Maibaum, T. S. 1981. Resource & equil; абстрактный тип данных + синхронизация - Методология программирования, ориентированного на сообщения -. В материалах 5-й международной конференции по разработке программного обеспечения (Сан-Диего, Калифорния, США, 9–12 марта 1981 г.).Международная конференция по программной инженерии. IEEE Press, Пискатауэй, Нью-Джерси, 263-272.
(Последние три взяты из цифровой библиотеки ACM, не знаю, являетесь ли вы ее членом или можете получить их по другим каналам).
С сайта Доктор Доббс :
Источник: arxiv.org: