Partager via


Utiliser des transactions multidocuments dans Azure Cosmos DB for MongoDB

S’APPLIQUE À : MongoDB

Dans cet article, vous allez créer une application shell Mongo qui exécute une transaction multidocument sur une collection fixe dans Azure Cosmos DB for MongoDB avec la version serveur 4.0.

Que sont les transactions multidocuments ?

Dans Azure Cosmos DB for MongoDB, les opérations exécutées sur un seul document sont de type atomique. Les transactions multidocuments permettent aux applications d’exécuter des opérations atomiques sur plusieurs documents. Elles fournissent une sémantique « tout ou rien » aux opérations. À la validation, les modifications effectuées dans les transactions sont conservées et, si une transaction échoue, toutes les modifications au sein de la transaction sont ignorées.

Les transactions multidocuments suivent la sémantique ACID :

  • Atomicité : toutes les opérations sont traitées comme un tout
  • Cohérence : les données validées sont correctes
  • Isolation : données isolées des autres opérations
  • Durabilité : les données de transaction sont conservées quand le client est enjoint à le faire

Spécifications

Les transactions multidocuments sont prises en charge dans une collection non partitionnée dans l’API version 4.0. Les transactions multidocuments ne sont pas prises en charge sur plusieurs collections ou au sein de collections partitionnées dans la version 4.0. Le délai d’expiration des transactions est fixé à cinq secondes.

Tous les pilotes qui prennent en charge le protocole filaire version 4.0 ou ultérieure prennent en charge les transactions multidocuments dans Azure Cosmos DB for MongoDB.

Exécuter des transactions multidocuments dans le shell MongoDB

Notes

Cet exemple ne fonctionne pas dans la version bêta de MongoSH (interpréteur de commandes) incorporée dans MongoDB Compass.

  1. Ouvrez une invite de commandes, et accédez au répertoire où le shell Mongo version 4.0 ou ultérieure est installé :

    cd <path_to_mongo_shell_>
    
  2. Créez un script de shell Mongo connect_friends.js et ajoutez-y le contenu suivant

    // insert data into friends collection
    db.getMongo().getDB("users").friends.insert({name:"Tom"})
    db.getMongo().getDB("users").friends.insert({name:"Mike"})
    // start transaction
    var session = db.getMongo().startSession();
    var friendsCollection = session.getDatabase("users").friends;
    session.startTransaction();
    // operations in transaction
    try {
        friendsCollection.updateOne({ name: "Tom" }, { $set: { friendOf: "Mike" } } );
        friendsCollection.updateOne({ name: "Mike" }, { $set: { friendOf: "Tom" } } );
    } catch (error) {
        // abort transaction on error
        session.abortTransaction();
        throw error;
    }
    
    // commit transaction
    session.commitTransaction();
    
  3. Exécutez la commande suivante pour exécuter la transaction multidocument. L’hôte, le port, l’utilisateur et la clé sont indiqués dans le portail Azure.

    mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
    

Étapes suivantes

Explorez les nouveautés d’Azure Cosmos DB for MongoDB 4.0