Database - 데이터 저장과 파일
물리적 저장장치
데이터 접근속도, 용량을 기준으로 다양한 장치로 구성
휘발성
▷ 캐시 : 고비용 저장장치로 빠른 접근속도 보장
▷ 메인메모리 : 실제 프로그램과 데이터 적재공간
비휘발성
▷ 플래시 메모리 : 메인메모리와 유사하나 비휘발성
▷ 자기디스크 : 데이터베이스 전체를 안정적으로 저장
▷ 광학디스크 (CD, DVD, Blue-ray)
▷ 테이프 장치 : 용량이 크고 저렴, 순차접근 방식으로 매우 느림
파일
데이터베이스의 구성
파일 : 데이터를 영구적으로 저장하기 위해 사용되는 가장 기초적인 논리적인 구조
블럭 : 파일을 고정적인 길이로 분할하여 생기는 균등한 크기의 데이터묶음으로 메모리와 디스크간 데이터 전송 단위로 결정 (1개의 블럭에 약 200개의 레코드)
레코드 : 블럭을 구성하는 요소, 더이상 분리될 수 없는 최소한의 저장단위
(1) 고정길이 레코드
▷ 고정적인 바이트 수를 갖는 레코드를 저장하는 기법, 모든 레코드가 동일한 크기 n byte로 구성되어 있다면 i번째 레코드는 (i-1)*n + 1번째 바이트부터 n개의 바이트를 읽어들여 접근
▷ 잔여 고정 길이 레코드 할당
블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 잔여공간을 비워두는 방법(블럭내 남은 공간 낭비)
블럭의 길이가 레코드 길이로 정확히 나눠지지 않아 한 레코드를 두블럭에 나누어 저장하며, 레코드 접근시 두 블럭을 접근하여야 하므로 속도가 느려짐
▷ 고정 길이 레코드 삭제
해당 레코드가 저장된 위치에 빈공간 발생, 장시간 레코드의 삽입, 삭제 시 저장공간에 많은 낭비 발생
대처방법 : 마지막 레코드를 끌어올려 공백에 대체(레코드의 순서가 달라져 검색 시간 증가), 삭제 레코드 이후 모든 레코드 이동 (입력순서는 유지되나 이동에 많은 시간이 소요될수 있어, 삭제가 오버헤드 유발) 가용리스트 관리(공백 포인터로 관리하고 새로운 레코드를 공백에 삽입)
(2) 가변길이 레코드
▷ 블럭에 저장되는 레코드의 길이가 서로 다른(가변적)레코드를 할당하는 방법, 레코드를 정의 (시작바이트와 길이, 고정길이 저장되고 가변시작시점 null, 가변길이 저장)
▷ 가변길이 레코드를 저장하기 위해 슬롯 페이지 구조 적용하며 레코드를 차례대로 저장하며 가변공간을 별도로 하여 요약정보와 갯수등을 관리
▷ 한블럭내에 저장되는 레코드 유형이 둘이상, 길이가 고정되지 않은 컬럼의 갯수가 1개이상, 레코드가 멀티셋(레코드 컬럼값이 여러개인 컬럼)을 허용한 컬럼을 가질때 적용됨
(3) 파일구조화 방법
새로운 레코드 저장시에 삽입 위치설정에 따라
▷ 힙파일 구조 : 저장위치의 고려없이 파일내 임의의 위치에 배치
▷ 순차파일구조 : 레코드들이 탐색키 기준으로 정렬되어 저장 (이진탐색), 레코드가 검색키 순서대로 정렬, 파일에 삽입되는 시점에 키값이 부여
검색키에 대한 정렬연산 불필요(키값 순서로 레코드 판독하는 연산에 효율적), 정렬된 키 순서로 다음 레코드 찾을때 부가적인 블럭접근 불필요, 이진 탐색을 사용하면 더 빠르게 레코드 검색 , 레코드 삽입/삭제에 많은 비용 소요
▷ 해시파일구조 : 해시함수를 사용하여 블럭주소 계산
** 오버플로우 블럭은 순차파일구조에서 레코드 정렬상태 유지를 위해 삽입된 신규 블럭
저장장치의 관리
파일은 논리적 관점에서의 저장객체이며, 실제로는 물리적 단위인 블럭에 저장된다. 블럭은 메모리와 디스크간에 전송단위이며 2KB ~ 32KB(대개 4KB)로 블럭전송을 최소화할수록 입출력 소요시간은 단축되므로 사용중인 블럭은 지속적으로 메모리에 적재하며, 한정적 공간으로 인해 필요에 따라 블럭할당을 해지하므로 버퍼에 블럭을 저장하고 버퍼관리자를 사용
(1) 버퍼 관리자
DBMS상의 소프트웨어는 필요한 블럭이 있을때 버퍼관리자에게 해당 블럭요청
▷ 버퍼관리자는 버퍼에 해당 블럭이 있으면 블럭위치의 메모리주소를 프로그램에 전달
▷ 버퍼에 블럭이 없으면 버퍼내에 새로운 공간을 할당하고 해당 블럭을 적재
▷ 적재공간이 없으면 기존 블럭을 선택하여 할당을 해지하고 해당 블럭을 적재
버퍼교체전략
▷ 가용공간을 확보하기 위해 기존에 적재된 블럭의 할당을 특정기준에 의해 해지
▷ 가장 적게 사용될 블럭을 선택하여 디스크로 내보내는 전략 (LRU, MFS)
고정블록과 블럭강제출력
▷ 고정블럭
장애로 인하여 메모리의 데이터가 손실되어 작업이 중단될 경우, 중단된 작업의 결과물 디스크 기록 방지
디스크 블럭이 교제되는 것을 제한
▷ 블럭강제출력
시스템 로그와 같이 중요한 데이터는 영구적으로 기록되어야 하므로 버퍼공간이 필요없어도 강제로 디스크에 기록