본문 바로가기
객체지향설계

[파일구조] - 레코드 접근과 성능

by CHML 2016. 4. 24.
1. 순차 접근(Sequential Access)

원하는 레코드를 찾기 위해 파일의 현재 위치에서 차례대로 탐색을 실시하는 접근 방법이다. 특별한 구현이 없다면, 레코드를 접근할 때마다 디스크를 물리적으로 움직여야하기 때문에 매우 비효율적이다.

순차 접근의 비효율성을 줄이기 위해 레코드 블록화(record blocking) 기법을 이용한다. 블록(block)은 여러 레코드의 집합이며, 파일 시스템은 레코드를 하나씩 읽어 메모리에 적재하는 것이 아니라 디스크에서 블록 단위로 데이터를 읽어 메모리에 적재한다. 예를 들어, 4,000개의 레코드로 구성된 파일을 블록 크기 16인 파일 시스템이 모두 읽기 위해서는 250번의 디스크 접근만 수행하면 된다. 레코드 블록화 기법에서 블록의 크기가 커지면 커질수록 디스크 접근 횟수는 줄어들지만, 그만큼 필요없는 데이터까지 읽어올 확률이나 필요없이 읽어온 데이터의 양이 증가하게 된다.


2. 임의 접근(Random Access)

시스템이나 프로그래머가 원하는 위치부터 파일을 읽는 접근 방법이다. 5번 레코드를 접근하기 위해 1, 2, 3, 4, 5 레코드를 모두 접근하는 것이 아니라 5번 레코드를 바로 접근하기 때문에 직접 접근(direct access)라고도 한다. 단 한번의 디스크 접근을 통해 레코드에 접근하기 때문에 항상 순차 접근보다 성능이 좋거나 같다.



임의 접근의 문제점은 접근하고자 하는 레코드의 시작 주소를 알아야한다는 것이다. 이를 해결하기 위해 상대 레코드 번호(Relative Record Number, RNN)을 이용한다. 상대 레코드 번호는 디스크상에서 레코드의 절대적 위치를 나타내는 것이 아니라, 레코드가 속한 파일의 시작으로부터 레코드의 위치를 나타내는 것이다. 고정 길이 레코드 방식으로 저장된 파일이라면 상대 레코드 번호를 통해 임의 접근을 충분히 구현할 수 있다. 그러나 가변 길이 레코드 방식으로 저장된 파일의 경우에는 상대 레코드 번호를 통해 레코드에 접근할 수 없기 때문에 각각의 레코드의 상대적 시작 주소를 저장한 별도의 자료구조나 파일을 이용해야 한다.