sql >> Database >  >> NoSQL >> MongoDB

Hoe werkt de $inc-modifier met gelijktijdige verzoeken in mongodb?

Het is eigenlijk een beetje breed, maar ik kan de brede lijnen aanbieden. Vanaf MongoDB gebruikt vergrendeling op verzamelingsniveau met de standaard opslag-engine. Er is ook de WiredTiger-opslagengine beschikbaar die implementeert documentniveau vergrendeling . Maar eigenlijk is er in alle releases een zekere mate van "locking" die bij elk verzoek plaatsvindt. Hoe fijner het niveau, hoe beter, afhankelijk van uw werkelijke doorvoerbehoeften.

In wezen vinden er geen twee verzoeken tegelijkertijd plaats, omdat ze het gemaakte slot "blokkeren" totdat het wordt vrijgegeven. Dus de waarde die zou worden geretourneerd (in bijvoorbeeld een findAndModify() request ), zou zijn vanaf de "huidige status" voor toen dat verzoek werd gedaan.

Dus op zo'n verzoek zou de instructie die als eerste werd uitgevoerd een waarde van 2 retourneren, en de volgende uitgevoerde instructie zou een waarde van 3 retourneren. De eindpositie in de database is dat de waarde momenteel 3 zou zijn.

Er is dus geen manier waarop iets tegelijkertijd kan "wijzigen", en de eindstatus zou die zijn die optreedt nadat "alle" verzoeken zijn uitgegeven. Dus $inc en andere operators doen precies wat ze zouden moeten doen en wijzigen de inhoud op basis van de status van het document op het moment dat het daadwerkelijk toegang kon krijgen tot het document.




  1. Hoe de junit-tests de ingebedde mongoDB te laten gebruiken in een springboot-toepassing?

  2. Query op arraytype - MongoDB

  3. Mongoïde met rails, attr_accessible --> Geen methode gevonden

  4. Hoe groeperen in totaal, maar ook andere velden weergeven met Mongo?