sol 개발 블로그 로고
Published on

DBMS 정리 (2)

Authors
  • avatar
    Name
    Chan Sol OH
    Twitter

목차

데이터베이스 확장

대규모 데이터베이스 시스템에서 부하 분산확장성을 위함

  • Partitioning : 하나의 테이블을 여러 데이터로 쪼개어 저장하는 것
    • Vertical Partitioning : 컬럼을 쪼개기
    • Horizontal Partitioning : 로우 쪼개기 (ex Sharding : 로우를 쪼개서 분산 시스템에 각각 저장) sharding db system
  • Replication : 같은 데이터를 여러 분산 노드에 저장
    • 쓰기 담당 / 읽기 담당을 나누어, 쓰기 발생 시 읽기 담당에 모두 동기화를 맞춰야한다.

데이터베이스 동시성 제어

Pessimistic Locking

항상 충돌날 것을 예상하고 매 요청마다 Lock 설정 (Throughput 하락). 읽기와 쓰기 중 쓰기 비중이 높을 때 사용

  • 쓰기 Lock이 읽기 Lock을 기다린다.
  • Lock으로 충돌을 미리 방지하기 때문에 Rollback을 통해 작업한 내용을 날릴 일이 적다.
  • 데이터 무결성 보장 수준이 높으나 동시성이 떨어짐

Lock-based Concurrency Control

  • 2 Phase Locking
    • 쓰는 동안 읽기를 거부
    • 읽는 동안 쓰기를 거부

Optimistic Locking

충돌을 예상하지 않고 Lock 없이 모든 작업 수행 (Throughput 상승). 읽기와 쓰기 중 읽기 비중이 높을 때 사용한다.

  • 업데이트 진행하고 데이터 Version up, Version 칼럼을 통해 관리할 수 있다.
  • 만약 버전이 맞지 않으면 에러를 발생시키고 Rollback 시킨다.

따라서 동시성은 좋으나, 데이터 무결성 수준이 비교적 낮고 그에 따라 개발자가 데이터 무결성을 위해 에러를 관리해야한다.

  • Timestamp-based Concurrency Control
    • 모든 transaction은 시작할 때 Timestamp를 system이 찍어준다. Timestamp는 시간이 지나거나 순서에 따라 더 커진다.
    • 만약 한 transaction이 데이터에 접근할 때, 데이터를 업데이트한 최신 transaction의 Timestamp 보다 작다면, abort(Rollback)되고 새로운 Timestamp를 찍고 새롭게 시작한다.
  • Multiversion Concurrency Control
    • transaction을 시작할 때, 접근할 데이터를 DB에서 복사해서 메모리에 올려둔다.
    • transaction은 복사본을 업데이트하고 새로운 버전으로 DB에 저장한다.
      • 예를 들어 Snapshot Isolation은 모든 transaction 시작에 버전을 만들고 두 transaction이 DB를 업데이트하려고 할 때, 먼저 생성된 transaction의 업데이트만 인정하고 나중 것은 abort된다.