List
Search
1. 물리적 저장장치
1.1. 물리적 저장장치의 구성
•
데이터 접근 속도, 용량을 기준으로 다양한 장치로 구성
◦
레지스터
◦
캐시 메모리
◦
메인 메모리
◦
자기 디스크, 플래시 디스크
◦
광학 디스크, 자기 테이프
•
레지스터 → 디스크로 내려갈수록 저장 용량이 크나, 속도가 느림
1.2. 물리적 저장장치의 특징
•
휘발성
◦
캐시: 고비용 저장장치로 빠른 접근 속도를 보장
◦
메인 메모리: 실제 프로그램과 데이터 적재 공간
•
비휘발성
◦
플래쉬 메모리: 메인 메모리와 유사하나 비휘발성
◦
자기 디스크: 데이터베이스 전체를 안정적으로 저장
◦
광학 디스크 드라이브: CD, DVD 등
◦
테이프 장치: 용량이 크고 저렴하나 순차 접근 방식으로 접근 속도가 매우 느림
2. 파일
2.1. 데이터베이스 구성
•
데이터베이스
◦
여러개의 파일로 분리 (논리적 구분)
◦
여러개의 파일은 블록으로 분리되어있음 (물리적 구분)
2.2. 데이터베이스의 구성 요소
•
파일
◦
데이터를 영구적으로 저장하기 위해 사용되는 가장 기초적인 논리적 구조
•
블럭
◦
파일을 구정적인 길이로 분할하여 생기는 균등한 크기의 데이터 묶음
◦
일반적으로 메모리와 디스크간 데이터 전송 단위
•
레코드
◦
블럭을 구성하는 요소
◦
더이상 분리될 수 없는 최소 데이터 저장 단위
2.3. 고정 길이 레코드
•
고정적인 바이트 수를 갖는 레코드를 저장하는 기법
•
데이터 접근
◦
위의 예시에서 모든 모든 레코드는 42 바이트 크기로 구성
◦
i번째 레코드 접근
▪
(i-1) * 42 + 1 번째 바이트부터 42개의 바이트를 읽어 접근
2.4. 고정 길이 레코드 할당
•
잔여 고정 길이 레코드 할당
◦
블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 잔여 공간을 비워두는 방법
◦
블럭 내의 남은 공간 낭비
•
고정 길이 레코드 할당
◦
블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 한 레코드를 두블럭에 나누어 저장하는 방법
◦
레코드 접근시 두 블럭을 접근 (I/O 2번 발생)
2.5. 고정 길이 레코드 할당의 문제
•
레코드 삭제 시
◦
해당 레코드가 저장된 위치에 빈공간이 생성
◦
장시간 레코드 삽입 및 삭제 발생 시, 저장 공간에 많은 낭비가 발생
•
레코드 삭제 시 대처 방안
◦
마지막 레코드로 공백 대체
◦
삭제 레코드 이후의 레코드를 이동
◦
가용 리스트 관리 (연결리스트)
2.6. 가변 길이 레코드
•
블럭에 저장되는 레코드의 길이가 서로 다른 (가변적) 레코드를 할당하는 방법
•
가변 길이 레코드가 사용되는 상황
◦
한 블럭 내에 저장되는 레코드 유형이 둘 이상
◦
길이가 고정되지 않은 컬럼의 개수가 하나 이상
◦
레코드가 멀티셋을 허용한 컬럼을 가질때
▪
멀티셋 - 레코드의 컬럼값이 여러개인 컬럼
•
예시
•
슬롯 페이지 구조
2.7. 파일 구조화 방법
•
파일 수준에서 레코드를 관리(순서 등) 하는 기법
•
파일 구조화 방법 종류
◦
힙 파일 구조 - 저장순서 고려 없이 파일 내 임의의 위치에 배치 (검색 속도 느림)
◦
순차 파일 구조 - 레코드들이 탐색키 기준으로 정렬되어 저장 (검색 속도 빠름)
◦
해시 파일 구조 - 해시 함수를 사용하여 블럭 주소를 계산
2.8. 순차 파일 구조
•
레코드가 검색키 순서대로 정렬
•
레코드가 파일에 삽입되는 시점에서 키 값 부여
•
장점
◦
검색키에 대한 정렬 연산이 불필요. 키 값들의 순서로 레코드를 판독하는 연산에 효율적
◦
현재 레코드에서 정렬된 키 순서로 다음 레코드를 찾을 때 부가적인 블럭 접근이 불필요
◦
이진 탐색을 사용하면 더 빠르게 레코드를 검색
•
단점
◦
레코드 삽입, 삭제에 많은 비용 소요
•
오버플로우 블럭
◦
순차 파일 구조에서 레코드의 정렬된 상태 유지를 위해 삽입된 신규 블럭
3. 저장장치 관리
3.1. 저장장치 접근
•
파일은 논리적 관점에서의 저장 객체
•
실제 저장될때는 여러 개의 물리적 단위인 블럭으로 저장
◦
블럭은 메모리와 디스크 간 데이터의 전송 단위
◦
일반적으로 2KB ~ 32KB 사용
◦
블럭 전송을 최소화 할수록 입출력 소요 시간이 단축
▪
사용중인 블럭을 지속적으로 메모리에 적재
▪
한저정적인 공간으로 인해 필요에 따라 특정 블럭 할당 해지
▪
메모리 내부에 버퍼라는 공간에 블럭을 저장하고 이를 관리하기 위해 버퍼 관리자 사용
3.2. 버퍼 관리자
•
DBMS 상의 소프트웨어는 필요한 블럭이 있을 때 버퍼 관리자에게 해당 블럭을 요청
◦
요청된 블럭이 버퍼에 존재 → 버퍼 관리자는 블럭이 위치한 메모리 주소를 프로그램에 전달
◦
요청된 블럭이 버퍼에 X → 버퍼 관리자는 버퍼내 새로운 공간을 할당하고 해당블럭을 적재
◦
적재 공간 X → 버퍼에 있는 기존 블럭을 선택하여 할당을 해지하고 해당 블럭을 적재
3.3. 버퍼 교체 전략
•
가용 공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정 기준에 의해 해지
•
미래에 가장 적게 사용될 블럭을 선택하여 디스크에 내보내는 것이 가장 이상적인 버퍼 교체 전략
•
전략 기법
◦
LRU (Least Recently Used): 최근에 가장 적게 참조된 블럭을 교체
◦
MFU (Most Frequently Used): 특정 기간동안 가장 여러번 사용된 블럭을 선택하여 블럭을 교체
3.4. 고정 블럭과 블럭 강제 출력
•
고정 블럭
◦
장애로 인하여 메모리의 데이터가 손실되어 작업이 중단될 경우 중단된 작업의 결과물이 기록되는 것을 방지
◦
디스크 블럭이 교체되는 것을 제한
•
블럭 강제 출력
◦
시스템 로그와 같이 중요한 데이터는 디스크에 영구적으로 기록되어야 함
◦
버퍼 공간이 필요 없더라도 강제로 디스크에 기록