Чтение и вставка документа с блокировкой/транзакцией в nodejs с помощью mongodb

#node.js #mongodb #mongoose #mongodb-query

Вопрос:

В системе бронирования только 5 разных пользователей могут создавать заказы. Если 100 пользователей одновременно вызовут api бронирования, чем то, как обрабатывать параллелизм с блокировкой. Я использую nodejs с mongodb. Я просмотрел статью о параллелизме mongo здесь и транзакции в mongodb, но не смог найти никакого примера решения для кодирования с блокировкой.

Я достиг решения с оптимистичным управлением параллелизмом (когда существует низкая конкуренция за ресурс — это можно легко реализовать с помощью поля Номер версии или Метка времени).

Заранее благодарю вас за то, что предложили мне решение с блокировкой.

Теперь алгоритм таков,

Шаг 1: Получите присвоенный номер пользователя из коллекции наборов пользователей.

Запрос: db.getCollection(‘Настройки пользователей’). найти({})

Данные Ответа:

 {
   "userAllowedNumber": 5
}
 

Шаг 2, Получите текущее количество бронирований из коллекции бронирований.

Запрос: db.getCollection(«заказы»).количество({ })

Данные для ответа: 2

Шаг 3, если забронировано количество

Запрос: db.getCollection(«бронирование»).создать({ идентификатор пользователя: «usr_1» })

Комментарии:

1. Отсутствие ответа означает, что Mongodb не справляется с этим situation…is это?

2. MongoDB поддерживает транзакции ACID с несколькими документами начиная с версии 4.0, что является решением для случая использования, описанного здесь. Проверьте сообщение в блоге Лорен здесь для NodeJS: mongodb.com/blog/post/. … Или мой с Java, который охватывает аналогичный вариант использования: «Не продавайте больше, чем у вас есть на складе»: mongodb.com/blog/post/…

Ответ №1:

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

Вы можете ознакомиться с полным диалогом сообщества Mongodb по этой ссылке https://www.mongodb.com/community/forums/t/implementing-locking-in-transaction-for-read-and-write/127845

Демонстрационный код Github с тестированием Jmeter показывает ограничение и неспособность обрабатывать одновременный запрос для этой задачи. https://github.com/naisargparmar/concurrencyMongo

Новые предложения по-прежнему приветствуются и ценятся