A가 B에게 계좌로 돈을 보낸다고 가정하면 다음과 같은 과정이 필요하다.
1. A 계좌 잔액 확인
2. A 계좌 잔액 차감
3. B 계좌 잔액 확인
4. B 계좌 잔액 증가
이러한 일련의 과정을 트랜잭션이라고 한다.
트랜잭션은 4가지 특성(ACID)을 만족해야한다.
- 원자성(Atomicity)
전부 반영되거나 전부 반영되지 않게(All or Nothing) - 지속성(Consistency)
결과가 지속돼야함 - 독립성(Isolation)
여러 트랜잭션이 서로 영향을 미치면 안됨 - 일관성(Durability)
결과가 변하면 안됨
하지만 성능을 위해 특성을 위배하게 됨
동시에 1000000개의 요청이 들어올 때 순차적으로 처리할 수 없기 때문
트랜잭션 격리 수준
(동시성)
- Read-uncommited
- Read-commited
- Repeatable-read
- Serializable
(데이터 정합성)
Read-uncommited
커밋되지 않은 값도 바로 읽어서 사용
->Dirty Read, Non-Repeatable Read, Phantom Read 문제점 있음
Read-commited
커밋이 완료된 트랜잭션의 변경사항만 다른 트랜잭션에서 조회 가능
커밋하기 전이라면 커밋하기 전 값을 읽고 커밋하게 되면 변경된 데이터를 읽어옵니다.
->Non-Repaeatable Read, Phantom Read 현상 발생 - 같은 데이터를 조회했는데 값이 불일치한 문제
Repeatable-read
반복적으로 조회해도 같은 값을 반환
->Phantom Read -
Serializable
한 트랜잭션에서 사용하는 데이터를 다른 트랜잭션에서 접근 불가
ACID는 잘 지켜지나, 성능이 떨어짐
'Computer Science > DB' 카테고리의 다른 글
Redis란? (0) | 2023.03.17 |
---|---|
MongoDB 기본 개념에 대해 알아보기 (정리) (0) | 2022.05.13 |
DB 기초 (0) | 2022.02.03 |
NoSQL (0) | 2021.10.29 |
정규화 (0) | 2021.10.29 |