요약
- 완화된 격리 수준중 하나인 쓰기 스큐와 팬텀에 대해 이해함.
- 더티 쓰기, 갱신 손실과 다른 미묘한 충돌
- 직렬성 격리를 이용해야만 해결가능
- 충돌 구체화를 통해 잠금 객체를 추가해도 되지만, 찾아내기 어려움.
메모
쓰기 스큐와 팬텀
- 더티 쓰기와 갱신 손실과 다른, 더욱 미묘한 충돌임.
- ex) 의사들이 병원에서 교대로 서는 호출 대기 관리 애플리케이션
- on-call 이 2명인 의사가 대기 중인데, 동시에 off 하는 상황임.
- 최소 한 명의 의사가 호출 대기해야 하는 요구사항을 위반함.
쓰기 스큐를 특징짓기
- 위와 같은 현상을 쓰기 스큐(write skew) 라고 함.
- 두 트랜잭션이 두 개의
다른
객체를 갱신하므로 더티 쓰기도 아니고 갱신 손실도 아님. - 하지만, 충돌이 발생했고 이는 분명 경쟁조건임.
- 두 트랜잭션이 두 개의
- 쓰기 스큐를 막는 방법은 힘들다.
- 여러 객체와 관련있으므로 원자적 단일 객체 연산은 도움되지 않음.
- 갱신 손실 자동 감지도 도움되지 않음.
- 쓰기 스큐를 방지하려면 진짜 직렬성 격리가 필요함.
- 데이터베이스별 제약 조건을 걸 수 있음. (객체간 연관 제약 조건)
- 데이터베이스에 따라 트리거나 구체화 뷰를 사용해 구현할 수 있음.
- 직렬성 격리를 사용할 수 없다면 트랜잭션이 의존하는 로우를 명시적으로 잠근다.
충돌 구체화
- 팬텀의 문제는 잠글 수 있는 객체가 없는 것임.
- 인위적으로 데이터베이스에 잠금 객체를 추가하는 방법을 충돌 구체화(materializing conflic) 라고 함.
- 팬텀을 로우 집합에 대한 잠금 충돌로 변환한다.
- 충돌 구체화 방법은 알아내기도 어렵고 오류가 발생하기 쉽기에 충돌 구체화는 다른 대안이 불가능할 때 최후의 수단으로 고려해야 함.
- 대분의 경우 직렬성 격리 수준이 훨씬 더 선호됨.
'Book > 데이터 중심 애플리케이션 설계' 카테고리의 다른 글
책너두 (데이터 중심 애플리케이션 설계) 24일차 (~272p) (0) | 2023.04.10 |
---|---|
책너두 (데이터 중심 애플리케이션 설계) 23일차 (~259p) (0) | 2023.04.10 |
책너두 (데이터 중심 애플리케이션 설계) 21일차 (~245p) (0) | 2023.04.07 |
책너두 (데이터 중심 애플리케이션 설계) 20일차 (~241p) (0) | 2023.04.06 |
책너두 (데이터 중심 애플리케이션 설계) 19일차 (~231p) (0) | 2023.04.05 |