728x90
반응형

본 글은 유데미 Fundamentals of Database Engineering 강의를 들으며 나만 알아볼 수 있게 휘갈긴 정리본임.

섹션2 - ACID -1) What is a Transaction?

쿼리의 모임 - 트랜잭션

하나의 unit으로 작동하는 것임

예) 돈을 송금한다면 1. 계좌에 돈이 있는지 확인(select), 2. 그 계좌에서 돈 빼기(update), 3. 새 계좌에 돈 넣기(update)

트랜잭션은 항상 일어난다.

 

BEGIN: 트랜잭션 시작

COMMIT: 모든 작업을 커밋(변화를 쓴다.)

  - 디스크에 하느냐 메모리에 하느냐 이런 장단점을 이해해야한다.

ROLLBACK: 모두 취소하는 것. 장애시 원상태로 돌려놔야함

  - 메모리에 저장하고 있었다면 쉽지만 디스크라면, 서버가 죽었는데 디스크라면 어떻게 롤백할 것인가? 이러한 고민을 해야함

 

섹션2 - ACID -2) Atomicity

섹션2 - ACID -3) Isolation

  • Dirty reads
  • Non-repeatable reads: 더티 기드의 경우에서 롤백이 아닌 커밋된 경우
  • Phantom reads: 존재하지 않았던 데이터가 다시 조회했을 때 존재하는 현상
  • Lost updates: 업데이트한 결과를 잃는다.

-> 읽기에서 발생할 수 있는 현상들

격리를 통해 막아야 함

1. Read uncommitted -> 빠르다, 격리하지 않는다

2. Read committed -> 일관성은 없음, 커밋된 데이터만 읽는다.

3. Repeatable read -> 트랜젝션이 진행중인 동안 값은 동일하게 유지

4. Snapshot -> 그 순간의 스냅샷 버전을 읽는다

5. Serializable -> 직렬화하여 거의 같은 값을 읽는다(?) 가장 엄격한 격리 수준

고립 수준은 모든 DBMS에서 다 다르다.

--> 결국 모든 격리는 그 순간 순간의 버전인 것

다양하게 격리 레벨들이 있으며 자세히는 천천히 공부해봐야겠음

 

섹션2 - ACID -4) Consistency

데이터의 일관성

사용자에 의해 정의되며 참조 무결성과 관련이 있다

원자성과 격리

읽기(read)의 일관성

어떤 값에 변화가 있을때 그 변화를 바로 알아아 하며, 작업 이후 전체 복제가 되어야 한다.

근데 일관성 유지를 위한 과도한 데이터 정규화는 성능과 조회 속도를 저하시킨다.

-> 복제와도 관련이 있음

 

섹션2 - ACID -4) Durability

단단해야함. 망가져도 다시 돌아와야함 -> 내구성: 트랜젝션 실행 후 서버가 다운되더라도 변화를 볼 수 있어야 한다.

느려질 수 있음

WAL, Asynchronous snapshot, AOF 를 통해 Durability 보장

WAL: 큰 데이터를 디스크에 쓰기에는 느릴 수 밖에 없음 -> 변경사항에 대해 세그먼트 로그를 디스크로 먼저 보낸다

OS Casche : OS 메모리에 저장하는 것은 일단 메모리에 적고 디스크에 한번에 나중에 적재해라. 라고 알려줌

근데, 디스크에 적기 전에 컴퓨터가 망가지면 OS 메모리에 있던 것은 날라가게 되는 것. 자주 있는 사고는 아니지만..

결국 하나의 트랜젝션 커밋까지의 내구성을 보장하는 것.

snapshot : 비동기 스냅샷. 데이터 백업/복제/복구 수행 가능

--> NoSQL에서 특히 매우 중요하다.

728x90
반응형

+ Recent posts