j-snow
@j-snow
Java junior developer

Как сделать совместное редактирование данных на сайте?

Привет всем!

Есть многопользовательский сайт, написанный на React + бэкенд + MySQL.
Для простоты пусть это будет тривиальный TODO-app.

Пользователи одновременно могут редактировать данные:
добавлять и удалять TODO; редактировать название/описание и другие поля.

Задача: Придумать логику работы.

Какие вижу сложности:
— У пользователя в любой момент может пропасть интернет. Не хочется сразу запрещать возможность редактирования. Хочется дать возможность работать в оффлайне, и синхронизировать данные при подключении.
— При повторном подключении необходимо отправлять все изменения на сервер. Но как быть с конфликтующими изменениями, произошедшими пока не было интернета? Имею ввиду, что 2 пользователя редактировали один и тот же TODO в оффлайне, а затем подключились и нужно синхронизировать изменения.
— Здесь также появляется проблема выстраивания изменений в хронологическом порядке. Ведь нужно чтобы они шли в хронологическом порядке. Соответственно, они должны иметь какую-то метку времени. Но на клиенте может быть установлена неверная дата. И вообще она может измениться в любой момент. Можно делать какую-то синхронизацию с сервером, но тут тоже много сложностей.
— В конце концов, есть проблема слияния данных нескольких TODO. В первую очередь, речь конечно же о текстовых полях. Например, если 2 пользователя одновременно редактируют название.
— А ещё это всё нужно сохранять в базе. И как быть с ситуацией, когда на сервер дошли какие-то более старые изменения чем те, которые уже сохранены в базе?

В общем, хотелось бы узнать кто как решал подобные проблемы?
Может есть какие-то готовые решения для описанных задач?


Спасибо!
  • Вопрос задан
  • 380 просмотров
Пригласить эксперта
Ответы на вопрос 2
Robur
@Robur
Знаю больше чем это необходимо
У меня была немного другая задача, но очень близкая, от реализации которой я в итоге отказался, но в процессе изучения как можно это решить, узнал про https://en.wikipedia.org/wiki/Conflict-free_replic...
Такие структуры позволяют менять общие данные независимо и параллельно и затем их объединять в результат.

Возможно это вам подскажет нужное направление мысли.
Ответ написан
maaGames
@maaGames
Погроммирую программы
VCS
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы