MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como o modificador $inc funciona com solicitações simultâneas no mongodb?


É um pouco amplo, na verdade, mas posso oferecer os traços amplos. A partir do MongoDB usa bloqueio de nível de coleção com o mecanismo de armazenamento padrão. Há também o mecanismo de armazenamento WiredTiger disponível que implementa bloqueio de nível de documento . Mas basicamente em todas as versões existe algum nível de "bloqueio" que acontece em cada solicitação. Quanto mais fino o nível, melhor, dependendo de suas necessidades reais de taxa de transferência.

Essencialmente, duas solicitações não acontecem ao mesmo tempo, pois elas "bloqueiam" o bloqueio feito até que ele seja liberado. Portanto, o valor que seria retornado (por exemplo, um findAndModify() request ), seria a partir do "estado atual" para quando essa solicitação foi feita.

Assim, em tal solicitação, a instrução executada primeiro retornaria um valor de 2, e a próxima instrução executada retornaria um valor de 3. A posição final no banco de dados é que o valor atualmente seria 3.

Portanto, não há como algo "modificar" ao mesmo tempo, e o estado final seria aquele que ocorre após "todas" as solicitações serem emitidas. Então $inc e outros operadores fazem exatamente o que deveriam e modificam o conteúdo com base no estado do documento no momento em que ele foi realmente capaz de acessá-lo.