620 likes | 1.13k Views
7 장 인덱스된 순차 화일. 인덱스된 순차 화일의 구조. 순차 화일 : 순차 접근 방법 결합 직접 화일 : 직접 접근 방법 구조 순차 데이타 화일 : 순차적으로 정렬 인덱스 : 화일에 대한 포인터. ▶ 인덱스된 순차 화일의 예. 이원 탐색 트리의 인덱스 구조를 가진 인덱스된 순차 화일의 예. ▶ 구현 방법. 삽입 , 삭제시 순차 데이타 화일의 레코드 순서 유지 방법 인덱스 갱신 방법 정적 인덱스 (static index) 방법
E N D
인덱스된 순차 화일의 구조 • 순차 화일 : 순차 접근 방법 결합 • 직접 화일 : 직접 접근 방법 • 구조 • 순차 데이타 화일 : 순차적으로 정렬 • 인덱스 : 화일에 대한 포인터
▶ 인덱스된 순차 화일의 예 • 이원 탐색 트리의 인덱스 구조를 가진 인덱스된 순차 화일의 예
▶ 구현 방법 • 삽입, 삭제시 • 순차 데이타 화일의 레코드 순서 유지 방법 • 인덱스 갱신 방법 • 정적 인덱스(static index) 방법 • 인덱스의 내용 변경, 구조 불변 • 오버플로우 구역 사용 • 인덱스 : 하드웨어 의존적 설계 • 보조기억장치의 물리적 특성(실린더, 트랙) • IBM의 ISAM
▶ 구현 방법 • 동적 인덱스(dynamic index) 방법 • 인덱스, 데이타 화일 : 블럭 • 블럭 : 예비 공간 • 오버플로우 → 분열(split) • 언더플로우 → 합병(merge) • 인덱스 • B+-트리 • 하드웨어 독립적 • IBM의 VSAM
정적 인덱스 방법 • 정적인 구현 • 기억장치의 물리적 특성에 기반
▶ 데이타 화일 • 기본 구역(prime area) • 각 실린더 • 트랙 0 : 트랙의 레코드에 대한 인덱스 • 트랙 1-n : 데이타 레코드 • 오버플로우 구역 • 분리된 화일 : 추가적인 삽입 • 오버플로우 포인터 = <실린더, 트랙, 레코드 번호> • 실린더 당 오버플로우 구역 또는 한 화일당 한 오버플로우 구역
▶ 인덱스 화일 • 엔트리 = <키 값, 포인터(실린더 번호, 트랙 번호)> • 마스터 인덱스 • 최상위 레벨 인덱스 (주기억장치에 상주) • <최고키값, 포인터> • 실린더 인덱스 • <최고키값, 실린더 번호> • 트랙 인덱스 • 실린더에 저장된 레코드들에 대한 인덱스 • 트랙 0에 위치 • <최저키값, 트랙 번호>
▶ 정적 인덱스 방법 예 • 정적 인덱스 방법으로 구성된 인덱스된 순차 화일
▶ 갱신 연산 (삽입) • 가정 : 각 트랙 : 5 레코드, 40 % 자유공간 ① INSERT 김수철 INSERT 강원구 ★ 트랙의 각 항목은 오름차순 유지
▶ 갱신 연산 (삽입) ② INSERT 김시만 ★ 오버플로우 구역 - 기본구역과는 별개의 실린더
0 트랙 1 트랙 강 석오 강 원구 강 인희 김 성기 김 수철 2 트랙 김 연주 나 민영 나 용선 3 트랙 문 봉기 안 기영 유 성렬 0 트랙 1 트랙 2 트랙 3 트랙 ▶ 갱신 연산 (삽입) ③ INSERT 남창원 INSERT 나용선 INSERT 나원규 ★ 레코드의 순서 - 기본 트랙의 항목에 오버플로우된 항목도 포함하여 순서유지 기본 데이타 화일 1 실린더 1 op1 2 op2 3 강석오 김시만 김연주 남창원 문봉기 나 원규 남 윤희 오버플로 구역 7 실린더 김 시 만 남 창 원
▶ 갱신 연산 (삽입) ④ INSERT 김성복 ★오버플로우 구역의 레코드 : 체인으로 연결 <레코드, 해당 트랙의 다음 오버플로우 레코드에 대한 포인터>
▶ 검색 • 직접 검색 • 마스터 인덱스 → 실린더 인덱스 → 실린더 주소 • 트랙 인덱스 → 트랙 포인터 • 포인터 = 데이타 구역의 트랙 • 데이타 트랙의 순차 탐색 • 포인터 = 오버플로우 구역 • 오버플로우 체인 탐색 • 순차 검색 • 기본 데이타 트랙 검색 • 오버플로우 체인 접근
▶ 검색 성능 • 기본 구역의 레코드 접근 : 4회 • 인덱스 화일 : 2 • 트랙 인덱스 : 1 • 데이타 트랙 : 1 • 오버플로우 구역 : 3 + k • 인덱스 화일 : 2 • 트랙 인덱스 : 1 • 체인의 k번째 : k • 재구성 • 삽입 빈번 → 긴 체인(성능 저하) • 화일 관리자의 주기적 재구성 • 순차적 완독 • 재기록
▶ 삭제 • 동적 삭제 • 물리적 제거 • ① 오버플로우 구역 - 체인 조정 • ② 체인의 첫 레코드 - 트랙 인덱스 수정 • ③ 기본 구역 • 큰 키값의 레코드는 한자리씩 이동 • 오버플로우 레코드가 있는 경우 • 체인의 첫 레코드가 기본구역 이동 • ②의 작업 • 삭제 표시 • 주기적인 쓰레기 수집(garbage collection)
ISAM 화일 • IBM의 ISAM(Indexed Sequential Access Method) • 특정 하드웨어의 특성에 맞도록 설계 • 장점 • 접근 시간 단축 • 기억 공간의 효율성 • 단점 • 기억장치의 유형 변경 또는 화일의 복사시 문제
(1) ISAM 화일의 구조 • 기본 데이타 구역 • 데이타 레코드 저장 • 실린더 • 트랙 0 : 트랙 인덱스 (기본구역과 오버플로우구역에 대한 포인터) • 트랙 1~(n-1) : 고정 크기 레코드 (오름차순) • 트랙 n : 실린더 오버플로우 구역 • 인덱스 구역 • 화일의 첫 실린더 • 실린더 인덱스 : 실린더를 지시 • 독립된 오버플로우 구역 • 화일의 마지막 실린더 • 실린더 오버플로우 구역의 오버플로우
▶ 실린더 오버플로우 구역 • 기본 구역의 오버플로우 • 트랙 오버플로우 인덱스 • 오버플로우 레코드를 원래 트랙과 연결 • 이점 • 기본구역과 동일 실린더 • 오버플로우 구역 접근을 위한 별도의 탐구가 필요 없음 • 독립 오버플로우 구역 • 별도의 탐구 • 단점 • 모든 실린더에 동일 크기 → 사용의 불균형
▶ 기본 데이타 구역 • 물리적 순서 유지 • 실린더 i의 레코드 키값 < 실린더 i+1의 임의의 키값 • 순차 접근 지원
(2) ISAM 화일의 인덱스 구조 • 다단계 인덱스 구조 • 트랙 인덱스 • 실린더 인덱스 • 마스터 인덱스
▶ 트랙 인덱스 • 탐구 시간의 최소화 - 각 실린더의 트랙 0 • 인덱스 엔트리 • 정상 엔트리 (트랙의 최대키값, 트랙번호) • 오버플로우 엔트리 (해당 트랙의 오버플로우 레코드의 최대키값, 최소키값을 가진 레코드 주소 쌍) NK1 OK1 < NK2 OK2 < ••• < NKn OKn NKi : 트랙 i의 정상 엔트리 키값 OKi : 트랙 i의 오버플로우 엔트리 키값 ★ NKi = OKi : 오버플로우 레코드 없음
▶ 실린더 인덱스 • 기본 데이타 구역의 실린더에 대한 엔트리 (실린더중 최대키값, 실린더의 트랙 인덱스 주소)
▶ 마스터 인덱스 • 실린더 인덱스 - 여러 트랙으로 구성 • 마스터 인덱스 엔트리 (실린더 인덱스의 각 트랙에서 최대키값, 트랙의 주소) • 한단계 또는 다단계 : 여러 트랙 • 최상위 단계 마스터 인덱스 : 한 트랙 정도 크기
(3) ISAM 화일에서의 삽입과 삭제 • 검색과 동일 방법으로 삽입해야될 기본 데이타 트랙 • 삽입 • 독립된 오버플로우 구역을 이용한 삽입 (a) 초기 화일
▶ ISAM 화일에서의 삽입 (b) ARK를 삽입 (c) BED, BEG, BEN, BET, ARL을 차례로 삽입
▶ ISAM 화일에서의 삽입 (d) ACE, BAR, BAT, AMY를 차례로 삽입
▶ ISAM 화일에서의 재구성 및 삭제 • 재구성 • 독립된 오버플로우 구역의 사용 → 접근 시간 지연 • 오버플로우 체인 길이 증가 • 주기적 재구성 • 모든 레코드 → 기본 데이타 트랙으로 저장 • 삭제 • 삭제 표시 • 아주 높은 키값 • 삭제 필드 또는 플래그 • 삽입시 재이용
동적 인덱스 방법 • 블럭에 기초한 구현 : 동적인 구현 • 인덱스 화일 • 인덱스 블럭의 트리구조 • 다중 레벨 인덱싱 (인덱스의 인덱스 화일) • 최고 레벨 인덱스(마스터 인덱스)는 주기억장치에 적합 • 인덱스 엔트리 = <키 애트리뷰트 값, 포인터(데이타 블럭 또는 인덱스 블록)> • 데이타 화일 • 순차적인 구조 - 데이타 블럭들 • 블럭들 사이에 자유공간이 분포 • 나중의 삽입을 위해 • 데이타 블럭들은 논리적인 순서로 연결 • 데이타 블럭 체인
▶ 동적 인덱스 방법의 인덱스된 순차 파일 • 직접 검색 • 검색 레코드의 키 = '문봉기'
▶ 삽입 • 데이타 블럭 분할 • 인덱스 블럭의 분할을 야기할 수 있음 • (가정) • 데이타 블럭 : 5 레코드 • 인덱스 블럭 : 4개의 <키값, 포인터> 쌍 • 자유공간 또는 패딩(padding) 존재
▶ 삽입 예 ① INSERT 나동성 INSERT 강인회 데이타 블럭 1에 삽입
▶ 삽입 예 ② INSERT 나문수 • 데이타 블럭 1의 분열과 인덱스 블럭의 변화
▶ 삽입 예 ③ INSERT 김성복 INSERT 권성길 INSERT 고재현
VSAM 화일 • VSAM : Virtual Storage Access Method • 동적 인덱스 방법 • VSAM 화일의 구조 • 제어 구간(control interval) • 데이타 레코드 저장 • 제어 구역(control area) • 제어 구간의 모임 • 순차셑(sequence set) • 제어 구역에 대한 인덱스 저장 • 인덱스 셑(index set) • 순차셑의 상위 인덱스
▶ 제어 구간 구조 • 데이타 블럭 • 키값에 따른 물리적 순차 • 자유 공간 • 레코드 정의 필드(RDF: Record Definition Field) • RBA (Relative Byte Address) • 레코드의 바이트 수 • 제어구간 정의필드(CIDF: Control Interval Definition Field) • 제어 구간 내의 자유 공간 바이트 수 • 자유 공간의 위치
▶ 제어 구간 양식과 삽입, 삭제 • VSAM화일의 제어구간 양식 • 제어 구간에 대한 삽입, 삭제 • 저장된 레코드들 사이에 빈공간이 없도록 함
▶ 제어 구역 • 일정 수의 제어 구간의 그룹 • 일정 수의 트랙으로 구성 • 순차셑 • 인덱스 엔트리=(제어 구간의 최대키값, 주소) • 제어 구간의 물리적 순서는 필요 없음 • 순차셑에 의해 유지(체인으로 연결)
▶ 인덱스셑 • 인덱스 블럭으로 구성된 트리 구조 • 엔트리= (차하위 레벨의 인덱스 블럭의 최대키값, • 인덱스 블럭에 대한 주소) • 인덱스셑의 최하위 단계 : 순차셑 지시 • 키값의 크기순으로 저장
(2) VSAM 화일에서의 삽입과 삭제 • 키 순차 화일(key-sequenced file) 지원 • 레코드들을 키값순으로 저장 • 제어 구간내의 물리적 순서 • 제어 구간들의 정렬 : 순차셑 • 순차셑의 정렬 : 인덱스셑 • 분산 자유 공간 (distributed free space) • 제어 구간 내의 자유 공간 • 키 순차 VSAM : 각 제어 구역 끝의 빈 제어 구간
▶ 키 순차 VSAM 화일 • 순차적 접근 • 화일의 첫 제어 구간의 RBA를 식별위해 인덱스 탐색 • 연결된 순차셑 체인을 따라가며 각 제어 구간 접근 • 직접 접근 • 인덱스셑 -> 순차셑 (B+-트리와 유사)
▶ 키 순차 VSAM 화일 예 제어 구역 2
▶ 레코드의 삽입 • 레코드의 이동 (∵ 제어 구간내의 물리적 순서 유지) • 자유 공간의 부족 → 제어 구간의 분열(split) • 만원이 된 제어 구간 • 제어 구역 끝의 빈 제어 구간으로 레코드 절반 이동 • 순차셑 엔트리로 제어구간 순서 유지 • 제어 구역 분열 • 만원이 된 제어 구역 • 화일 끝의 빈 제어구역으로 반 이동 • 순차셑 고정으로 문서 유지
▶키가 54인 레코드가 삽입된 뒤의 제어 구역 • 키가 54인 레코드가 삽입되어 제어 구간 분열이 일어난 뒤의 제어 구역 1
▶ 삽입과 삭제 • 물리적 삭제 → 레코드 이동 • 순차셑 엔트리 변경 → 인덱스 셑 • 수록 순차 화일 (entry-sequential file) • 레코드 순서: 화일에 수록되는 순서 • 인덱스 • 유지 안 함 • RBA 제공: 사용자가 인덱스 구축 가능 • 상대 화일 (Relative File) • 레코드의 제어 구간 저장시 • 상대 레코드 번호에 따라 저장 • 상대 레코드 번호 : 사용자가 정의 • 인덱스 없음 • 레코드길이 일정 : 제어구간의 레코드수 동일