티스토리 뷰

Programing/TIL

20210728

oh-yes 2021. 7. 28. 23:21

데이터 중심 어플리케이션 설계 - 07장 트랜잭션 읽기

  • 격리성

    • 동시에 실행되는 트랜잭션은 서로 격리된다는 것을 의미
    • 고전적인 데이터베이스 용어에서는 격리성 == 직렬성의 의미를 가지기도 함
    • 직렬성(serializable)이란 실제로 여러 트랜잭션이 동시에 실행됐더라도 트랜잭션 커밋의 결과가 트랜잭션이 순차 실행됐을때와 동일하도록 보장
    • 직렬성(serializable) 격리는 일반적으로 성능 손해를 동반할 수 밖에 없기 때문에 거의 사용하지 않음. 실제는 보다 약한 스냅샷 격리를 구현
  • 지속성

    • 트랜잭션이 성공적으로 커밋되었다면 하드웨어 결함/데이터베이스가 죽더라도 트랜잭션에 기록한 데이터는 손실되지 않아야 함을 뜻함

    예를 들어 쓰기 전 로그(write-ahead log) 혹은 비슷한 수단을 통하여 쓰기 저장소가 오염될 경우 복원 처리

    • 지속성을 보장하려면 커밋 전에 쓰기/복제가 완료될 때까지 기다려야 한다.
  • 더티 리드(Dirty Read)

    • 다른 트랜잭션에서 커밋되지 않은 데이터를 읽는 현상
  • RDB에서는 트랜잭션을 통하여 다중 객체(ROW)에 대한 어떤 읽기 연산/쓰기 연산이 있는지 식별하게 됨.

  • 비관계형 데이터베이스에서는 트랜잭션과 같은 연산을 묶는 방법이 없는 경우가 많은데, 대신 비슷하게 보이는 연산을 묶는 오퍼레이션을 제공하기도 함(예를 들어 레디스의 MULTI) 하지만, 원자성을 보장하는 연산은 아니라서 예를 들어 1과 2의 연산이 있을 때 1이 실패하더라도 2는 그대로 실행하게 된다.

Isolation Level Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted 가능 가능 가능
Read Committed 불가능 가능 가능
Repeatable Read 불가능 불가능 가능
Serializable 불가능 불가능 불가능
  • 고립수준은 Read Uncomitted 가 가장 낮고 Serializable이 가장 높음
  • 동시성 수준은 위와 반대

'Programing > TIL' 카테고리의 다른 글

20210727  (0) 2021.07.27
20190810  (0) 2019.08.10
20190714  (0) 2019.07.14
20190622  (0) 2019.07.14
20190609  (0) 2019.06.10
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함