Setting96.ru

Строительный журнал
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Синхронизация клиент-серверных баз

Синхронизация клиент-серверных баз

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

В моем конкретном случае у меня есть приложение для телефона Android с базой данных sqlite и веб-приложение PHP с базой данных MySQL.

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

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

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

5 ответов

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

То есть, предположим, что запись №125 на сервере изменена 5 января в 10 часов вечера, а та же запись на одном из телефонов (назовем ее «клиент А») 5 января в 23 часа. Последняя синхронизация была 3 января. Затем пользователь воссоединяется, скажем, 8 января.

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

Итак, предположим, что единственная измененная запись — это # ​​125. Вы либо решаете, что одна из двух автоматически «выигрывает» и перезаписывает другую, либо вам необходимо поддерживать фазу согласования, когда пользователь может решить, какая версия (серверная или клиентская) является правильной, перезаписывая другую.

Это решение чрезвычайно важно, и вы должны взвесить «роль» клиентов. Особенно, если существует потенциальный конфликт не только между клиентом и сервером, но и в случае, когда разные клиенты могут изменять одни и те же записи.

[Предполагая, что #125 может быть изменен вторым клиентом (клиентом B), есть вероятность, что клиент B, который еще не синхронизировался, предоставит еще одну версию той же записи, что делает предыдущий вопрос разрешения конфликта спорным]

Что касается » созданного или обновленного » пункта выше. как вы можете правильно идентифицировать запись, если она была создана одним из клиентов (при условии, что это имеет смысл в вашей проблемной области)? Предположим, ваше приложение управляет списком деловых контактов. Если Клиент A говорит, что вам нужно добавить недавно созданного Джона Смита, а на сервере есть Джон Смит, созданный вчера Клиентом D. вы создаете две записи, потому что не можете быть уверены, что они не разные люди? Попросите ли вы пользователя разрешить этот конфликт?

Есть ли у клиентов «владение» подмножеством данных? Т.е., если Клиент B настроен как «авторитет» для данных для Области № 5, может ли Клиент A изменять / создавать записи для Области № 5 или нет? (Это может облегчить разрешение некоторых конфликтов, но может оказаться невозможным для вашей ситуации).

Подводя итог, основные проблемы:

  • Как определить «идентичность», учитывая, что отсоединенные клиенты, возможно, не обращались к серверу до создания новой записи.
  • Предыдущая ситуация, какой бы изощренной она ни была, может привести к дублированию данных, поэтому вы должны предусмотреть, как периодически их решать и как информировать клиентов о том, что то, что они считали «Запись № 675», фактически было объединено с / заменено Запись № 543
  • Решите, будут ли конфликты разрешаться с помощью fiat (например, «Версия сервера всегда превосходит клиента, если первая была обновлена ​​с момента последней синхронизации») или с помощью ручного вмешательства
  • В случае указа, особенно если вы решите, что клиент имеет преимущество, вы также должны позаботиться о том, как поступить с другими, еще не синхронизированными клиентами, у которых могут появиться еще некоторые изменения.
  • Предыдущие элементы не учитывают детализацию ваших данных (чтобы упростить описание). Достаточно сказать, что вместо рассуждений на уровне «Запись», как в моем примере, вы можете найти более подходящим для записи изменений на уровне поля, вместо этого. Или для работы с набором записей (например, запись о человеке + запись об адресе + запись о контактах), рассматривая их совокупность как своего рода «мета-запись».

Список используемой литературы:

Подробнее об этом, конечно же, в Википедии.

Оптимистичная репликация YASUSHI SAITO (HP Laboratories) и MARC SHAPIRO (Microsoft Research Ltd.) — ACM Computing Surveys, Vol. V, № 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-данных. В материалах одиннадцатой международной конференции по управлению информацией и знаниями (Маклин, Вирджиния, США, 04–09 ноября 2002 г.). CIKM ’02. ACM, Нью-Йорк, Нью-Йорк, 153-160. DOI = http://doi.acm.org/10.1145/584792.584820

Читать еще:  Блок регулировки тока зарядного устройства

Cunha, PR и Maibaum, TS 1981. Resource &equil; абстрактный тип данных + синхронизация — методология программирования, ориентированного на сообщения. В материалах 5-й международной конференции по программной инженерии (Сан-Диего, Калифорния, США, 9 — 12 марта 1981 г.). Международная конференция по программной инженерии. IEEE Press, Piscataway, NJ, 263-272.

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

  • Создание приложений с использованием SQL Server CE и SQL RDA, Билл Вагнер, 19 мая 2004 г. (Рекомендации по разработке приложений для настольных и мобильных ПК — Windows/.NET)

С сайта arxiv.org:

  • Бесконфликтный реплицированный тип данных JSON — в документе описывается реализация JSON CRDT (Бесконфликтные реплицированные типы данных — CRDT — это семейство структур данных, которые поддерживают одновременное изменение и гарантируют конвергенцию таких одновременных обновлений).

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

Замечание 1: помните о физическом удалении, поскольку строки удаляются из исходной базы данных, и вы должны сделать то же самое на сервере базы данных. Вы можете решить эту проблему, избегая физического удаления или регистрируя каждое удаление в таблице с временными метками. Что-то вроде этого: DeletedRows = (id, table_name, pk_column, pk_column_value, timestamp) Итак, вы должны прочитать все новые строки таблицы DeletedRows и выполнить удаление на сервере, используя table_name, pk_column и pk_column_value.

Замечание 2: знать о FK, поскольку вставка данных в таблицу, связанную с другой таблицей, может завершиться неудачно. Вы должны отключить каждый FK перед синхронизацией данных.

Очень простой способ добиться этого с помощью платформы xamarin — использовать автономную синхронизацию данных Azure, поскольку она позволяет передавать и извлекать данные с сервера по требованию. Операции чтения выполняются локально, а операции записи выполняются по требованию; Если сетевое соединение разрывается, операции записи ставятся в очередь до восстановления соединения, а затем выполняются.

Реализация довольно проста:

1) создайте мобильное приложение на портале Azure (вы можете попробовать его бесплатно здесь https://tryappservice.azure.com/)

3) код для настройки вашего локального репозитория:

4) затем нажать и вытащить ваши данные, чтобы убедиться, что у нас есть последние изменения:

Если кто-то сталкивается с похожей проблемой дизайна и ему нужно синхронизировать изменения на нескольких устройствах Android, я рекомендую проверить Google Cloud Messaging для Android (GCM).

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

По сути, каждый клиент отправляет дельта-изменения на сервер. Например, идентификатор ресурса ABCD1234 изменился со значения 100 на 99.

Сервер проверяет эти дельта-изменения в своей базе данных и либо утверждает изменение (клиент синхронизируется), и обновляет свою базу данных, либо отклоняет изменение (клиент не синхронизирован).

Если изменение одобрено сервером, сервер уведомляет других клиентов (за исключением того, кто отправил изменение дельты) через GCM и отправляет многоадресное сообщение, содержащее такое же изменение дельты. Клиенты обрабатывают это сообщение и обновляют свою базу данных.

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

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

Посмотрите также это руководство, чтобы начать работу с реализацией клиента CGM.

3 способа исправить ошибку при синхронизации данных реестра с сервера в Minecraft (11.02.21)

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

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

Популярные уроки Minecraft

Как мы уже упоминали ранее, вы можете добавить несколько модов на свой сервер. Проблема в том, что несколько пользователей сообщали об ошибке, которая гласит: «Не удалось синхронизировать данные реестра с сервера» всякий раз, когда они пытаются присоединиться к своему серверу в Minecraft.

Есть несколько причин, по которым ваш сервер может быть показывая вам эту ошибку. Вот почему сегодня; мы рассмотрим все способы решения этой проблемы. Итак, приступим!

Читать еще:  Регулировка монитора dell по высоте

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

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

Если у вас уже есть последняя версия клиента и установленных на вашем компьютере модов. Следующим шагом для вас будет установка последней версии Forge. Почти у каждого игрока, у которого на Minecraft установлены моды, обычно установлена ​​Forge на своем компьютере.

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

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

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

Итог

Это 3 способа исправить ошибку при синхронизации данные реестра с сервера в Майнкрафт. Убедитесь, что вы следуете всем приведенным выше инструкциям.

YouTube видео: 3 способа исправить ошибку при синхронизации данных реестра с сервера в Minecraft

Синхронизация клиент-сервер баз данных

Я'м глядя на некоторые общие стратегии для синхронизации данных на центральный сервер с клиентскими приложениями, которые не всегда онлайн.

В моем конкретном случае, у меня телефон на Android приложение с базой данных SQLite и web-приложения на PHP с базой данных MySQL.

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

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

Я знаю, что клиент-серверная проблема синхронизации данных была вокруг в течение долгого, долгого времени и хотел бы получить информацию — статьи, книги, советы и т. д. — Модели для решения задачи. Я'd, как, чтобы знать о стратегии для работы с синхронизации, чтобы сравнить преимущества, недостатки и компромиссы.

 p.marino

Первое, что вы должны решить, является общей политики, о которых сторона является и»авторитетных» в случае конфликта изменений. Т. е.: предположим, что запись № 125 на сервере изменится на 5 января в 10 вечера, а одна и та же запись изменяется на один из телефонов (позвольте'ы назовем его клиент) 5 января в 11 вечера. Последняя синхронизация была 3-го января. Затем пользователь переподключится на, скажем, 8-го января. Определить, что нужно изменить на «Легкий» в том смысле, что и клиент, и сервер знают дату последней синхронизации, так что создан или обновлен (см. ниже Для больше на этом) с момента последней синхронизации должен быть устранен. Итак, предположим, что изменяется только запись #125. Вы либо решите, что один из двух автоматически на «Победы» и перезаписывает другой, или вам нужно поддержать фазе согласования, где пользователь может решить, какую версию (сервер или клиент) является правильным, заменяя другими. Это решение является чрезвычайно важным, и вы должны вес в «роль» из клиентов. Особенно если есть потенциальный конфликт не только между клиентом и сервером, но в случае разных клиентов, может изменить одну и ту же запись(с). [Предполагая, что #125 может быть изменен на другой клиент (клиент Б) есть шанс, что клиент Б, который еще'т врубился еще, будет еще другая версия той же записи, что делает предыдущий конфликт разрешение спорных] О том, что «создан или обновленна» Точка выше. как можно правильно идентифицировать запись, если она уже возникла на одном из клиентов (если это имеет смысл в вашей проблемной области)? Позвольте'ы предположим, ваше приложение управляет списком деловых контактов. Если клиент говорит, что у вас есть, чтобы добавить вновь созданный Джоном Смитом, и сервер есть Джон Смит вчера созданные клиента Д. вы создаете две записи, потому что вы не можете быть уверены, что они не'т разных лиц? Вы попросите пользователя слишком примирить этот конфликт? У клиентов с «собственности» из подмножества данных? Т. е. если клиент B настроена, чтобы быть в «авторитет» в данные для площадка № 5 может клиенту изменять/создавать отчеты для #5 или нет? (Это сделало бы некоторые разрешения конфликтов легче, но может оказаться неосуществимым для вашей ситуации). Резюмируя основные проблемы:

  • Как определить, что «идентичность» и учитывая, что отдельно стоящее клиенты не должны иметь доступ к серверу, прежде чем создавать новую запись.
  • В предыдущей ситуации, неважно, насколько сложные решения, может привести к дублированию данных, так что вы должны предвидеть, как периодически решить эти и как информировать клиентов, что они рассматривают как «Рекорд #675» есть на самом деле был объединен с/заменена запись № 543
  • Решите, если конфликты будут разрешены Фиат (например, на «сервера версия всегда лучше клиента's если бывший был обновлен с момента последней синхронизации и») или вручную
  • В случае Фиат, особенно если вы решите, что клиент берет верх, вы должны также заботиться о том, как бороться с другими, еще не синхронизированы клиентов, которые, возможно, еще какие-то сдвиги идут.
  • Предыдущим пунктам Дон'т принять во внимание гранулярность данных (для того, чтобы сделать вещи проще описать). Достаточно сказать, что вместо рассуждений на «рекорда» и уровня, как в моем примере, может оказаться более подходящим, чтобы записать изменения на уровне поля, а не. Или работать с набором записей (например, человек запись + запись адреса + контакты запись) на время лечения их совокупности как своего рода «и мета запись и».
Читать еще:  Регулировка пластиковых окон дверей rehau

Подробнее об этом, конечно, в Википедии.

6есконфликтного реплицированных данных типов6

Оптимистической репликации Ясуси Сайто (НР лабораторий) и Марк Шапиро (Майкрософт рисерч Лтд.) — Опросы АСМ вычислений, объем. В, Нет. Н 3 2005.

Александр Traud, Юрген Наглер-Ihlein, Фрэнк Kargl, и Майкл Вебер. 2008. Цикловая синхронизация данных через использование технологии SyncML. В работе девятой Международной конференции по управлению мобильными устройствами (MDM '08). Компьютерное общество IEEE, Вашингтон, округ Колумбия, США, 165-172. ДОЙ=10.1109/МДМ.2008.10 http://dx.doi.org/10.1109/MDM.2008.10

Лам, Ф. Лам, Н. и Wong, R. В 2002. Эффективной синхронизации данных для мобильного в формате XML. В работе одиннадцатой международной конференции по управлению информацией и знаниями (Маклин, Вирджиния, США, ноябрь 04 — 09, 2002). CIKM '02. АСМ, Нью-Йорк, Нью-Йорк, 153-160. Дой= http://doi.acm.org/10.1145/584792.584820

Кунья, П. Р. и Maibaum, Т. С. 1981. Ресурс &полусумма; абстрактный тип данных + синхронизация — методику ориентированного сообщение программирования. В материалах 5-й Международной конференции по программной инженерии (Сан-Диего, Калифорния, США, Март 09 — 12, 1981). Международная конференция по программной инженерии. Стандарт IEEE пресс, Пискатауэй, Нью-Джерси, 263-272. (Последние три из цифровой библиотеке ACM, понятия не имею, если вы являетесь членом или если вы можете получить через другие каналы). От доктор Доббс сайт:

Создание приложений с SQL сервер CE и SQL РДА Билл Вагнер 19 мая 2004 года (Лучшие практики для разработки приложений для настольных и мобильных ПК — Windows/.Нетто) От arxiv.org:

Свободной от конфликтов тиражируется в JSON тип данных — в статье описывается реализация JSON CRDT (бесконфликтное реплицируемые типы данных — CRDTs — семья состоит из структуры данных, которые поддерживают одновременную модификацию и которые гарантируют сходимость такого одновременного обновления).

Команда NET TIME вывод текущего времени сервера

NET TIME синхронизирует показания часов компьютера с другим компьютером или доменом. Если используется без параметров в домене Windows Server, выводит текущую дату и время дня, установленные на компьютере, который назначен сервером времени для данного домена. Эта команда позволяет задать сервер времени NTP для компьютера.

Видео: NET TIME — как синхронизировать время с сервером в Windows

Синтаксис команды NET TIME

  1. net time [<\имя_компьютера | /domain[:имя_домена] | /rtsdomain[:имя_домена]>] [/set]
  2. net time [\имя_компьютера] [/querysntp]
  3. net time [\имя_компьютера] [/setsntp[:список_серверов_NTP]], где
  • \имя_компьютера — указывает имя сервера, время на котором нужно проверить или с которым нужно синхронизировать таймер.
  • /domain[:имя_домена] — задает имя домена, с которым синхронизируются часы.
  • /rtsdomain[:имя_домена] — указывает домен сервера надежного времени (RTS), с которым будут синхронизироваться часы.
  • /set — синхронизирует часы с временем указанного компьютера или домена.
  • /querysntp — выводит имя сервера NTP (Network Time Protocol), сконфигурированного для локального компьютера, или компьютера, указанного в параметре \имя_компьютера.
  • /setsntp[:список_серверов_NTP] — указывает список серверов времени NTP для использования на локальном компьютере.

Примеры команды NET TIME

  • net help time — отображение справки для указанной команды net;
  • net time \PC1— вывод на экран текущего времение сервера в сети для компьютера PC1;
  • net time /querysntp — отображение на экране имени сервера NTP для локальнго компьютера;
  • net time \Proton /set — синхронизация часов локального компьютера с временем компьютера Proton.

Net time системные ошибки в ходе выполнения

Системная ошибка 5. Отказано в доступе

Часто спрашивают, почему появляется «Системная ошибка 5. Отказано в доступе» при использовании команды Net time. Отвечаю, все в правах пользователя под которым запускается команда. В качестве примера пробовал запустить команду сначала с правами локального администратора на Windows 10 — получил ошибку, далее запустил с правами администратора домена — результат на рисунке ниже.

Пример команды net time

Системная ошибка 1314. Клиент не обладает требуемыми правами

Вам нужно зайти в «редактор локальной политики безопасности». Открываем «Выполнить» Win+R. Ввести — «secpool».

Локальные политики-Параметры безопасности-Контроль учетный записей: Все администраторы работают в режиме одобрения администратором-Отключить-ОК-Перезагрузить компьютер/ноутбук.

Далее запустил с правами администратора домена, команда успешно выполнилась.

0 0 голоса
Рейтинг статьи
Ссылка на основную публикацию
ВсеИнструменты