[파일 처리] 04 순차 화일

2022. 4. 13. 03:57·Major/Database
728x90

 

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는 어떤 레코드 키 값보다 크다

 

 

728x90
저작자표시 비영리 (새창열림)

'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
'Major/Database' 카테고리의 다른 글
  • [파일 처리] 06 인덱스 구조 - 중간고사 전
  • [파일 처리] 05 화일의 정렬/합병
  • [파일 처리] 03 파일 입출력 제어
  • [파일 처리] 02 화일 저장 장치
BeNI
BeNI
코딩하는 블로그
  • BeNI
    코딩못하는컴공
    BeNI
  • 전체
    오늘
    어제
    • Menu (253)
      • My profile (1)
      • 회고 | 후기 (8)
      • Frontend (65)
        • Article (11)
        • Study (35)
        • 프로그래머스 FE 데브코스 (19)
      • Backend (0)
      • Algorithm (58)
        • Solution (46)
        • Study (12)
      • Major (111)
        • C&C++ (23)
        • Java (20)
        • Data Structure (14)
        • Computer Network (12)
        • Database (15)
        • Linux (6)
        • Architecture (3)
        • Lisp (15)
        • OS (1)
        • Security (2)
      • etc (2)
  • 링크

    • 깃허브
    • 방명록
  • 인기 글

  • 최근 댓글

  • 최근 글

  • 태그

    리팩토링
    자료구조
    데브코스
    react
    lisp
    프로그래머스
    C++
    Algorithm
    백준
    파일처리
  • hELLO· Designed By정상우.v4.10.2
BeNI
[파일 처리] 04 순차 화일
상단으로

티스토리툴바