sql >> Database >  >> NoSQL >> MongoDB

Mongoose-versiebeheer:wanneer is het veilig om het uit te schakelen?

Het doel van de versiesleutel is optimistische vergrendeling.

Indien ingeschakeld, wordt de versiewaarde atomair verhoogd wanneer een document wordt bijgewerkt.

Hierdoor kan uw toepassingscode testen of er wijzigingen zijn aangebracht tussen een ophaalactie (bijvoorbeeld versiesleutel 42 inbrengen) en een daaropvolgende update (er ervoor zorgen dat de versiewaarde nog steeds 42 is). Als de versiesleutel een andere waarde heeft (bijvoorbeeld 43 omdat een update is aangebracht in het document), kan uw applicatiecode de gelijktijdige wijziging aan.

Hetzelfde concept wordt vaak gebruikt in relationele databases in plaats van pessimistische vergrendeling die vreselijke prestaties kan opleveren. Alle fatsoenlijke ORM's bieden zo'n functie. Het wordt bijvoorbeeld mooi beschreven in ObjectDB-documentatie . Het is een objectdatabase geïmplementeerd in Java, maar hetzelfde concept is van toepassing.

De blogbericht gelinkt in de opmerking van Behlül demonstreert het optimistische nut van vergrendeling met een concreet voorbeeld, maar alleen voor wijzigingen in arrays, zie hieronder.

Integendeel, hier is een eenvoudig geval waar het nutteloos is:een gebruikersprofiel dat door de eigenaar zelf kan worden bewerkt. Hier kun je optimistische vergrendeling verwijderen en aannemen dat de laatste bewerking altijd wint.

Dus alleen u weet of uw toepassing een optimistische vergrendeling nodig heeft of niet. Gebruik geval voor gebruik.

De Mongoose-situatie is enigszins speciaal.

Optimistische vergrendeling is alleen ingeschakeld voor arrays omdat het interne opslagformaat positionele index gebruikt. Dit is het probleem dat wordt beschreven in de blogpost gekoppeld in de opmerking van de vraag. Ik vond de uitleg gegeven in de mongoose-orm mailinglijst vrij duidelijk:als je optimistische vergrendeling voor andere velden nodig hebt, moet je het zelf doen.

Hier is een gist laten zien hoe u een strategie voor opnieuw proberen kunt implementeren voor een add operatie. Nogmaals, hoe u ermee om wilt gaan, hangt af van uw gebruikssituaties, maar het zou voldoende moeten zijn om u op weg te helpen.

Ik hoop dat dit alles opheldert.

Proost




  1. Verwijder genest document met voorwaarde in MongoDB

  2. Node.js belooft met mongoskin

  3. MongoDB-query IN array van object

  4. Laravel Jensseger Mongodb behoortToMany retourneert lege array