배꼽파지 않도록 잘 개발해요

방송대 데이터베이스시스템 - 9강. 데이터 저장과 파일 본문

방송대 컴퓨터과학과/데이터베이스시스템

방송대 데이터베이스시스템 - 9강. 데이터 저장과 파일

꼽파 2023. 5. 28. 21:38


  • 1. 물리적 저장장치

  • 2. 파일

  • 3. 저장장치 관리

  • 1. 물리적 저장장치

    물리적 저장장치별 특징

    출처 : 9강 강의록

    상위로 갈수록 고가이고, 휘발성, 용량이 크고, 데이터 접근에 소요되는 시간이 짧음.

    하위로 갈수록 저가이고, 비휘발성, 용량이 적고, 데이터 접근에 소요되는 시간이 증가함.

     

    휘발성

    전원 공급이 중단되면 기억장치 안의 모든 데이터가 소멸됨.

    캐시 : 고비용 저장장치로 빠른 접근 속도를 보장

    메인 메모리 : 실제 프로그램과 데이터 적재 공간

     

    비휘발성

    용량은 많지만 조회 속도는 느려서 읽고 쓰는 빈도는 적고, 주로 데이터 보관 용도로 사용됨.

    • 플래쉬 메모리 : 메인 메모리와 유사하나 비휘발성

    • 자기 디스크 : 데이터베이스 전체를 안정적으로 저장, 가장 많이 사용되는 외부 저장장치

    • 광학 디스크 드라이브 : CD, DVD, Blue-ray 등

    • 테이프 장치 : 용량이 크고 저렴하나 순차 접근 방식으로 접근 속도가 매우 느림


    2. 파일

    데이터베이스 구성

    출처 : 9강 강의록

    운영체제는 여러 개의 파일 단위로 데이터를 관리하며, 여러 개의 파일로 하나의 데이터베이스가 구성됨.

    하나의 파일은 디스크에 저장될 때 여러 개의 블럭으로 분리가 되어서 저장이 됨.

    하나의 블럭에 여러 개의 레코드가 들어가는 구조로 되어 있음.

    → 데이터베이스 > 파일 > 블럭 > 레코드 (레코드가 블럭보다 작은 경우)


    데이터베이스의 구성요소

    파일 데이터를 영구적으로 저장하기 위해 사용되는 가장 기초적인 논리적 구조
    블럭 파일을 고정적인 길이로 분할하여 생기는 균등한 크기의 데이터 묶음
    일반적으로 메모리와 디스크간 데이터 전송 단위로 결정 → 디스크가 저장하는 가장 작은 단위
    대부분 PC의 경우 블럭의 크기는 4KB(4천자)
    레코드 블럭을 구성하는 요소
    더 이상 분리될 수 없는 최소 데이터 저장 단위
    한 릴레이션 내부의 각 레코드마다 길이가 같은 것(고정 길이 레코드)이 있고, 다른 것(가변 길이 레코드)이 있음.

    고정 길이 레코드

    고정적인 바이트 수를 갖는 레코드를 저장하는 기법

    8바이트 + 20바이트 + 10바이트 + 4바이트 
    1개의 레코드 길이 대략 42바이트
    모든 레코드는 42 바이크 크기로 구성 (가정)
    i번째 레코드는 (i - 1) * 42 + 1 번째 바이트부터 42 개의 바이트를 읽어 접근
    잔여 고정 길이 레코드 할당 고정 길이 레코드 할당
    블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 잔여 공간을 비워두는 방법 블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 한 레코드를 두 블럭으로 나누어 저장하는 방법
    블럭 내의 남은 공간 낭비 레코드 접근 시 두 블럭을 접근하므로 성능 저하

     

    고정 길이 레코드 할당의 문제

    • 레코드 삭제 시 문제

    - 해당 레코드가 저장된 위치에 빈공간이 생성

    - 장시간 레코드의 삽입 및 삭제 발생 시, 저장 공간에 많은 낭비가 발생

    ex. 2만 개 들어갈 수 있는 공간인데 중간중간이 비어서 실제로는 1만 개만 데이터가 저장됨.

     

    • 레코드 삭제 시 대처 방안

    마지막 레코드로 공백 대체, 삭제 레코드 이후의 레코드를 이동, 가용 리스트(free list) 관리

    마지막 레코드로 공백 대체 삭제 레코드 이후의 레코드를 이동 가용 리스트 관리
    레코드 삭제 시, 해당 레코드를 삭제하는 대신 마지막 레코드와의 위치를 교환하고, 삭제된 레코드의 위치에는 공백을 대체하는 방법임. 레코드 삭제 시, 삭제된 레코드 이후의 레코드들을 한 칸씩 앞으로 이동시키는 방법 파일 헤더에 가용 리스트 정보를 위치시키고, 새로운 레코드 삽입 시 파일 헤더가 가리키고 있는 빈 공간에 레코드를 삽입하고, 두 번째 빈 공간의 주소를 파일 헤더에 저장함. 공간 없으면 맨 끝에 레코드 삽입함.
    · 공간의 낭비를 줄일 수 있음.
    · 레코드의 순서가 입력 순서와 달라져서 검색 시간이 길어질 수 있음.
    · 레코드 순서가 유지되어 검색의 효율성은 보장됨.
    · 삭제 이후 모든 레코드를 다 이동해야 하니까 많은 시간이 소모될 수 있음.
    데이터베이스의 크기가 커질수록 새로운 레코드를 추가하는 성능을 향상시킬 수 있음.

    가변 길이 레코드

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

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

    - 한 블럭 내에 저장되는 레코드 유형이 둘 이상

    - 길이가 고정되지 않은 컬럼의 개수가 하나 이상 (ex. VARCHAR)

    - 레코드가 멀티셋을 허용한 컬럼을 가질 때

     

    ※ 멀티셋

    - 레코드의 컬럼값이 여러 개인 컬럼

    - 관계형 모델을 사용하는 DBMS에서는 허용되지 않음.

    - 몇몇 상용 데이터베이스에서 컬럼값의 원자성을 확대시키는 경우가 있음.

    한 레코드의 길이가 42byte인지 정확히 알 수 없으니 컬럼의 시작과 끝을 알아야 함.

    첫 번째 들어오는 것 : 가변 길이 컬럼이 몇 번째 바이트에서 시작해서, 길이가 몇 바이트인지

    ex. 27,6은 27번째 바이트부터 6바이트가 가변 길이 컬럼임을 나타냄.

    NULL 값 : 고정길이와 가변길이를 구분하는 경계


    슬롯페이지 구조

    출처 : 9강 강의록

    레코드를 페이지(page) 단위로 관리하며, 각 페이지는 고정된 크기를 가지고 있음.

    각 페이지는 여러 개의 슬롯(slot)으로 나뉘어져 있으며, 각 슬롯은 가변길이 레코드를 저장하는 단위임.
    슬롯페이지 구조에서는 가변길이 레코드가 저장되기 위해 빈 슬롯을 찾아서 할당함.

     

    가변길이 레코드는 슬롯에 저장되며, 레코드의 길이에 따라 필요한 만큼의 슬롯을 사용함.

    가변길이 레코드의 크기가 작을 경우에는 하나의 슬롯에 저장될 수도 있고, 크기가 큰 경우에는 여러 개의 슬롯을 사용할 수 있음.
    가변길이 레코드가 저장되는 슬롯은 헤더 정보를 포함하고 있어서, 레코드의 길이와 같은 정보를 저장하고 관리함.

    삭제된 레코드의 경우에는 해당 슬롯을 다시 사용 가능한 상태로 표시하고, 새로운 레코드가 추가될 때 해당 슬롯을 재활용함.

     

    신규 레코드는 슬롯 페이지의 중간에 있는 가용 공간의 뒤쪽에서부터 저장되는데 이를 위해 블럭 헤더가용 공간의 끝에 대한 위치가 저장됨.


    파일 구조화 방법

    파일 구조화 : 파일 수준에서 레코드를 관리(순서 등)하는 기법

    - 데이터베이스 내 파일은 수만 여 개의 블럭으로 구성되어 있음.

    - 특정 레코드에 대한 접근을 위해 어떤 레코드가 어느 블럭에 저장되어야 하는지 관리할 필요가 있음.

    힙 파일 구조 저장순서 고려없이 파일 내 임의의 위치에 배치

    · 장점 : 레코드들이 임의의 위치에 배치되므로 삽입 및 삭제가 간편함.
    · 단점 : 레코드를 탐색할 때 전체 파일을 순차적으로 탐색해야 하므로 검색 성능이 낮을 수 있음.

    → 저장은 빠르지만 탐색이 느려서 사용 효율은 가장 떨어짐.
    순차 파일 구조 레코드들이 탐색키 기준으로 정렬되어 저장, 실질적으로 가장 많이 사용됨.
    이진 탐색 방법을 사용하여 빠른 속도로 검색할 수 있는 것이 순차파일 구조임.

    · 장점 : 레코드가 탐색키 기준으로 정렬되어 저장되므로 빠른 탐색 성능을 가짐.

    · 단점 : 레코드의 삽입 및 삭제가 비효율적임. 정렬 상태를 유지하기 위한 추가 작업 필요함.

    → 저장은 느리지만 탐색은 빠름.
    해시 파일 구조 해시 함수를 사용하여 블럭 주소를 계산

    · 장점 : 해시함수의 성능에 따라 검색 시간이 일정하게 유지되어 레코드의 탐색 성능이 우수함.
    · 단점 : 충돌 가능성이 존재하며 레코드 삽입 및 삭제 시 함수를 업데이트 해야함.

     

    순차 파일 구조

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

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

    장점 - 검색키에 대한 정렬 연산이 불필요(탐색키의 존재), 키 값들의 순서로 레코드를 판독하는 연산에 효율적
    - 현재 레코드에서 정렬된 키 순서로 다음 레코드를 찾을 때 부가적인 블럭 접근이 불필요
    이진 탐색을 사용하면 더 빠르게 레코드를 검색
    단점 - 레코드 삽입, 삭제에 많은 비용 소요

     

    오버플로우 블럭

    순차파일 구조에서 레코드의 정렬된 상태를 유지하기 위해 삽입된 신규 블럭

    일반적으로 순차 파일 구조에서 새로운 레코드를 삽입할 때, 해당 레코드가 삽입될 위치를 찾기 위해 이진 탐색이나 인덱스를 사용함.

    만약 해당 위치를 찾지 못하면, 삽입하려는 레코드는 오버플로우 블럭에 저장됨.

    오버플로우 블럭은 실제로 삽입 위치를 찾지 못한 레코드들을 저장하기 위해 사용되는 블럭임.

    → 이 블럭은 원래의 순차 파일 구조에서의 정렬된 상태를 유지하지 않음.

    순차 파일 구조의 예 오버플로우 블럭

    3. 저장장치 관리

    저장장치 접근

    파일은 논리적 관점에서의 저장 객체

    실제 저장될 때에는 여러 개의 물리적 단위인 블럭으로 저장

    · 블럭은 메모리와 디스크 간 데이터의 전송 단위

    · 일반적으로 2KB ~ 32KB 사용

    · 블럭 전송을 최소화 할수록 입출력 소요 시간이 단축

    - 사용 중인 블럭을 지속적으로 메모리에 적재

    - 한정적 공간으로 인하여 필요에 따라 특정 블럭 할당을 해지

    - 메모리 내부에 버퍼라는 공간에 블럭을 저장하고, 이를 관리하기 위한 버퍼 관리자를 사용

     

    출처 : 9강 강의록

    운영체제 위에 있는 DBMS가 관리하는 메모리에 소프트웨어의 요청이 있을 때마다

    → 하나씩 디스크에 접근해서 데이터를 가져옴 (X)

          먼저 소프트웨어는 메모리에서 이 답변을 찾을 수 있는지 확인하고,

          있으면 답변, 없으면 디스크로 가서 메모리로 적재

    여기있는 블록의 데이터를 통해서 답변을 수행


    버퍼 관리자

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

    요청된 블럭이 버퍼에 있다면, 버퍼 관리자는 블럭이 위치한 메모리 주소를 프로그램에 전달

    요청된 블럭이 없는 경우, 버퍼 관리자는 버퍼 내의 새로운 공간을 할당하고 해당 블럭을 적재

    더 이상 적재할 공간이 없다면, 버퍼에 있는 기존 블럭을 선택하여 할당을 해지하고 해당 블럭을 적재

     

    버퍼 교체 전략

    가용 공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정 기준에 의하여 해지

    미래에 가장 적게 사용될 블럭을 선택하여 디스크로 내보내는 것이 이상적인 버퍼 교체 전략

    버퍼 교체 전략 기법

    · LRU(Least Recently Used): 최근에 가장 적게 참조된 블럭을 교체

    · MFU(Most Frenquently Used): 특정 기간 동안 가장 여러번 사용된 블럭을 선택하여 블럭을 교체

     

    메모리에 모든 블럭이 차 있을 때, 즉 적재할 공간이 없을 때 버퍼관리자는 어떤 블럭을 비워야 할지에 대한 전략대로 수행함.

    → 데이터 사용 패턴에 따라 어떤 전략이 가장 어울릴지는 본인이 상황에 따라 판단해야됨.

     

    고정 블럭과 블럭 강제 출력

     

    고정 블럭

    - 장애로 인하여 메모리의 데이터가 손실되어 작업이 중단될 경우, 중단된 작업의 결과물이 디스크에 기록되는 것을 방지

    - 디스크 블럭이 교체되는 것을 제한

    ex. 처리 중에 발생하는 임시값, 프로그램 오류로 인해 메모리에 들어온 잘못된 값

     

    블럭 강제 출력

    - 시스템 로그와 같이 중요한 데이터는 디스크에 영구적으로 기록되어야 함

    - 버퍼 공간이 필요 없어도 강제로 디스크에 기록

    728x90