책너두 (데이터 중심 애플리케이션 설계) 22일차 (~250p)

요약

  • 완화된 격리 수준중 하나인 쓰기 스큐와 팬텀에 대해 이해함.
    • 더티 쓰기, 갱신 손실과 다른 미묘한 충돌
    • 직렬성 격리를 이용해야만 해결가능
    • 충돌 구체화를 통해 잠금 객체를 추가해도 되지만, 찾아내기 어려움.

메모

쓰기 스큐와 팬텀

  • 더티 쓰기와 갱신 손실과 다른, 더욱 미묘한 충돌임.
    • ex) 의사들이 병원에서 교대로 서는 호출 대기 관리 애플리케이션
    • on-call 이 2명인 의사가 대기 중인데, 동시에 off 하는 상황임.
    • 최소 한 명의 의사가 호출 대기해야 하는 요구사항을 위반함.

쓰기 스큐를 특징짓기

  • 위와 같은 현상을 쓰기 스큐(write skew) 라고 함.
    • 두 트랜잭션이 두 개의 다른 객체를 갱신하므로 더티 쓰기도 아니고 갱신 손실도 아님.
    • 하지만, 충돌이 발생했고 이는 분명 경쟁조건임.
  • 쓰기 스큐를 막는 방법은 힘들다.
    • 여러 객체와 관련있으므로 원자적 단일 객체 연산은 도움되지 않음.
    • 갱신 손실 자동 감지도 도움되지 않음.
      • 쓰기 스큐를 방지하려면 진짜 직렬성 격리가 필요함.
    • 데이터베이스별 제약 조건을 걸 수 있음. (객체간 연관 제약 조건)
      • 데이터베이스에 따라 트리거나 구체화 뷰를 사용해 구현할 수 있음.
    • 직렬성 격리를 사용할 수 없다면 트랜잭션이 의존하는 로우를 명시적으로 잠근다.

충돌 구체화

  • 팬텀의 문제는 잠글 수 있는 객체가 없는 것임.
    • 인위적으로 데이터베이스에 잠금 객체를 추가하는 방법을 충돌 구체화(materializing conflic) 라고 함.
    • 팬텀을 로우 집합에 대한 잠금 충돌로 변환한다.
      • 충돌 구체화 방법은 알아내기도 어렵고 오류가 발생하기 쉽기에 충돌 구체화는 다른 대안이 불가능할 때 최후의 수단으로 고려해야 함.
      • 대분의 경우 직렬성 격리 수준이 훨씬 더 선호됨.

 

댓글

Designed by JB FACTORY