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

Transazioni MongoDB 4.0:ACID lettura + scrittura?

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 :

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.