索引順アクセス方式(ISAM )は、データを含むコンピュータファイルを作成、管理、操作するための方式であり、 1つ以上のキーを使用してレコードを順次またはランダムに取得できます。キーフィールドの索引を維持することで、索引付きファイル内の必要なファイルレコードを高速に取得できます。ISAMは元々 IBMがメインフレームコンピュータ向けに開発しましたが、現在ではほとんどのコンピュータシステムで実装されています。
ISAMという用語は、いくつかの関連する概念を表すために使用されます。
ISAMシステムでは、データは固定長フィールドで構成されるレコードに整理され、元々はキーの順序で順番に格納されます。インデックスと呼ばれる二次レコードセットには、各レコードの位置へのポインタが含まれており、データセット全体を検索することなく個々のレコードを取得できます。これは、他のレコードへのポインタがレコード自体に格納されていた同時代のナビゲーションデータベースとは異なります。ISAMの重要な改善点は、インデックスが小さく、高速に、場合によっては完全にメモリ上で検索できるため、データベースが必要なレコードのみにアクセスできることです。データへの追加の変更は、他のデータを変更する必要はなく、該当するテーブルとインデックスのみを変更すれば済みます。
ISAM ファイルが作成されると、インデックス ノードは固定され、その後の挿入や削除の際にそれらのポインタは変更されません (その後変更されるのはリーフ ノードの内容のみです)。この結果、リーフ ノードへの挿入がノードの容量を超えると、新しいレコードはオーバーフロー チェーンに格納されます。テーブルからの挿入が削除よりもはるかに多い場合、これらのオーバーフロー チェーンは徐々に非常に大きくなり、レコードの取得に必要な時間に影響します。[ 4 ]
ISAMフレームワーク上にリレーショナルデータベースを構築するには、テーブル間のリンクの有効性を維持するロジックを追加するだけで済みます。通常、リンクとして使用されるフィールド(外部キー)には、高速検索のためにインデックスが付けられます。これは、関連データへのポインタをレコードに直接格納するよりも処理速度は遅くなりますが、データの物理的なレイアウトが変更されてもポインタを更新する必要がなく、エントリは有効なまま維持されます。
ISAM は、主にデータベース ファイルへの直接アクセスで構成されているため、理解と実装が簡単です。トレードオフは、各クライアント マシンがアクセスする各ファイルへの独自の接続を管理する必要があることです。これにより、これらのファイルへの挿入が競合する可能性があり、データベースの状態が不整合になる可能性があります。これを防ぐために、一部の ISAM 実装[ 5 ] [ 6 ]は、ファイル全体または個々のレコードのロック機能を提供します。複数のレコードをロックすると、デッドロック防止スキームが厳密に従わない限り、デッドロックのリスクがあります。ロックとデッドロックの問題は通常、クライアント要求をマーシャリングして順序を維持するクライアント サーバーフレームワークを追加することで解決されます。一部の ISAM クライアント サーバー実装では、完全なACIDトランザクション管理システムが提供されています。 [ 5 ]これらは、基盤となるデータ ストアのクライアント レイヤーであるデータベース管理システム(DBMS) の背後にある基本的な概念です。
IBMではISAMに代わってVSAM (仮想ストレージアクセス方式)と呼ばれる方式が採用されました。その後、IBMはSQL/DSを開発し、さらにDb2を開発しました。Db2はIBMが主力とするデータベース管理システムとして推進されています。VSAMはDb2で使用される物理アクセス方式です。
OpenVMSオペレーティングシステムは、Files-11ファイルシステムとRMS(レコード管理サービス)を組み合わせて使用します。RMSは、アプリケーションとディスク上のファイルの間にレイヤーを追加することで、複数の3GLおよび4GL言語間で一貫したデータ構成とアクセス方法を提供します。RMSは、シーケンシャルアクセス、相対レコード番号アクセス、レコードファイルアドレスアクセス、インデックスアクセスという4つの異なるデータアクセス方法を提供します。
インデックスアクセス方式によるデータの読み書きは、ファイルが適切なキーを事前に定義したISAMファイルとして構成されている場合にのみ、目的の結果が得られます。事前に定義されたキーによるデータアクセスは非常に高速です。ハッシュテーブル内では、複数のキー、重複するキー、キーの圧縮がサポートされています。既存ファイル内のキーを定義/再定義するためのユーティリティが提供されています。レコードは削除できますが、「ガベージコレクション」は別のユーティリティで実行されます。
IBMのエンジニアは、最小限のコンピュータメモリを使用するようにISAMシステムを設計しました。その代償として、入出力チャネル、制御ユニット、およびディスクのビジー状態が長くなりました。ISAMファイルは、データレコードの集合と2つまたは3つのレベルのインデックスで構成されます。トラックインデックスには、インデックス付けするシリンダ上の各ディスクトラックの最大キーが含まれます。シリンダインデックスには、シリンダ上の最大キーと、対応するトラックインデックスのディスクアドレスが格納されます。オプションのマスターインデックスは、通常、大きなファイルでのみ使用され、シリンダインデックストラック上の最大キーと、そのシリンダインデックスのディスクアドレスが含まれます。ファイルがロードされると、データレコードは移動されません。挿入されたレコードは、別のオーバーフロー領域に配置されます。キーによってレコードを検索するには、複雑な自己修正チャネルプログラムによってディスク上のインデックスが検索されます。[ 7 ]これにより、チャネル、制御ユニット、およびディスクのビジー時間が増加しました。後のシステムで物理メモリと仮想メモリのサイズが大きくなると、これは非効率的であると見なされ、メモリ使用量とディスクアクティビティのトレードオフを変更するためにVSAMが開発されました。
ISAM が自己修正チャネル プログラムを使用したことで、後にCP-67によるOS/360のサポートに問題が生じた。CP-67 は I/O 操作が開始されるとチャネル プログラム全体を固定メモリにコピーし、仮想アドレスを実アドレスに変換していたためである。[ 8 ]