1. 순차 화일
1) 정의
- 레코드를 조작하는 가장 기본적인 방법으로 화일 생성 시 레코드들을 연손적으로 저장
- 레코드들을 접근할 때도 저장할 때 순서대로 연속적으로 접근
2) 종류
- 입력 순차 화일 : 레코드가 입력되는 순서대로 저장
- 키 순차 화일 : 레코드의 특정 필드 값 순서에 따라 저장
2. 스트림 화일
1) 정의
- 연속적인 판독 연산을 통해 레코드가 화일에 저장되어있는 순서에 따라 데이터를 접근하는 화일
- 데이터가 하나의 연속된 바이트 스트림으로 구성
2) 종류
ⓐ 순차 접근 스트림 화일
: 기본 스트림 화일을 판독(read)모드로 열면 판독 포인터는 화일의 첫번째 바이트를 가르킴
> 판독 연산
- 해당 위치에서 시작하여 해당 바이트 값을 전송
- 판독 포인터를 스트림 화일의 다음 바이트 시작 위치로 변경
- n번째 바이트 값을 판독하기 위해서는 n-1번째 바이트 값을 판독해야함
> c언어를 이용한 스트림 파일 생성
streamfile = fopen("stream.txt", "w");
- 공백 스트림 화일이 생성되어 개방되고, 화살표 위치는 인덱스 값을 갖는 포인터를 나타냄
- 화살표 위치는 0을 가르킨다.
fputc(ch, streamfile);
- 스트림 화일에 한 글자를 씀
- fputc를 연속적으로 사용하여 한 글자씩 입력
- 입력이 끝나면 스트림 화일이 생성
- 화살표 위치는 마지막에서 +1을 가르킴
fclose(streamfile);
- 스트림 화일을 닫는다.
- end-of-file 표시를 화일 맨 끝에 첨가
- stream.txt라는 이름으로 저장된다.
- 연속적으로 화일에 접근하고 모든 바이트를 처리하는 경우에 유용
- 화일을 순차적으로 접근하는 과정은 배열을 순차적으로 접근하는 것과 유사
- 특정 바이트를 찾기 위한 방법으로는 좋지 않음
ⓑ 임의 접근 스트림 화일
: 오프셋 값을 이용하여 직접 접근 한다.
> 임의 접근을 위한 함수 : fseek() - 판독/기록 포인터 변경, ftell() - 현재 인덱스 값 반환
streamfile = fopen("stream.txt", "r");
- 화일이 열리면 판독 포인터는 첫 번째 바이트를 가르키게 설정
ftell(streamfile)
- 현재의 포인터 값을 반환 : 0
fseek(filename, offset, WhereFrom);
SEEK_SET : 시작위치, SEEK_END : 끝 위치, SEEK_CUR : 현재위치
3) 접근 모드
- 화일에서 수행하려는 연산에 따라 판독(read), 기록(write), 갱신(read/write), 첨가(append) 등을 명세
3. 순차 화일의 유형
1) 입력 순차 화일
- 레코드 <필드, 값> 쌍으로 구성되는 화일
- 갱신 작업 : 새로운 레코드 삽입(화일 끝에 첨가), 삭제, 변경
- 검색 작업 : 검색하는 필드 값을 화일 시작부터 비교하여 원하는 필드 값(키 필드)을 검색
- 삭제, 변경 작업 : 새로운 순차 화일을 생성하면서 동시에 수행
- 삭제 연산 : 작업 대상 레코드를 검색하면서 기존 레코드를 새로운 화일로 출력
2) 키 순차 화일
- 저장장치의 레코드 순서와 레코드 리스트의 논리적 순서가 같은 구조의 화일
- 화일 내의 레코드를 : 키 필드 값에 따라 정렬
- 데이터 필드 : 화일 설명자에 한 번만 저장하면 됨
> 정렬된 화일 : 레코드들이 특정 키 필드에 따라 정렬된 화일
> 순차 화일의 정렬 순서 : 응용에 따라 결정
> 순차 화일의 특징
- 대화식 보다 일괄처리에 많이 사용
- 장점 : 차위 레코드들을 신속하게 접근 가능
4. 순차 화일의 설계
1) 설계 시 고려사항
① 필드 배치 : 활동 화일/ 비활동 화일로 구분하여 저장
- 활동 화일의 크기를 감소시켜 데이터 화일에 대한 처리를 감소시킬 수 있다
② 키 필드 : 고정 길이/ 가변 길이 사용
③ 적정 블로킹 인수 : 일반적으로는 크게, but 사양에 따라 제한받을 수 있음
5. 순차 화일의 생성
1) 생성
- 데이터 저장 장치에 레코드들을 순서대로 입력
- 키 순차 화일의 갱신 : 트랜잭션 화일 이용
2) 편집
- 트랜잭션 화일 생성 과정에서 입력되는 데이터 값에 오류가 있는지 검사
6. 순차 화일의 갱신
1) 순차 화일에서의 검색 : 레코드의 저장 순서에 따라 연속적으로 검색
2) 순차 화일에 대한 질의
- 화일 구조상 연속적인 검색의 경우에 효율적
- 화일의 질의 적중 비율 = 질의에 응답하기 위해 접근해야 할 레코드 수/화일 전체의 레코드 수
- 질의 적중 비율이 클 수록 순차 화일 구조 더 적합
3) 키 순차 화일의 갱신
ⓐ 삽입 : 키 값에 따라 정렬순서를 유지해야 하므로 복잡
ⓑ 삭제, 수정 : 삽입이랑 비슷함
4) 순차 마스터 화일의 갱신
ⓐ 갱신 트랜잭션을 트랜잭션 화일에 모아서 일괄 처리
- 삽입(I), 기존 레코드 삭제(D), 기존 레코드 수정(C)
5) 마스터 화일 갱신 빈도수
ⓐ 갱신 빈도수를 결정하는 요인 : 데이터 변경율, 마스터 화일의 크기, 최신 데이터 요구수, 화일 활동 비율
* 변경율이 클수록, 크기가 작을수록, 요구 클수록, 비율 클수록 갱신 빈도수 증가
ⓑ 화일 활동 비율 = 일련의 트랜잭션에 의해 영향을 받는 마스터 화일의 레코드 수/ 마스터 화일의 총 레코드 수
6) 순차 화일의 갱신 작업⭐⭐⭐
① masterKey < transKey
- 마스터 레코드에 적용할 트랜잭션 레코드가 없는 경우
- 마스터 레코드를 새로운 마스터 화일로 복사, 다음 마스터 레코드를 읽는다
② masterKey = transKey
- 수정(C) : 레코드를 변경하여 새로운 마스터 화일에 삽입, 다음 트랜잭션 레코드를 읽음
- 삭제(D) : 마스터 레코드는 삭제
- 삽입(I) : 마스터 화일에 이미 같은 키 값을 가진 레코드가 있으므로 오류 출력, 다음 레코드 읽음
③ masterKey > transKey
- 트랜잭션 레코드에 일치하는 마스터 레코드가 없는 경우
- 삽입(I) : 레코드를 구성하여 새로운 마스터 화일에 삽입함
- 나머지 갱신 코드에 대해서는 오류, 다음 트랜잭션 레코드를 읽는다
* 하나의 마스터 레코드에 대해 적용할 트랜잭션이 다수
- 트랜잭션들을 발생된 시간 순서에 따라 적용
- 1차 키는 transKEY, 2차 키는 트랜잭션 발생 기간을 기준으로 정렬 한 뒤에 갱신 작업을 시작해야 한다.
- 갱신된 레코드를 새로운 마스터 화일에 출력하기 전에 관련 트랜잭션들을 모두 처리되었는지 확인
* EOF는 어떤 레코드 키 값보다 크다
'Major > Database' 카테고리의 다른 글
[파일 처리] 06 인덱스 구조 - 중간고사 전 (0) | 2022.04.15 |
---|---|
[파일 처리] 05 화일의 정렬/합병 (0) | 2022.04.13 |
[파일 처리] 03 파일 입출력 제어 (0) | 2022.04.09 |
[파일 처리] 02 화일 저장 장치 (0) | 2022.04.06 |
[파일 처리] 01 화일의 기본 개념 (0) | 2022.04.06 |