#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
Новые предложения по-прежнему приветствуются и ценятся