ВЫБЕРИТЕ ДЛЯ ОБНОВЛЕНИЯ Пропустить заблокирован в MongoDB - PullRequest
0 голосов
/ 26 июня 2018

У меня более 100 рабочих потоков, которые собираются опросить базу данных в поисках новой работы.

Чтобы получить задание, потоку необходимо изменить состояние пакета документов с NEW на IN_PROGRESS, чтобы другие потоки не могли просматривать одно и то же задание.

Это прекрасно решается в PostgreSQL с помощью оператора SELECT FOR UPDATE SKIP LOCKED WHERE status = "NEW".

Есть ли способ сделать такое атомарное обновление в MongoDB для одного документа? Для выпечки?

1 Ответ

0 голосов
/ 26 июня 2018

Существует метод findAndModify, который работает точно так же, как вы описали для одного документа.

Для партии это невозможно сейчас, так как

В MongoDB операции записи, например, db.collection.update(), db.collection.findAndModify(), db.collection.remove(), являются атомарными на уровне отдельного документа .

Это будет возможно в MongoDB 4.0, однако, с транзакциями .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...