sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongoose versionering:hvornår er det sikkert at deaktivere det?

Formålet med versionsnøglen er optimistisk låsning.

Når den er aktiveret, øges versionsværdien atomisk, hver gang et dokument opdateres.

Dette giver din applikationskode mulighed for at teste, om der er foretaget ændringer mellem en hentning (f.eks. indbringelse af versionsnøgle 42) og en efterfølgende opdatering (det sikres, at versionsværdien stadig er 42). Hvis versionsnøglen har en anden værdi (f.eks. 43, fordi en opdatering er foretaget til dokumentet), kan din applikationskode håndtere den samtidige ændring.

Det samme koncept bruges ofte i relationelle databaser i stedet for pessimistisk låsning, der kan bringe forfærdelig ydeevne. Alle anstændige ORM'er giver sådan en funktion. For eksempel er det pænt beskrevet i ObjectDB-dokumentationen . Det er en objektdatabase implementeret i Java, men det samme koncept gælder.

blogindlægget linket i Behlüls kommentar demonstrerer den optimistiske låsenytte med et konkret eksempel, men kun for arrayændringer, se nedenfor.

På det modsatte er her et simpelt tilfælde, hvor det er ubrugeligt:​​en brugerprofil, der kan redigeres af sin ejer selv. Her kan du slippe for optimistisk låsning og antage, at den sidste redigering altid vinder.

Så det er kun dig, der ved, om din ansøgning har brug for optimistisk låsning eller ej. Brug case for use case.

Mongoose-situationen er noget speciel.

Optimistisk låsning er kun aktiveret for arrays, fordi det interne lagerformat bruger positionsindeks. Dette er problemet beskrevet af blogindlægget linket i spørgsmålets kommentar. Jeg fandt forklaringen angivet i mongoose-orm mailinglisten ret klar:Hvis du har brug for optimistisk låsning til andre felter, skal du klare det selv.

Her er en gist viser, hvordan man implementerer en genforsøgsstrategi for en add operation. Igen, hvordan du vil håndtere det afhænger af dine brugssager, men det burde være nok til at komme i gang.

Jeg håber, at dette klarer tingene op.

Skål




  1. Grunt Serve-ur kaster EBUSY-advarsel over mongod.lock

  2. Fejl under oprettelse af en samling i MongoDB

  3. Find nøjagtigt matchende array eller med hele værdien af ​​array i MongoDb

  4. Mongodb, samlet forespørgsel med $lookup