PE Notes · DB
트랜잭션 특성과 쿼리 오프로딩
ACID 네 특성과 상태 전이·TCL, 읽기를 복제본으로 보내는 오프로딩과 복제 지연·Read-Your-Writes를 정리합니다.
이체 도중 전원이 나가면 한쪽 계좌만 줄어들면 안 되고, 같은 좌석을 두 사람이 동시에 집으면 안 됩니다. 은 그 연산 묶음을 한 논리 단위로 취급합니다. 전부 되거나 전부 취소입니다.
ACID
| 특성 | 뜻 | 수단 |
|---|---|---|
| 원자성 | 모두 실행 또는 모두 취소 | ROLLBACK, UNDO |
| 일관성 | 전후가 제약을 만족 | 무결성 제약 |
| 격리성 | 동시에 돌아도 서로 안 꿰뚫음 | 잠금, MVCC |
| 지속성 | 커밋은 장애 후에도 남음 | REDO, |
이체는 A 차감과 B 증가를 한 트랜잭션에 넣습니다. 중간 실패면 둘 다 되돌립니다. 격리 수준(Read Uncommitted부터 Serializable)은 더티·반복·팬텀을 어디까지 허용할지입니다. 지속성은 로그를 데이터보다 먼저 디스크에 두는 데서 옵니다.
상태는 활성 → 부분 완료 → 커밋, 또는 실패 → 철회입니다. TCL은 BEGIN, COMMIT, ROLLBACK, SAVEPOINT, 특정 지점으로의 부분 롤백입니다.
여러 서비스에 걸치면 2PC 대신 보상 트랜잭션을 잇는 Saga를 고르기도 합니다. 한 DB의 ACID와 분산의 최종 일관을 같은 답에 섞지 않습니다.
쿼리 오프로딩
웹 부하는 읽기가 쓰기를 크게 웃돕니다. 은 INSERT/UPDATE/DELETE는 Primary에, SELECT는 로 보냅니다.
| 복제 | 일관 |
|---|---|
| 동기 | 강함. 지연 증가 |
| 비동기 | 최종 일관. |
| 반동기 | 최소 한 복제본 확인 |
쓰기 직후 목록을 복제본에서 보면 방금 넣은 행이 없습니다. 그때는 Primary에서 읽습니다(Read-Your-Writes). 자주 보는 값은 캐시를 한 겹 더 둡니다.
상품 조회·피드·민원 열람은 복제본, 결제·이체·신청은 Primary가 전형입니다. 잔액은 지연 허용 여부를 먼저 적습니다.