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

MongoDB 4.0 Transaktioner:ACID Læse + Skriv?

Det korte svar er ja til atomicitet.

I MongoDB, Transaktioner (også kaldet multidokumenttransaktioner) er forbundet med en session . Det vil sige, at du starter en transaktion for en session. På ethvert givet tidspunkt kan du højst have én åben transaktion for en session.

Du kan ikke låse hele samlingen til at skrive. Du ønsker måske at oprette flere transaktioner for at sikre, at skrivninger ikke flettes/tilsidesættes mellem dine processer. MongoDB bruger Optimistisk låsning i stedet for Pessimistisk låsning .

Tilsvarende i MongoDB multi-dokument transaktioner. For eksempel ved at bruge mongo shell :

s1 = Mongo().startSession() 
sessionTest = s1.getDatabase("databaseName").test;
s1.startTransaction() 
sessionTest.find({a:"foo"})
> {_id: ObjectId(..), a:"foo", b:1}

// Let's update the record outside of the session (i.e. another process)
db.test.update({a:"foo"}, {$set:{b:2}})

sessionTest.update({a:"foo"}, {$set:{b:9}})
// You'll get a WriteConflict error because the the document has been modified outside of the session. 

Bemærk også, at mens transaktionen er åben, er ingen dataændringer foretaget af operationer i transaktionen synlige uden for transaktionen.

  • Når en transaktion forpligtes, gemmes alle dataændringer og er synlige uden for transaktionen, og transaktionen afsluttes.
  • Når en transaktion afbrydes, kasseres alle dataændringer foretaget af skrivningerne i transaktionen uden nogensinde at blive synlige, og transaktionen afsluttes.

Se også Atomicitetseksempel .

Værd at bemærke, at MongoDB er en distribueret database , så du skal også være opmærksom på de forskellige muligheder for konsistens. Du kan angive disse muligheder, når du starter Session.startTransaction() afhængigt af brugssituationen:

Transaktioner med flere dokumenter understøtter læsepræference primær og alle operationer i en given transaktion skal sendes til det samme medlem.

Du kan også være interesseret i Engineering Chalk and Talks:MongoDB Transactions videoer, som indeholder nogle tekniske forklaringer bag MongoDB-transaktioner.




  1. Indsendelse af JSON til Flask resulterer i 400 Bad Request-fejl

  2. Redis vs. Memcached

  3. Hvordan får man en MongoDB-forespørgsel til at sortere på strenge med -number postfix?

  4. Gem billeder i Mongodb server dem med Nodejs