Open epicblues opened 9 months ago
여러 연산을 하나의 논리적 단위로 묶음
비즈니스 불변식 보장
DB가 아닌 애플리케이션에서 보장해야 하는 것
Dirty Read
Dirty Write
set value = value + 1
compare-and-set
Read committed
Read Skew
Snapshot Isolation
Write Skew
여러 트랜잭션의 병렬 실행 여부와 상관 없이 최종적 결과는 한 번에 하나씩 직렬로 실행 보장
최종적 결과는 한 번에 하나씩 직렬로 실행 보장
→ 모든 race condition 차단
스토어드 프로시저
단일 스레드 직렬화 DB에서는 힘들다!
여러 문제들
예시(Redis)
[Transactions](https://redis.io/docs/interact/transactions/)
파티셔닝
성능 저하
다른 트랜잭션 작업 완료를 하지 않는다
SELECT … FOR UPDATE
7장. 트랜잭션
여러 연산을 하나의 논리적 단위로 묶음
트랜잭션의 4가지 요소
Atomic
Consistency
비즈니스 불변식 보장
DB가 아닌 애플리케이션에서 보장해야 하는 것
Isolation
Durability
완화되 격리 수준
Dirty Read
Dirty Write
set value = value + 1
compare-and-set
연산 활용Read committed
Read Skew
Snapshot Isolation
Write Skew
Isolation(Serialization)
여러 트랜잭션의 병렬 실행 여부와 상관 없이
최종적 결과는 한 번에 하나씩 직렬로 실행 보장
→ 모든 race condition 차단
단일 스레드 트랜잭션(진짜 직렬성!)
보완 방식
스토어드 프로시저
단일 스레드 직렬화 DB에서는 힘들다!
여러 문제들
예시(Redis)
[Transactions](https://redis.io/docs/interact/transactions/)
파티셔닝
성능 저하
2단계 잠금(two-phase locking)
SSI(Serialized Snapshot Isolation)
낙관적 동시성 제어 구현
다른 트랜잭션 작업 완료를 하지 않는다
기타 커스텀
SELECT … FOR UPDATE