LINUX.ORG.RU

Репликация данных: с чего бы начать ознакомление?

 ,


0

2

Есть мысль запилить небольшое веб-приложение, а к нему десктопный клиент (а в перспективе и клиент на Android). Клиент этот должен уметь работать автономно, а когда появляется связь, то синхронизировать данные с сервером. Данных немного: это всего лишь записи о нескольких десятках покупок. Или о новых клиентах. Или о ещё какой мелочёвке.

На одном хосту это делается просто: с помощью любой ORM-библиотеки, хотя бы SqlAlchemy. Или средствами Django, почему нет.

Но оно должно работать на нескольких хостах. И как-то разруливать конфликты: например, если на локальном хосту редактируют задачу, которую на сервере уже удалили, но на локальном хосту об этом ещё не знают. Говорят, это как-то связано с репликацией (в варианте «мастер-мастер»), но в репликацию и синхронизацию я не умею вообще, от слова совсем. С чего мне стоит начать знакомство?



Последнее исправление: Yak (всего исправлений: 1)

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

ddos3
()

С чего мне стоит начать знакомство?

С основ программирования, алгоритмов и CS. К СУБД это имеет очень далёкое отношение.

mashina ★★★★★
()
Ответ на: комментарий от ddos3

А нет ли каких-нибудь статеек, где разбиралась бы синхронизация на конкретном примере? Типа, «в такой-то CRMке синхронизация происходила так, так и так»?

Yak
() автор топика
Ответ на: комментарий от Yak

Гугль в помощь. Но не думаю, что найдешь готовое решение. Синхронизация в твоем примере слишком завязана на бизнес-логику.

ddos3
()
Ответ на: комментарий от ddos3

Да чёрт с ним, с готовым решением. Мне бы хоть принцип понять.

Yak
() автор топика

А что тут читать? У тебя есть данные, которые могли измениться по-разному в разных местах. Тебе нужно либо научиться их сливать полностью автоматически, что полностью зависит от твоих данных и логики, либо показывать юзеру конфликт и пусть сливает сам. Никаких умных книжек и баззвордов тут не требуется.

slovazap ★★★★★
()

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

Соответственно, если задача не принадлежит данному исполнителю, то он её и не может удалить.

Допустим, у тебя программисты делают тикеты. Труд программиста стоит 50 долларов в час. Два программиста забрали один и тот же тикет и делают его одновременно. Они его оба сделали независимо друг от друга сидя на пляже в офлайне и потратив по 10 часов, и ты попал на 500 долларов. Такого быть просто не должно.

Конечно, и при правильно построенном деле могут быть проблемы, потому что есть администратор, который может отменять задачи «поверх голов». И тогда действительно, пользователь придёт из офлайна и будет конфликт слияния. Но это не совсем то же, что «произвольное слияние произвольных данных в произвольной анархии».

den73 ★★★★★
()
Последнее исправление: den73 (всего исправлений: 1)
Ответ на: комментарий от den73

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

den73 ★★★★★
()
Ответ на: комментарий от den73

Но на самом деле тут есть грабли - справочник товаров. Если у тебя распределённые закупки, могут возникать дубликаты товаров - их действительно придётся сливать. Причём часто оказывается так, что сливать можно только вручную. И, самое печальное, при подсоединении клиента возникает двунаправленная синхронизация между тем, что понабивал твой клиент и тем, что понабивали/понасливали в центральной БД другие пользователи. Здесь и правда может понадобиться городить сложный огород, но поскольку я такую задачу не решал и пора уже спать, то ничего больше не напишу. У меня до такого счастья не доходило, работа была построена так, что все новые товары возникали в одном месте в онлайне.

den73 ★★★★★
()
Ответ на: комментарий от den73

Если бы это было правдой, git merge был бы не нужен :) Мы же не знаем, какая у ТСа задача, а бизнес-логика всякая бывает. На то он и бизнес, чтобы иногда быть нелогичным, если это приносит больше денег :)

ddos3
()
Ответ на: комментарий от ddos3

На то он и бизнес, чтобы иногда быть нелогичным, если это приносит больше денег :)

И какой у тебя бизнес в git merge?

mashina ★★★★★
()

Почитай про two generals problem, Paxos, векторное время.

CaptainFarrell
()

Анекдот:

Встречает Волк в лесу Красную Шапочку и говорит:
– Ну что ж, Шапка, я вижу два варианта развития событий: либо слияние, либо поглощение.

anonymous
()

Синхронизировать действия из нескольких приложения - задача очень непростая.

http://swarmjs.github.io/ - попробуй в этом разобраться и поищи у них еще видео на ютюбе.

Vit ★★★★★
()
Ответ на: комментарий от Yak

Погугли Operational Transformations. И https://github.com/josephg/ShareJS

swarmjs построен на более продвинутой теории, но он уже пару лет в состоянии «скоро будет». Если кратно - готовых решений без побочных эффектов вообще ни у кого пока нет.

Vit ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.