#mongodb #mongoose
#mongodb #mongoose
Вопрос:
Я создаю функцию реального времени для своего приложения, которая содержит набор элементов. Каждый пользователь может получить определенное количество элементов, но мне интересно, как я должен с этим справиться:
Items left: 7
User A wants 5 items
User B wants 5 items
И они оба нажали кнопку в одно и то же время.
Из-за проблемы с записью / блокировкой, если я сделаю это, получит ли это только один человек? Или они оба получат это, и количество моих элементов будет равно -3 или?
var number = 5
.update(
{$where : "items > number -1"},
{$inc: {"items": -number}},
{multi: true}
);
Ответ №1:
В руководстве по MongoDB:
MongoDB позволяет нескольким клиентам считывать и записывать одни и те же данные. Для обеспечения согласованности он использует блокировку и другие меры контроля параллелизма, чтобы предотвратить одновременное изменение одной и той же части данных несколькими клиентами. Вместе эти механизмы гарантируют, что все записи в один документ выполняются либо полностью, либо не выполняются вообще, и что клиенты никогда не видят противоречивого представления данных.
Итак, MongoDB позаботится об этом.