sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur fungerar $inc-modifieraren med samtidiga förfrågningar i mongodb?

Det är lite brett egentligen men jag kan erbjuda de breda slagen. Från och med MongoDB använder samlingsnivålåsning med standardlagringsmotorn. Det finns också WiredTiger-lagringsmotorn tillgänglig som implementerar dokumentnivålåsning . Men i princip i alla utgåvor finns det någon nivå av "låsning" som händer på varje begäran. Ju finare nivå desto bättre beroende på dina faktiska genomströmningsbehov.

I princip händer inga två förfrågningar samtidigt eftersom de kommer att "blockera" på låset som görs tills det släpps. Så värdet som skulle returneras ( i säg en findAndModify() request ), skulle vara i "nuvarande tillstånd" för när begäran gjordes.

Så på en sådan begäran skulle satsen som kördes först returnera värdet 2, och nästa exekverade sats skulle returnera värdet 3. Slutpositionen i databasen är att värdet för närvarande skulle vara 3.

Så det finns inget sätt att något kan "modifiera" samtidigt, och sluttillståndet skulle vara det som inträffar efter att "alla" förfrågningar har utfärdats. Så $inc och andra operatörer gör precis som de ska och ändrar innehållet baserat på dokumentets tillstånd när det faktiskt kunde komma åt det.




  1. Vilket är det rätta mönstret för kapslade scheman i Mongoose/MongoDB?

  2. Finns det på något sätt att upptäcka vilka ip-adresser som är anslutna till db?

  3. mongodb kraschar efter oväntad avstängning

  4. Profilering av MongoDB-databasen för att se de utförda frågorna