@pashaa
Студент

Как сделать синхронизацию клиента и сервера?

Есть два клиентских приложения, которые могут работать локально и с интернетом синхронизируя свою базу с сервером.
Проблема в том, что если синхронизировать устройство с севером, то информация этого устройства считается актуальной.
Допустим, был удален элемент 121 тогда он и на сервере удаляется, а если синхронизироваться со вторым клиентом то 121 считается как новый, что не верно, так как он просто удален.
Как сделать так чтобы данные удалялись и добавлялись корректно как в гугл календарях, например.
Неужели придётся хранить все время всю историю удаления на сервере.
  • Вопрос задан
  • 88 просмотров
Пригласить эксперта
Ответы на вопрос 3
@rPman
Заведите на сервере понятие update log (машиночитаемый), в который помещайте все события изменения базы данных, это может быть таблица
id (каждое изменение - увеличивается на 1), имя таблица, id в таблице, имя поля, тип (новый, изменен, удален), новое значение, старое значение (опционально)
и заполняйте ее тригерами автоматически

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

Клиентская сторона должна хранить id этой таблицы для последней синхронизированной записи (а так же для первой загрузки, в принципе всю базу можно восстановить с нулеввой записи только долго), все получаемые данные этого лога должны быть больше последнего этого значения, без пропусков.
Ответ написан
yarkov
@yarkov
Vue.js Frontend Developer
У элемента 121 должно быть свойство updated.
При синхронизации считать актуальным тот элемент, у которого updated самый поздний.
А историю да, желательно хранить. Я хз как без истории изменений сделать синхронизацию удаления элементов.
Может щас гуру проснутся и подскажут.
Ответ написан
neatsoft
@neatsoft
Life is too short for bad software
Soft delete - для фильтрации элементов использовать поле is_deleted (default=False), при удалении присваивать ему значение True, физически строки из базы не удалять (либо удалять после синхронизации со всеми клиентами). При обмене данными опираться на значение поля updated_at (в котором нужно хранить дату последнего редактирования / удаления).
Ответ написан
Ваш ответ на вопрос

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

Войти через TM ID
Похожие вопросы
от 60 000 до 90 000 руб.
от 70 000 до 120 000 руб.
ИА «Кельник» Санкт-Петербург
от 50 000 до 70 000 руб.