MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB 4.0-Transaktionen:ACID Lesen + Schreiben?

Die kurze Antwort ist ja für die Atomarität.

In MongoDB Transaktionen (auch Transaktionen mit mehreren Dokumenten genannt) sind mit einer Sitzung verknüpft . Das heißt, Sie starten eine Transaktion für eine Sitzung. Sie können zu jedem Zeitpunkt höchstens einen haben Transaktion für eine Sitzung öffnen.

Sie können nicht die gesamte Sammlung für Schreibvorgänge sperren. Möglicherweise möchten Sie mehrere Transaktionen erstellen, um sicherzustellen, dass Schreibvorgänge zwischen Ihren Prozessen nicht verschachtelt/überschrieben werden. MongoDB verwendet Optimistic Locking statt Pessimistisches Sperren .

Ähnlich in MongoDB-Transaktionen mit mehreren Dokumenten. Verwenden Sie zum Beispiel 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. 

Beachten Sie auch, dass bei geöffneter Transaktion keine Datenänderungen, die von Vorgängen in der Transaktion vorgenommen wurden, außerhalb der Transaktion sichtbar sind.

  • Wenn eine Transaktion festgeschrieben wird, werden alle Datenänderungen gespeichert und außerhalb der Transaktion sichtbar und die Transaktion endet.
  • Wenn eine Transaktion abgebrochen wird, werden alle Datenänderungen, die durch die Schreibvorgänge in der Transaktion vorgenommen wurden, verworfen, ohne jemals sichtbar zu werden, und die Transaktion endet.

Siehe auch Atomizitätsbeispiel .

Beachten Sie, dass MongoDB eine verteilte Datenbank ist , daher müssen Sie sich auch der verschiedenen Konsistenzoptionen bewusst sein. Sie können diese Optionen beim Initiieren von Session.startTransaction() angeben. je nach Anwendungsfall :

Transaktionen mit mehreren Dokumenten unterstützen die Leseeinstellung primary und alle Operationen in einer bestimmten Transaktion müssen an dasselbe Mitglied weitergeleitet werden.

Sie könnten auch an Engineering Chalk and Talks:MongoDB Transactions interessiert sein Videos, die einige technische Erklärungen zu MongoDB-Transaktionen enthalten.