데이터 저장과 파일

물리적 저장 장치

물리적 저장장치는 데이터 접근 속도, 용량을 기준으로 다양한 장치로 구성됨

물리적 저장장치별 특징

  1. 휘발성
    • 캐시: 고비용 저장장치로 빠른 접근 속도를 보장
    • 메인 메모리: 실제 프로그램과 데이터 적재 공간
  2. 비휘발성
    • 플래쉬 메모리: 메인 메모리와 유사하나 비휘발성
    • 자기 디스크: 데이터베이스 전체를 안정적으로 저장
    • 광학 디스크 드라이브: CD, DVD, Blue-ray 등
    • 테이프 장치: 용량이 크고 저렴하나 순차 접근 방식으로 접근 속도가 매우 느림

데이터베이스 구성

  1. 파일
    • 데이터를 영구적으로 저장하기 위해 사용되는 가장 기초적인 논리적 구조
  2. 블럭
    • 파일을 고정적인 길이로 분할하여 생기는 균등한 크기의 데이터 묶음
    • 일반적으로 메모리와 디스크간 데이터 전송 단위로 결정
  3. 레코드
    • 블럭을 구성하는 요소
    • 더 이상 분리될 수 없는 최소 데이터 저장 단위
  • 고정 길이 레코드 고정적인 바이트 수를 갖는 레코드를 저장하는 기법

  • 잔여 고정 길이 레코드 할당 블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 잔여 공간을 비워두는 방법
    블럭마다 남는 공간이 생기면 아깝기 때문에 고정 길이 레코드 할당을 통해서 잔여공간을 사용하기도 함

  • 고정 길이 레코드 할당 고정 길이 레코드 만큼 할당하고나서 남은 공간이 고정 길이보다 작을 경우,
    남은 공간에 데이터의 일부를 할당하고 나머지는 다음 블럭에 할당함

단점

레코드 접근 시 두 블럭을 접근해야 함

  1. 레코드 삭제 시
    • 해당 레코드가 저장된 위치에 빈공간이 생성
    • 장시간 레코드의 삽입 및 삭제 발생 시, 저장 공간에 많은 낭비가 발생
  2. 레코드 삭제 시 대처 방안
    • 마지막 레코드로 공백 대체
    • 삭제 레코드 이후의 레코드를 이동
    • 가용 리스트 관리

레코드 삭제 대처

  1. 마지막 레코드로 공백 대체 => 레코드의 순서가 틀어짐
  2. 삭제 레코드 이후의 레코드를 이동 => 앞쪽 레코드를 삭제할 경우 뒤쪽의 모든 데이터가 움직이므로 오버헤드가 일어날 수 있음
  3. 가용 리스트 관리 => 파일헤더에 공백 레코드 포인터(연결리스트)를 추가해서 삭제된 레코드 공간을 관리해줌

가변 길이 레코드

  1. 블럭에 저장되는 레코드의 길이가 서로 다른 레코드를 할당하는 방법

  2. 가변 길이 레코드가 사용되는 상황

    • 한 블럭 내에 저장되는 레코드 유형이 둘 이상
    • 길이가 고정되니 않은 컬럼의 개수가 하나 이상
    • 레코드가 멀티셋을 허용한 컬럼을 가질 때
  3. 0~4바이트에 가변 레코드의 시작과 끝을 저장해놓음

멀티셋

레코드의 컬럼값이 여러 개인 컬럼이다.
RDBMS에서는 허용하지 않지만, 상용 레코드에서는 이용하는 경우가 있다.

슬롯페이지 구조

  • 슬롯페이지의 가장 처음에는 레코드의 개수를 담고 있음
  • 블럭 헤더: 레코드 개수 다음에는 레코드 요악 정보를 담고 있음
  • 레코드는 슬롯페이지의 가장 끝부터 채워짐

파일 구조화 방법의 종류

  • 힙 파일 구조: 저장순서 고려없이 파일 내 임의의 위치에 배치 (일단 빈공간 찾아서 우선 저장)
  • 순차 파일 구조: 레코드들이 탐색 키 기준으로 정렬되어 저장 (이진 탐색을 통해 빠르게 검색 가능)
  • 해시 파일 구조: 해시 함수를 사용하여 블럭 주소를 계산

순차 파일 구조

  1. 레코드가 검색키 순서대로 정렬

  2. 레코드가 파일에 삽입되는 시점에서 키 값이 부여됨

  3. 장점

    • 검색키에 대한 정렬 연산이 불필요, 키 값들의 순서로 레코드를 판독하는 연산에 효율적
    • 현재 레코드에서 정렬된 키 순서로 다음 레코드를 찾을 때 부가적인 블럭 접근이 불필요
    • 이진 탐색을 사용하면 더 빠르게 레코드를 검색할 수 있음
  4. 단점

    • 레코드 삽입, 삭제에 많은 비용 소요

저장장치 관리

저장장치 접근

  1. 파일은 논리적 관점에서 저장 객체라고 볼 수 있음
  2. 실제 저장될 때에는 여러 개의 물리적 단위인 블럭으로 저장
    • 블럭은 메모리와 디스크 간 데이터의 전송 단위
    • 일반적으로 2kb ~ 32kb 사용
    • 블럭 전송을 최소화할 수록 입출력 소요 시간이 단축

버퍼 관리자

DBMS상의 소프트웨어는 필요한 블럭이 있을 때 버퍼 관리자에게 해당 블럭을 요청

  • 요청된 블럭이 버퍼에 있다면, 버퍼 관리자는 블럭이 위치한 메모리 주소를 프로그램에게 전달
  • 요청된 블럭이 없는 경우, 버퍼 관리자는 버퍼내의 새로운 공간을 할당하고 해당 블럭을 적재
  • 더 이상 적재할 공간이 없다면, 버퍼에 있는 기존 블럭을 선택하여 할당을 해지하고 해당 블럭을 적재

버퍼 관리자의 기능

  • 버퍼 교체 전략

    • 가용 공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정 기준에 의하여 해지
    • 미래에 가장 적게 사용될 블럭을 선택하여 디스크로 내보내는 것이 이상적인 버퍼 교체 전략
    • 버퍼 교체 전략 기법
      • LRU(Least Recently Used): 최근에 가장 적게 참조된 블럭
      • MFU(Most Frequently Used): 특정 기간동안 가장 여러번 사용된 블럭을 선택하여 블럭을 교체
  • 고정 블럭

    • 장애로 인하여 메모리의 데이터가 손실되어 작업이 중단될 경우, 중단된 작업의 결과물이 디스크에 기록되는 것을 방지
    • 디스크 블럭이 교체되는 것을 제한
  • 블럭 강제 출력

    • 시스템 로그와 같이 중요한 데이터는 디스크에 영구적으로 기록되어야 함
    • 버퍼 공간이 필요 없어도 강제로 디스크에 기록
Last Updated: