DB Consistency 용어정리

--

ACID

Atomicity(원자성)

  • 트랜잭션과 관련된 일련의 작업들이 한번에 반영
  • 트랜잭션 단위의 모든 작업이 한번에 롤백

Consistency(일관성)

  • 데이터가 미리 정의된 규칙에 의해서만 수정이 가능한 특성
  • 예를들어 숫자 타입의 컬럼에 문자열값을 넣을 수 없도록 보장함

Isolation(독립성)

  • 트랜잭션 수행 시, 다른 트랜잭션이 끼어들지 못하도록 보장
  • 트랜잭션 밖의 어떤 연상도 중간 단계 데이터를 볼 수 없음

Durability(지속성)

  • 성공적으로 수행된 트랜잭션이 영원히 반영되는 것을 보장

Isolation Level(트랜잭션 격리 수준)

동시에 여러 트랜잭션이 처리될때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것

READ UNCOMMITED

  • 각 트랜잭션에서의 변경 내용이 COMMIT이나 ROLLBACK 여부에 상관없이 다른 트랜잭션에서 값을 읽을 수 있음
  • Dirty Read, Dirty Write 현상이 발생할 수 있음

READ COMMITTED

  • RDB에서 대부분 기본적으로 사용하고 있는 격리 수준
  • 실제 테이블에서 값을 가져오지 않고, undo 영역에 있는 백업된 레코드에서 값을 가져옴
  • 하나의 트랜잭션 내에서 읽은 값의 결과가 바뀔 수 있음
  • Lost Update, Read Skew, Write Skew가 발생할 수 있음

REPEATABLE READ

  • 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽음
  • MVCC(Multi Version Concurrency Control) 변경 방식
  • Phantom Read가 발생할 수 있음

Phantom Read: 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상

SERIALIZABLE

  • 가장 단순한 격리 수준이지만, 가장 엄격한 격리 수준
  • 동시 처리성능이 가장 떨어짐
  • 성능이 너무 떨어져서 데이터베이스에서는 거의 사용되지 않음

Consistency Model

String Consistency

  • 가장 엄격한 일관성으로 모든 읽기가 가장 최근에 기록된 값을 읽어야 함
  • 기존 RDBMS에서 사용하는 방식
  • 분산화된 상태에서는 일관성을 엄격하게 유지한다는 것이 매우 어려움
  • 분산 시스템에서 적용하면 매우 느려짐

Sequential Consistency

  • 모든 트랜잭션의 발행된 순서를 보장해줌으로써, 불일치 문제의 발생을 막음
  • 어느 정도의 interleaving을 허용
  • 커밋된 모든 작업이 동일한 순서로 나타나야 함

Causal Consistency

  • 이벤트 순서에 일관성을 부여하여 관련성이 있는 모든 쓰기가 순서대로 읽히도록 함
  • 분산 및 병렬 처리 환경에서 발생되는 일관성을 인과적인 관계로 구현한 기술
  • Sequential Consistency와 다르게, 인과 관계 연산만 순서대로 나타남.
  • Monotonic reads(MR): 일단 어떤 값을 읽으면, 모든 후속 읽기가 정확히 이값 또는 새로운값을 반환한다. 값을 읽은 다음에는 네트웍에 문제가 있어도, 일관성을 유지한다.
  • Monotonic writes(MW): 모든 쓰기가 제출된 순서대로 표기된다. 시스템이 순서를 변경하지 않을 것을 보장한다.
  • Read your writes(RYW): 값을 업데이트한 후, 클라이언트가 그 값을 읽을때 마다, 업데이트된 값을 반환한다.
  • Pipelined Random Access Memory(PRAM): 단일 프로세스의 모든 작업이 파이프라인에 있는 것처럼 수행된 순서대로 다른 프로세스에서 볼 수 있도록 보장한다. MR + MW + RYW라고 볼 수 있다.
  • Writes follow reads(WFR): 어떤 읽기 작업 이후에 쓰기 작업인 경우, 다른 클라이언트에서 해당 읽기 작업을 읽은 경우에만 쓰기 작업의 결과를 볼 수 있다.

Eventual Consistency

  • 클라이언트가 변경된 데이터를 요청했을때, 일시적으로 클라이언트마다 다른 버전의 데이터를 받게 될수 있지만, 언젠가 동기화가 되면 최종적으로는 모든 클라이언트가 동일한 데이터를 받게되는 것
  • 업데이트(쓰기)가 없으면, 모든 클라이언트는 일정 시간동안 정확히 동일한 상태를 읽을 수 있다.
  • 따라서 새로운 쓰기 작업이 중단되면, 결과적으로 일관된 상태로 수렴한다.
  • 이것은 구현하기 쉽고, 매우 좋은 성능을 제공하는 약한 제약조건으로 가용성이 높다.

Weak Consistency

  • 데이터를 동기화 데이터와 비동기화 데이터로 나누어 다르게 처리한다.
  • 동기화 데이터: 모든 시스템 전반에 걸쳐 동기화 되어야 한다. 이 경우 모든 영역에 값이 정확히 쓰여질 때까지 쓰기 연산은 완료된 상태로 보지 않는다.
  • 비동기화 데이터: 일부의 데이터 영역만 저장되어도 쓰기 연산이 성공했다고 보도록 레벨을 설정할 수 있다. 레벨을 조정하여 일정 수준의 일관성을 확보하고, 비일관성이 발생하면 보정 기능을 통해서 해결한다.

--

--