Azure Cosmos DB for MongoDB에서 다중 문서 트랜잭션 사용
적용 대상: MongoDB
이 문서에서는 서버 버전 4.0의 Azure Cosmos DB for MongoDB의 고정된 컬렉션에서 다중 문서 트랜잭션을 실행하는 Mongo 셸 앱을 생성합니다.
다중 문서 트랜잭션이란?
Azure Cosmos DB for MongoDB에서 단일 문서에 대한 작업은 원자성입니다. 다중 문서 트랜잭션을 통해 응용 프로그램은 여러 문서에서 원자성 작업을 실행할 수 있습니다. 작업에 "모두 또는 없음" 의미 체계를 제공합니다. 커밋 시 트랜잭션 내에서 수행된 변경 내용이 유지되고, 트랜잭션이 실패하면 트랜잭션 내의 모든 변경 내용이 삭제됩니다.
다중 문서 트랜잭션은 ACID 의미 체계를 따릅니다.
- 원자성: 모든 작업이 하나로 처리 됨
- 일관성: 커밋된 데이터가 유효함
- 격리: 다른 작업과 격리됨
- 내구성: 클라이언트가 지시한 경우 트랜잭션 데이터가 유지됨
요구 사항
다중 문서 트랜잭션은 API 버전 4.0의 분할되지 않은 컬렉션 내에서 지원됩니다. 다중 문서 트랜잭션은 컬렉션 전체 또는 4.0의 분할된 컬렉션에서 지원되지 않습니다. 트랜잭션의 제한 시간은 5초로 고정되어 있습니다.
유선 프로토콜 버전 4.0 이상을 지원하는 모든 드라이버는 Azure Cosmos DB for MongoDB 다중 문서 트랜잭션을 지원합니다.
MongoDB 셸에서 다중 문서 트랜잭션 실행
참고 항목
이 예시는 MongoDB Compass에 포함된 MongoSH beta(shell)에서 작동하지 않습니다.
명령 프롬프트를 열고 Mongo shell 버전 4.0 이상이 설치된 디렉터리로 이동합니다.
cd <path_to_mongo_shell_>
Mongo shell 스크립트 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 Portal에서 호스트, 포트, 사용자, 키를 찾을 수 있습니다.
mongo "<HOST>:<PORT>" -u "<USER>" -p "KEY" --ssl connect_friends.js
다음 단계
Azure Cosmos DB for MongoDB 4.0의 새로운 기능을 살펴봅니다.