Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: MongoDB
В этой статье вы создадите приложение оболочки Mongo, которое выполняет многодокументную транзакцию в фиксированной коллекции в Azure Cosmos DB для MongoDB с сервером версии 4.0.
Что такое транзакции с несколькими документами?
В Azure Cosmos DB для MongoDB операции с одним документом являются атомарными. Транзакции с несколькими документами позволяют приложениям выполнять атомарные операции в нескольких документах. Для операций предлагается семантика "все или ничего". При фиксации изменения, внесенные в транзакции, сохраняются, и если транзакция завершается ошибкой, все изменения в транзакции отменяются.
Транзакции с несколькими документами выполняются согласно семантике ACID:
- Атомарность: все операции рассматриваются как единое целое
- Согласованность: зафиксированные данные достоверные
- Изоляция: изолированность от других операций
- Устойчивость: данные транзакций сохраняются при наличии соответствующего требования для клиента
Требования
Транзакции с несколькими документами поддерживаются в несегментированной коллекции в API версии 4.0. Транзакции с несколькими документами не поддерживаются между коллекциями или в сегментированных коллекциях в версии 4.0. Время ожидания транзакций составляет 5 секунд.
Все драйверы, поддерживающие проводной протокол версии 4.0 или более поздней, будут поддерживать транзакции Azure Cosmos DB для MongoDB с несколькими документами.
Выполнение транзакций с несколькими документами в оболочке MongoDB
Примечание.
Этот пример не работает в бета-версии MongoSH (оболочке), встроенной в MongoDB Compass.
Откройте командную строку и перейдите в каталог, где установлена оболочка Mongo версии 4.0 и выше:
cd <path_to_mongo_shell_>
Создайте скрипт оболочки Mongo connect_friends.js и добавьте следующее содержимое
// 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();
Выполните следующую команду для проведения транзакции с несколькими документами. Узел, порт, пользователь и ключ можно найти на портале Azure.
mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
Следующие шаги
Узнайте о новых возможностях Azure Cosmos DB для MongoDB 4.0