Какую стратегию выбрать, если MongoDB не работает и операции ожидают - PullRequest
0 голосов
/ 25 января 2019

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

Каждый объект Manager имеет список ссылок сотрудников

Так классы выглядят так

Class Manager {

ObjectId _id;

//some attributes

List<Employees> employees;

LocalDateTime createdOn;

}


Class Employee {

ObjectId _id

//some attributes

Manager manager; //Having only attributes but not ObjectId of manager

LocalDateTime createdOn;

}


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

При запросе мы получим атрибуты менеджера и вернем обратно Список сотрудников менеджера, который является последним в соответствии с атрибутами и полем createOn

Итак, проблема, с которой я сталкиваюсь:

Сохраняя новый список сотрудников, принадлежащих новому менеджеру, я сначала сохраняю всех сотрудников, используя функцию insertMany () mongoClient. Затем я сохраняю диспетчер, используя insert ().

Если после сохранения списка сотрудников и до сохранения менеджера что-то плохое случилось с Монго, и Db не работает, поэтому я не смогу сохранить менеджера, поэтому все сотрудники теперь станут сиротами.

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

Я использую SpringBoot 2 с драйвером Raw Mongo Java 3.8.0 и Java 8

Я попробовал опцию моно-повторной записи, но она пытается только один раз

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Начиная с версии 4.0, mongodb поддерживает транзакции. См. https://docs.mongodb.com/manual/core/transactions/ и примеры Java. Обратите внимание, что драйвер 3.8 уже содержит все необходимые методы, поддержка - это только вопрос версии сервера базы данных.

0 голосов
/ 25 января 2019

Вверху моей головы, на ум приходят следующие две опции.

  • Есть резервное хранилище данных, в которое вы пишете, если MongoDB не работает (например, другой экземпляр Mongo, свободной формы)текстовые файлы, PostgreSQL) и автоматически переключаться на него.Возможно, вам придется вручную потом вернуть эти данные в Mongo, а затем снова включить запись в Mongo, но если Mongo отключается довольно редко, это, вероятно, приемлемо.
  • Поместите очередь между вашим основным приложением ирабочий процесс, единственная цель которого - написать Монго.Если Mongo выходит из строя, рабочий процесс останавливается, а запись, которая не удалась, остается в очереди.Когда Mongo возвращается, рабочий процесс перезапускается, и все будет хорошо.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...