본문 바로가기

도서기록/데이터베이스 인터널스

1부 스토리지 엔진 :: 1장 - 소개 및 개요

반응형

스토리지 엔진

  • DBMS에서 데이터를 메모리와 디스크에 저장하고 검색 및 관리하는 소프트웨어 컴포넌트
  • 각 노드에 데이터를 영구 저장한다.
  • 데이터베이스가 복잡한 쿼리를 수행할 수 있도록 API를 제공한다.
  • 스토리지 엔진 위에서 스키마와 쿼리 언어, 인덱싱, 트랜잭션 등의 유용한 기능을 제공하는 애플리케이션이라고 볼 수 있다.

스토리지 엔진의 비교

  • 스토리지 엔진을 비교할 때는 장점과 단점을 모두 살펴봐야한다.
  • 모든 스토리지 엔진에는 유사한 문제와 제약 조건이 있다.
    • 특정 인구수를 기준으로 도시를 설계한 뒤, 건물을 위로 높일지 또는 외곽 영역으로 확장할 지 결정하는 도시 계획 문제와 비교할 수 있다.
  • 스토리지 엔진 개발자의 설계에 따라서 일부 엔진은 읽기와 쓰기 레이턴시를 최소화하고, 일부는 저장량을 극대화하며 또 다른 일부는 유지관리를 간소화한다.

데이터베이스 관리 시스템의 용도 

  • 일시적인 핫 데이터를 저장하는데 쓰이거나, 장기 보관용 콜드 데이터 스토리지로 쓰이기도한다.
  • 복잡한 쿼리 분석을 지원하는 시스템도 있는가 하면, 키로만 값을 액세스할 수 있는 스토어도 있다.

DBMS 구조

  • DBMS는 클라이언트/서버 모델을 기반으로 한다.
  • 데이터베이스 인스턴스와 애플리케이션 인스턴스는 각각 서버와 클라이언트 역할을 한다.
  • 클라이언트 요청은 트랜스포트 서브시스템을 통해 전달된다.
    • 요청은 쿼리형태이고 특정 쿼리 언어로 표현한다.
    • 트랜스포트 서브시스템은 데이터베이스 클러스터 노드 사이의 통신에도 사용된다.
  • 트랜스포트 서브시스템은 쿼리를 쿼리 프로세서에 전달한다.
  • 쿼리 프로세서는 쿼리를 해석, 분석 및 검증한다.
  • 쿼리의 의미를 파악한 뒤에 액세스 제어를 진행할 수 있다.
  • 분석된 쿼리는 쿼리 옵티마이저에 전달된다.
    • 쿼리에서 논리적으로 불가능한 부분과 중복 제거 후에 내부 통계 데이터와 데이터 위치를 기반으로 쿼리 실행 계획을 생성한다.
  • 쿼리는 일반적으로 실행 계획 형태로 표현한다.
  • (클라이언트 또는 다른 노드가 요청한) 로컬 쿼리는 스토리지 엔진이 수행한다.
    • 스토리지 엔진의 역할
      • 트랜잭션 매니저: 트랜잭션을 스케줄링하고, 데이터베이스 상태의 논리적 일관성을 보장한다.
      • 잠금 매니저: 트랜잭션에 접근하는 데이터베이스 객체에 대한 잠금을 제어한다. 동시 수행 작업이 물리적 데이터 무결성을 침해하지 않도록 제어한다.
      • 액세스 매니저: 디스크에 저장된 데이터에 대한 접근 및 저장 방식을 정의한다.
        • 힙 파일과 b-tree, LSM tree 등의 자료 구조를 사용한다.
      • 버퍼 매니저: 데이터 페이지를 메모리에 캐시한다.
      • 복구 매니저: 로그를 유지하고 장애 발생 시 시스템을 복구한다.

인메모리 DBMS 대 디스크 기반 DBMS

  • DBMS는 데이터를 메모리와 디스크에 저장한다.
  • 인메모리 DBMS는 메모리에 데이터를 저장하고 디스크는 복구와 로그 저장 용도로 사용한다.
  • 디스크 기반 DBMS는 대부분의 데이터를 디스크에 저장하고 메모리는 캐시 또는 임시 저장 용도로 사용한다.
  • 메모리를 주 저장 매체로 사용하는 이유
    • 메모리 제어가 디스크 제어보다 프로그래밍 적으로 더 간단
      • OS의 메모리 추상화를 통해 개발자는 임의의 메모리 청크를 할당하고 해제하는 작업 정도로 메모리를 간단하게 제어할 수 있다.
      • 디스크는 데이터 참조와 직렬화 포맷 설정, 메모리 해제, 메모리 단편화 이슈를 모두 직접 관리해야 한다.
  • 인메모리 데이터베이스의 단점
    • RAM의 휘발성과 높은 가격
      • 데이터가 손실 될 수 있다.

인메모리 데이터베이스의 지속성

  • 인메모리 DBMS는 데이터의 지속성을 보장하고 데이터 손실을 방지하기 위해 데이터를 디스크에 백업한다.
  • 시스템 시작과 복구 시 모든 로그를 재수행하지 않기 위해서 백업본을 유지한다.
  • 백업본은 디스크 기반 자료 구조에 순서대로 저장하는데, 수정 내용은 비동기적으로 갱신하며, I/O 작업을 최소화하기 위해 배치 단위로 백업한다.

로우형 dbms vs. 컬럼형 dbms

  • 로우형 dbms는 한개의 로우 씩 접근하는 경우 적합하다.
  • 디스크와 같은 반영구적 저장 매체에 저장된 데이터는 블록 단위로 접근하기 때문에 한 블록에 모든 칼럼의 값을 저장한다.
  • 따라서 특정 사용자의 모든 정보를 읽을 때는 효율적이지만, 여러 사용자의 특정 필드를 읽을 때는 비효율적이다.
    • 요청하지 않은 필드까지 페이징
  • 칼럼형은 같은 칼럼끼리 디스크에 연속해서 저장하는 방식, 데이터의 추세와 평균 계산하는 집계 분석작업에 적합하다.

와이드 칼럼 스토어

  • 데이터를 다차원 맵으로 표현하고, 여러 칼럼을 칼럼 패밀리 단위로 저장한다
  • 칼럼 패밀리의 데이터는 로우 형식으로 저장한다.
  • 칼럼 패밀리는 시간별로 여러 버전의 데이터를 유지한다.

데이터 파일과 인덱스 파일

  • 데이터베이스 시스템의 주목적은 데이터를 저장하고 빠르게 검색하는 것이다.
  • 데이터 베이스 시스템은 데이터 파일과 인덱스 파일을 분리한다.
    • 데이터 파일에는 데이터 레코드를 저장한다.
    • 인덱스 파일에는 레코드에 대한 메타데이터를 저장하고, 이를 사용해 레코드 위치를 찾을 수 있다.

데이터 파일

  • 데이터 파일은 인덱스 구조형 테이블, 힙 구조형 테이블, 해시 구조형 테이블을 기반으로 한다.
  • 힙 파일
    • 레코드를 특정 순서를 따르지 않고 삽입 순서대로 저장한다.
    • 데이터 검색 시 데이터의 실제 위치를 가리키는 인덱스가 필요하다.
  • 해시 파일
    • 레코드의 각 키의 해시 값에 해당하는 버킷에 저장한다.
  • 인덱스 구조형 테이블
    • 인덱스에 실제 데이터 레코드를 저장한다.
    • 데이터는 키 순서로 정렬되기 때문에, iot의 범위 스캔은 실제 값을 순서대로 읽으면서 비교한다.

인덱스 파일

  • 디스크에 저장된 데이터 레코드를 효율적으로 검색할 수 있는 자료구조이다.
  • 인덱스 파일은 데이터 레코드를 식별할 수 있는 키 또는 기본 키를 데이터 파일에서 해당 레코드의 위치에 맵핑한다.
  • 프라이머리(데이터) 파일에 대한 인덱스를 기본 인덱스라 한다.
  • 그 외 다른 인덱스를 모두 보조 인덱스라고 한다.
  • 보조 인덱스는 데이터 레코드를 직접 가리키거나 해당 레코드의 기본 키를 저장한다.
  • 실제 데이터 레코드의 정렬 순서와 검색 키의 정렬 순서가 같은 인덱스를 클러스터형 인덱스라고 한다.

버퍼링, 불변성, 순서화

  • 버퍼링
    • 데이터를 디스크에 쓰기 전에 일부를 메모리에 저장하는 것을 의미한다.
    • 모든 디스크 기반 자료 구조에서는 버퍼를 어느 정도 사용한다.
  • 가변성
    • 파일 일부를 읽고 갱신한 뒤에 똑같은 자리에 다시 쓸지에 대한 여부를 나타내는 속성
    • 불변 구조에서는 한 번 쓴 파일 내용은 고칠 수 없다.
    • 파일 끝에 내용을 추가하는 추가 전용 구조이다.
  • 순서화
    • 데이터 레코드를 키 순서로 저장하는 것을 의미한다.
    • 정렬 순서상 인접한 키는 디스크의 연속된 세그먼트에 저장된다.
    • 순서화는 특정 데이터 레코드 검색뿐만 아니라 효율적인 범위 스캔에 매우 중요한 속성이다.
반응형