티스토리 뷰
728x90
반응형
8.1 트랜잭션 소개
- 트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 논리적 처리 단위
- 작업이 성공하든 실패하든 부분적으로는 완료되지 않음
8.1.1 ACID 정의
- Atomicity 원자성
- 트랜잭션 내 모든 작업이 적용되거나 아무 작업도 적용되지 않도록 한다
- 커밋 되거나 중단된다
- Consistency 일관성
- 트랜잭션이 성공하면 DB가 하나의 일관성 있는 상태에서 다음 일관성 있는 상태로 이동
- Isolation 고립성
- 여러 트랜잭션이 DB에서 동시에 실행되도록 허용하는 속성
- 트랜잭션이 다른 트랜잭션의 부분 결과를 보지 않도록 보장
- Durability 영속성
- 트랜잭션이 커밋될 때 시스템 오류가 발생하더라도 모든 데이터가 유지
8.2 트랜잭션 사용법
코어 API
- 대부분의 오류에 재시도 로직을 제공하지 않으며
- 개발자가 작업에 대한 로직, 트랜잭션 커밋 함수, 필요한 재시도 및 오류 로직을 모두 작성
//트랜잭션 시작
ClientSession session = mongoClient.startSession();
session.startTransaction();
//동작 수행
collection1.insertOne(session, document1);
collection2.updateOne(session, filter2, update2);
//커밋
session.commitTransaction();
//또는 롤백
session.abortTransaction();
//트랜잭션 종료
session.close();
콜백 API
- 지정된 논리 세션과 관련된 트랜잭션 시작, 콜백 함수로 제공된 함수 실행, 트랜잭션 커밋 함수 등
- 코어 API에 비해 많은 기능을 wrapping 하는 단일 함수를 제공
- 커밋 오류를 처리하는 재시도 로직도 포함
//트랜잭션 옵션을 설정
TransactionOptions options = TransactionOptions.builder().readPreference(ReadPreference.primary()).build();
session.withTransaction(new TransactionBody<Void>() { // 콜백 객체를 정의
public Void execute() {
// 트랜잭션 내에서 수행할 작업 정의
collection1.insertOne(session, document1);
collection2.updateOne(session, filter2, update2);
// ...
return null;
}
}, options);
8.3 애플리케이션을 위한 트랜잭션 제한 조정
8.3.1 타이밍과 Oplog 크기 제한
시간 제한
- 트랜잭션의 최대 실행 시간은 기본적으로 1분 이하
- 시간이 경과하면 트랜잭션이 만료됐다고 간주하여 중단
- 트랜잭션의 작업에 필요한 락을 획득하기 위해 트랜잭션이 대기하는 최대시간은 기본 5밀리세컨드
- 시간 내에 락을 획득할 수 없으면 트랜잭션은 중단
Oplog 크기 제한
- 트랜잭션의 쓰기 작업에 필요한 만큼 oplog 항목을 생성
- 각 항목은 BSON 도큐먼트 크기 제한인 16메가바이트 이하
728x90
반응형
'DB > MongoDB' 카테고리의 다른 글
[MongoDB] 복제 셋 구성 요소 (0) | 2023.07.27 |
---|---|
[MongoDB] 복제 셋 설정 (0) | 2023.07.11 |
[MongoDB] 애플리케이션 설계 (0) | 2023.06.20 |
[MongoDB] 집계 프레임워크 (0) | 2023.05.10 |
[MongoDB] 공간 정보 인덱스 (0) | 2023.04.26 |
반응형
300x250