데이터 저장과 파일
물리적 저장 장치
물리적 저장장치는 데이터 접근 속도, 용량을 기준으로 다양한 장치로 구성됨
물리적 저장장치별 특징
- 휘발성
- 캐시: 고비용 저장장치로 빠른 접근 속도를 보장
- 메인 메모리: 실제 프로그램과 데이터 적재 공간
- 비휘발성
- 플래쉬 메모리: 메인 메모리와 유사하나 비휘발성
- 자기 디스크: 데이터베이스 전체를 안정적으로 저장
- 광학 디스크 드라이브: CD, DVD, Blue-ray 등
- 테이프 장치: 용량이 크고 저렴하나 순차 접근 방식으로 접근 속도가 매우 느림
데이터베이스 구성
- 파일
- 데이터를 영구적으로 저장하기 위해 사용되는 가장 기초적인 논리적 구조
- 블럭
- 파일을 고정적인 길이로 분할하여 생기는 균등한 크기의 데이터 묶음
- 일반적으로 메모리와 디스크간 데이터 전송 단위로 결정
- 레코드
- 블럭을 구성하는 요소
- 더 이상 분리될 수 없는 최소 데이터 저장 단위
고정 길이 레코드 고정적인 바이트 수를 갖는 레코드를 저장하는 기법
잔여 고정 길이 레코드 할당 블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 잔여 공간을 비워두는 방법
블럭마다 남는 공간이 생기면 아깝기 때문에 고정 길이 레코드 할당을 통해서 잔여공간을 사용하기도 함고정 길이 레코드 할당 고정 길이 레코드 만큼 할당하고나서 남은 공간이 고정 길이보다 작을 경우,
남은 공간에 데이터의 일부를 할당하고 나머지는 다음 블럭에 할당함
단점
레코드 접근 시 두 블럭을 접근해야 함
- 레코드 삭제 시
- 해당 레코드가 저장된 위치에 빈공간이 생성
- 장시간 레코드의 삽입 및 삭제 발생 시, 저장 공간에 많은 낭비가 발생
- 레코드 삭제 시 대처 방안
- 마지막 레코드로 공백 대체
- 삭제 레코드 이후의 레코드를 이동
- 가용 리스트 관리
레코드 삭제 대처
- 마지막 레코드로 공백 대체 => 레코드의 순서가 틀어짐
- 삭제 레코드 이후의 레코드를 이동 => 앞쪽 레코드를 삭제할 경우 뒤쪽의 모든 데이터가 움직이므로 오버헤드가 일어날 수 있음
- 가용 리스트 관리 => 파일헤더에 공백 레코드 포인터(연결리스트)를 추가해서 삭제된 레코드 공간을 관리해줌
가변 길이 레코드
블럭에 저장되는 레코드의 길이가 서로 다른 레코드를 할당하는 방법
가변 길이 레코드가 사용되는 상황
- 한 블럭 내에 저장되는 레코드 유형이 둘 이상
- 길이가 고정되니 않은 컬럼의 개수가 하나 이상
- 레코드가 멀티셋을 허용한 컬럼을 가질 때
0~4바이트에 가변 레코드의 시작과 끝을 저장해놓음
멀티셋
레코드의 컬럼값이 여러 개인 컬럼이다.
RDBMS에서는 허용하지 않지만, 상용 레코드에서는 이용하는 경우가 있다.
슬롯페이지 구조
- 슬롯페이지의 가장 처음에는 레코드의 개수를 담고 있음
- 블럭 헤더: 레코드 개수 다음에는 레코드 요악 정보를 담고 있음
- 레코드는 슬롯페이지의 가장 끝부터 채워짐
파일 구조화 방법의 종류
- 힙 파일 구조: 저장순서 고려없이 파일 내 임의의 위치에 배치 (일단 빈공간 찾아서 우선 저장)
- 순차 파일 구조: 레코드들이 탐색 키 기준으로 정렬되어 저장 (이진 탐색을 통해 빠르게 검색 가능)
- 해시 파일 구조: 해시 함수를 사용하여 블럭 주소를 계산
순차 파일 구조
레코드가 검색키 순서대로 정렬
레코드가 파일에 삽입되는 시점에서 키 값이 부여됨
장점
- 검색키에 대한 정렬 연산이 불필요, 키 값들의 순서로 레코드를 판독하는 연산에 효율적
- 현재 레코드에서 정렬된 키 순서로 다음 레코드를 찾을 때 부가적인 블럭 접근이 불필요
- 이진 탐색을 사용하면 더 빠르게 레코드를 검색할 수 있음
단점
- 레코드 삽입, 삭제에 많은 비용 소요
저장장치 관리
저장장치 접근
- 파일은 논리적 관점에서 저장 객체라고 볼 수 있음
- 실제 저장될 때에는 여러 개의 물리적 단위인 블럭으로 저장
- 블럭은 메모리와 디스크 간 데이터의 전송 단위
- 일반적으로 2kb ~ 32kb 사용
- 블럭 전송을 최소화할 수록 입출력 소요 시간이 단축
버퍼 관리자
DBMS상의 소프트웨어는 필요한 블럭이 있을 때 버퍼 관리자에게 해당 블럭을 요청
- 요청된 블럭이 버퍼에 있다면, 버퍼 관리자는 블럭이 위치한 메모리 주소를 프로그램에게 전달
- 요청된 블럭이 없는 경우, 버퍼 관리자는 버퍼내의 새로운 공간을 할당하고 해당 블럭을 적재
- 더 이상 적재할 공간이 없다면, 버퍼에 있는 기존 블럭을 선택하여 할당을 해지하고 해당 블럭을 적재
버퍼 관리자의 기능
버퍼 교체 전략
- 가용 공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정 기준에 의하여 해지
- 미래에 가장 적게 사용될 블럭을 선택하여 디스크로 내보내는 것이 이상적인 버퍼 교체 전략
- 버퍼 교체 전략 기법
- LRU(Least Recently Used): 최근에 가장 적게 참조된 블럭
- MFU(Most Frequently Used): 특정 기간동안 가장 여러번 사용된 블럭을 선택하여 블럭을 교체
고정 블럭
- 장애로 인하여 메모리의 데이터가 손실되어 작업이 중단될 경우, 중단된 작업의 결과물이 디스크에 기록되는 것을 방지
- 디스크 블럭이 교체되는 것을 제한
블럭 강제 출력
- 시스템 로그와 같이 중요한 데이터는 디스크에 영구적으로 기록되어야 함
- 버퍼 공간이 필요 없어도 강제로 디스크에 기록