MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Transactions MongoDB 4.0 :lecture + écriture ACID ?

La réponse courte est oui pour l'atomicité.

Dans MongoDB, Transactions (également appelées transactions multi-documents) sont associées à une session . Autrement dit, vous démarrez une transaction pour une session. À tout moment, vous pouvez avoir au plus un ouvrir une transaction pour une session.

Vous ne pouvez pas verrouiller toute la collection pour les écritures. Vous souhaiterez peut-être créer plusieurs transactions pour vous assurer que les écritures ne s'entrelacent pas/ne se substituent pas entre vos processus. MongoDB utilise Verrouillage optimiste au lieu de Verrouillage pessimiste .

De même dans les transactions multi-documents MongoDB. Par exemple, en utilisant 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. 

Notez également que lorsque la transaction est ouverte, aucune modification de données effectuée par les opérations de la transaction n'est visible en dehors de la transaction.

  • Lorsqu'une transaction est validée, toutes les modifications de données sont enregistrées et visibles en dehors de la transaction et la transaction se termine.
  • Lorsqu'une transaction est abandonnée, toutes les modifications de données apportées par les écritures dans la transaction sont ignorées sans jamais devenir visibles et la transaction se termine.

Voir aussi Exemple d'atomicité .

A noter que MongoDB est une base de données distribuée , vous devez donc également connaître les différentes options de cohérence. Vous pouvez spécifier ces options lors du lancement de Session.startTransaction() selon le cas d'utilisation :

Les transactions multi-documents prennent en charge la préférence de lecture primary et toutes les opérations d'une transaction donnée doivent être acheminées vers le même membre.

Vous pourriez également être intéressé par Engineering Chalk and Talks :MongoDB Transactions vidéos contenant des explications techniques sur les transactions MongoDB.