ISAM

**색인 순차 접근 방식**(Indexed Sequential Access Method, **ISAM**)은 컴퓨터 파일의 데이터를 생성, 유지 및 조작하여 레코드를 하나 이상의 키를 통해 순차적 또는 무작위로 검색할 수 있도록 하는 방법이다. 색인 파일에서 필요한 파일 레코드를 빠르게 검색하기 위해 키 필드의 색인이 유지된다. IBM은 원래 메인프레임 컴퓨터용으로 ISAM을 개발했지만, 대부분의 컴퓨터 시스템에서 구현이 가능하다.

ISAM이라는 용어는 몇 가지 관련 개념에 사용된다.
*IBM ISAM 제품 및 그것이 사용하는 알고리즘.
*애플리케이션 개발자가 애플리케이션 프로그래밍 인터페이스를 직접 사용하여 색인을 검색하여 데이터 파일의 레코드를 찾는 데이터베이스 시스템. 대조적으로, 관계형 데이터베이스는 자동으로 색인을 선택하는 쿼리 옵티마이저를 사용한다.
*데이터에 대한 순차적 및 키 접근을 모두 허용하는 인덱싱 알고리즘. 대부분의 데이터베이스는 이 목적으로 B 트리의 변형을 사용하지만, 원래 IBM ISAM 및 VSAM 구현은 그렇지 않았다.
*가장 일반적으로, 데이터베이스의 모든 색인. 색인은 거의 모든 데이터베이스에서 사용된다.

## 구성
ISAM 시스템에서 데이터는 레코드로 구성되며, 이 레코드는 고정 길이 필드로 구성되며, 원래 키 순서로 순차적으로 저장된다. 색인으로 알려진 보조 레코드 세트는 각 레코드의 위치에 대한 포인터를 포함하여 전체 데이터 세트를 검색하지 않고도 개별 레코드를 검색할 수 있도록 한다. 이는 동시대의 탐색형 데이터베이스와는 다른데, 탐색형 데이터베이스에서는 다른 레코드에 대한 포인터가 레코드 자체 내에 저장되었다. ISAM의 주요 개선점은 색인이 작고 빠르게 검색될 수 있다는 점이다(아마도 완전히 메모리 내에서). 따라서 데이터베이스는 필요한 레코드만 접근할 수 있다. 데이터에 대한 추가 수정은 다른 데이터를 변경할 필요가 없으며, 해당 테이블과 색인만 변경하면 된다.

ISAM 파일이 생성될 때 색인 노드는 고정되며, 이후 발생하는 삽입 및 삭제 중에 포인터가 변경되지 않는다(리프 노드의 내용만 나중에 변경됨). 이로 인해 일부 리프 노드에 대한 삽입이 노드의 용량을 초과하면 새 레코드는 오버플로 체인에 저장된다. 테이블에서 삭제보다 삽입이 훨씬 많으면 이러한 오버플로 체인이 점진적으로 매우 커질 수 있으며, 이는 레코드 검색에 필요한 시간에 영향을 미친다.

관계형 데이터베이스는 테이블 간의 링크 유효성을 유지하는 논리를 추가하여 ISAM 프레임워크 위에 쉽게 구축될 수 있다. 일반적으로 링크로 사용되는 필드인 외래 키는 빠른 조회를 위해 색인화된다. 이는 관련 데이터에 대한 포인터를 레코드에 직접 저장하는 것보다 느리지만, 데이터의 물리적 레이아웃 변경 시 포인터를 업데이트할 필요가 없다는 의미이기도 하다. 즉, 항목은 여전히 유효하다.

ISAM은 주로 데이터베이스 파일에 대한 직접 접근으로 구성되므로 이해하고 구현하기 쉽다. 단점은 각 클라이언트 머신이 접근하는 각 파일에 대한 자체 연결을 관리해야 한다는 것이다. 이는 결국 해당 파일에 대한 삽입 충돌 가능성으로 이어져 일관성 없는 데이터베이스 상태를 초래한다. 이를 방지하기 위해 일부 ISAM 구현은 전체 파일 또는 개별 레코드 잠금 기능을 제공한다. 여러 레코드를 잠그면 교착 상태 방지 스키마를 엄격하게 따르지 않는 한 교착 상태 위험이 발생한다. 잠금 및 교착 상태 문제는 일반적으로 클라이언트 요청을 조정하고 순서를 유지하는 클라이언트-서버 프레임워크를 추가하여 해결된다. 일부 ISAM 클라이언트-서버 구현은 완전한 ACID 트랜잭션 관리 시스템을 제공한다. 이들은 기본 데이터 저장소 위에 있는 클라이언트 계층인 데이터베이스 관리 시스템(DBMS)의 기본 개념이다.

ISAM은 IBM에서 VSAM(가상 기억 접근 방식)이라는 방법론으로 대체되었다. 그 후 IBM은 SQL/DS를 개발했고, 이어서 Db2를 개발하여 IBM의 주요 데이터베이스 관리 시스템으로 홍보하고 있다. VSAM은 Db2에서 사용되는 물리적 접근 방식이다.

## OpenVMS
OpenVMS 운영 체제는 Files-11 파일 시스템을 RMS(레코드 관리 서비스)와 함께 사용한다. RMS는 애플리케이션과 디스크의 파일 사이에 추가 계층을 제공하여 여러 3GL 및 4GL 언어에 걸쳐 일관된 데이터 구성 및 접근 방식을 제공한다. RMS는 순차적, 상대 레코드 번호 접근, 레코드 파일 주소 접근 및 색인 접근의 네 가지 데이터 접근 방법을 제공한다.

데이터를 읽거나 쓰는 색인 접근 방식은 파일이 적절하게 이전에 정의된 키를 가진 ISAM 파일로 구성된 경우에만 원하는 결과를 제공한다. 이전에 정의된 키를 통한 데이터 접근은 매우 빠르다. 여러 키, 중복 키 및 해시 테이블 내의 키 압축이 지원된다. 기존 파일에서 키를 정의/재정의하는 유틸리티가 제공된다. 레코드를 삭제할 수 있지만, "가비지 컬렉션"은 별도의 유틸리티를 통해 수행된다.

## 설계 고려 사항
IBM 엔지니어는 최소한의 컴퓨터 메모리를 사용하도록 ISAM 시스템을 설계했다. 그 대가로 입출력 채널, 제어 장치 및 디스크는 더 바쁘게 유지되었다. ISAM 파일은 데이터 레코드 컬렉션과 두세 수준의 색인으로 구성된다. 트랙 색인은 색인하는 디스크 트랙의 각 디스크 트랙에 대한 가장 높은 키를 포함한다. 실린더 색인은 실린더에서 가장 높은 키와 해당 트랙 색인의 디스크 주소를 저장한다. 대개 대용량 파일에만 사용되는 선택적 마스터 색인은 실린더 색인 트랙에서 가장 높은 키와 해당 실린더 색인의 디스크 주소를 포함한다. 파일이 로드되면 데이터 레코드는 이동되지 않으며, 삽입된 레코드는 별도의 오버플로 영역에 배치된다. 키로 레코드를 찾기 위해 디스크의 색인은 복잡한 자체 수정 채널 프로그램으로 검색된다. 이는 채널, 제어 장치 및 디스크의 사용 시간을 증가시켰다. 이후 시스템에서 물리적 및 가상 메모리 크기가 증가하면서 이는 비효율적인 것으로 간주되어 메모리 사용량과 디스크 활동 간의 절충점을 변경하기 위해 VSAM이 개발되었다.

ISAM의 자체 수정 채널 프로그램 사용은 나중에 CP-67의 OS/360 지원에 어려움을 초래했다. CP-67은 I/O 작업이 시작될 때 전체 채널 프로그램을 고정 메모리로 복사하고 가상 주소를 실제 주소로 변환했기 때문이다.

## ISAM 스타일 구현
* Advantage Database Server 데이터베이스 관리자
* 버클리 DB
* Btrieve
*FairCom DB
*C-ISAM
* DataFlex 독점 데이터베이스
* DBASE 및 관련 제품 클리퍼 및 Foxpro
* 디지털 이큅먼트 코퍼레이션 레코드 관리 서비스
* Enscribe는 HP Tandem의 구조화된 파일 접근 방식
* Extensible Storage Engine
* 마이크로소프트 액세스에서 사용되는 액세스 데이터베이스 엔진(ACE 및 이전의 JET)
* MySQL은 ISAM을 MyISAM으로 구현 및 확장
* 패러독스
*pblIsam C로 작성된 GPL 구현
* 슈퍼베이스 데이터베이스 제품군
* DBM 및 평면 파일 데이터베이스 연동

## 같이 보기
* 순차 접근 메모리
* NoSQL
* DBM (컴퓨팅)

## 각주

분류:파일 시스템