La risposta breve è sì per l'atomicità.
In MongoDB, Transazioni (chiamate anche transazioni multi-documento) sono associate a una sessione . Cioè, si avvia una transazione per una sessione. In qualsiasi momento, puoi averne al massimo uno aprire una transazione per una sessione.
Non è possibile bloccare l'intera raccolta per le scritture. Potresti voler creare più transazioni per assicurarti che le scritture non siano interlacciate/override tra i tuoi processi. MongoDB utilizza Blocco ottimistico invece di Blocco pessimistico .
Allo stesso modo nelle transazioni multi-documento MongoDB. Ad esempio, utilizzando 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.
Tieni inoltre presente che mentre la transazione è aperta, nessuna modifica ai dati apportata dalle operazioni nella transazione è visibile al di fuori della transazione.
- Quando una transazione viene confermata, tutte le modifiche ai dati vengono salvate e visibili all'esterno della transazione e la transazione termina.
- Quando una transazione si interrompe, tutte le modifiche ai dati apportate dalle scritture nella transazione vengono eliminate senza mai diventare visibili e la transazione termina.
Vedi anche Esempio di Atomicity .
Vale la pena notare che MongoDB è un database distribuito , quindi devi anche essere a conoscenza delle diverse opzioni per la coerenza. È possibile specificare queste opzioni all'avvio di Session.startTransaction() a seconda del caso d'uso :
-
Lettura isolamento (lettura preoccupazione) :supporto per transazioni multi-documento MongoDB problema di lettura "istantanea ", "locale " e "maggioranza ".
Le transazioni multi-documento supportano la preferenza di lettura primary e tutte le operazioni in una determinata transazione devono essere indirizzate allo stesso membro.
Potrebbe interessarti anche Engineering Chalk and Talks:MongoDB Transactions video che contengono alcune spiegazioni tecniche dietro le transazioni MongoDB.