- ACID
- Atomicity: 모든 조작이 함께 성공하거나 실패하는 것
- Consistency: 데이터베이스에 대한 제한조건을 사용하여 조작에 의해 작성된 모든 변경사항들이 일관성을 유지해야 함
- 예를 들어, 데이터베이스의 계좌 잔액이 0미만으로 떨어질 수 없는 경우, 해당 제한조건을 위반하는 조작을 포함하면 트랜잭션이 실패
- Isolation: 여러 트랜잭션이 다른 트랜잭션 결과에 영향을 미치지 않고 동시에 발생할 수 있음을 의미한다.
- Duration: 내구성을 나타내며, 전원 또는 하드웨어 고장시에도 트랜잭션의 조작에 의해 수행되는 변경사항이 지속되도록 보장한다.
📌 Single and Multi-document ACID transactions in MongoDB
- 문서에 있는 여러 필드를 update하기 위해서 updateOne을 사용하면
quantity, details, tags 필드의 값이 모두 업데이트 되거나 아무것도 업데이트되지 않을 것이다.
- MongoDB를 사용했을 때, 모든 단일 문서 작업은 본질적으로 원자적이기 때문에 ACID 특성을 제공하기 위한 추가적인 단계가 필요하지 않다.
- 단일 문서 트랜잭션
- 단일 문서 트랜잭션은 한 문서에 대한 업데이트 작업에 사용됩니다.
- 예를 들어, 사용자 컬렉션에서 사용자의 이메일 주소를 변경하는 작업이 있을 때 단일 문서 트랜잭션을 사용할 수 있습니다. 이 작업은 단일 문서에만 영향을 미치므로 다른 문서에는 영향을 주지 않습니다.
- 단일 문서 트랜잭션은 기본적으로 원자적이며 ACID(원자성, 일관성, 고립성, 지속성) 특성을 준수합니다.
- 예를 들어, 사용자의 이메일 주소를 변경하는 단일 문서 트랜잭션은 변경 작업이 성공하거나 실패하면 해당 작업을 롤백할 수 있습니다.
- 다중 문서 트랜잭션:
- 다중 문서 트랜잭션은 여러 문서에 걸친 업데이트 작업에 사용됩니다.
- 예를 들어, 사용자 컬렉션과 주문 컬렉션을 동시에 업데이트하는 작업이 있을 때 다중 문서 트랜잭션을 사용할 수 있습니다. 이 작업은 여러 문서에 영향을 미치므로 한 문서에서의 실패는 모든 변경 작업이 롤백되도록 보장됩니다.
- 다중 문서 트랜잭션은 여러 문서 간의 일관성을 유지하며, 트랜잭션 내의 모든 작업이 원자적으로 처리됩니다.
- 예를 들어, 사용자 정보 업데이트와 주문 생성을 포함하는 다중 문서 트랜잭션은 모든 작업이 성공하거나 실패할 때만 커밋되거나 롤백됩니다. 따라서 데이터 일관성을 유지할 수 있습니다.
🔎 시나리오
한 고객 계정에서 다른 고객 계정으로 자금이체를 하는 시나리오
- Naja 계좌에서 Taylor에게 30달러를 자금이체 할 것이다.
ref: https://learn.mongodb.com/learn/course/m201-mongodb-performance/lesson-2-mongodb-indexes/learn?client=customer&page=7