Сохранять только измененные поля

1

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

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

Теги:

1 ответ

0

Шаги, выполняемые вашим приложением:

  1. Пользователь получает данные от MongoDB

  2. Эти данные частично изменены

  3. Изменения должны быть сохранены

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


Команда Spring представляет несколько инструментов Diff, несколько месяцев назад: https://spring.io/blog/2014/10/22/introducing-spring-sync

Используя это, вы получите объект Patch, который содержит только изменения.

Patch patch = Diff.diff(original, modified);

Вот такой подход, который мог бы работать:

  1. Object data = mongoClient.getData();
  2. Object modifiedData = modify(data);
  3. Patch patch = Diff.diff(data, modifiedData);

patch теперь содержит все, что изменилось. Теперь вы должны каким-то образом использовать внутренности объекта Patch и сопоставить его с командами MongoDB $set.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню