sql >> Database >  >> NoSQL >> MongoDB

MongoDB 4.0-transacties:ACID lezen + schrijven?

Het korte antwoord is ja voor atomiciteit.

In MongoDB, Transacties (ook wel transacties met meerdere documenten genoemd) zijn gekoppeld aan een sessie . Dat wil zeggen, u start een transactie voor een sessie. U kunt op elk moment maximaal één . hebben open transactie voor een sessie.

U kunt niet de hele verzameling vergrendelen voor schrijven. Mogelijk wilt u meerdere transacties maken om ervoor te zorgen dat schrijfbewerkingen niet interlacen/overschrijven tussen uw processen. MongoDB gebruikt Optimistische vergrendeling in plaats van Pessimistische vergrendeling .

Evenzo in MongoDB transacties met meerdere documenten. Gebruik bijvoorbeeld 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. 

Houd er ook rekening mee dat terwijl de transactie open is, er geen gegevenswijzigingen die door bewerkingen in de transactie zijn aangebracht, zichtbaar zijn buiten de transactie.

  • Wanneer een transactie wordt vastgelegd, worden alle gegevenswijzigingen opgeslagen en zichtbaar buiten de transactie en eindigt de transactie.
  • Als een transactie wordt afgebroken, worden alle gegevenswijzigingen die zijn aangebracht door de schrijfbewerkingen in de transactie verwijderd zonder ooit zichtbaar te worden en wordt de transactie beëindigd.

Zie ook Atomicity-voorbeeld .

Vermeldenswaard is dat MongoDB een gedistribueerde database is , dus u moet ook op de hoogte zijn van de verschillende opties voor consistentie. U kunt deze opties specificeren bij het starten van Session.startTransaction() afhankelijk van het gebruik:

Multi-document transacties ondersteunen leesvoorkeur primary en alle bewerkingen in een bepaalde transactie moeten naar hetzelfde lid worden gerouteerd.

Mogelijk bent u ook geïnteresseerd in Engineering Chalk and Talks:MongoDB Transactions video's die enkele technische uitleg bevatten achter MongoDB-transacties.




  1. Wat zou de motivatie zijn om mongodb te integreren met solr

  2. Azure Function met Cosmos MongoDB-integratie wordt niet opgeslagen

  3. Duplicaten verwijderen uit MongoDB

  4. Combineer twee $of verklaringen