索引順次アクセス方式(ISAM )は、コンピュータデータファイルの作成、維持、および操作を行う方式であり、 1つ以上のキーによってレコードを順次またはランダムに取得できます。キーフィールドのインデックスは、索引ファイル内の必要なファイルレコードを高速に取得するために維持されます。ISAMは当初、IBMがメインフレームコンピュータ向けに開発しましたが、ほとんどのコンピュータシステムで実装可能です。
ISAMという用語は、いくつかの関連する概念に使用されます。
- IBM ISAM製品とそれが採用するアルゴリズム。[ 1 ]
- アプリケーション開発者がアプリケーションプログラミングインターフェース(API)を用いて直接インデックスを検索し、データファイル内のレコードを特定するデータベースシステム。これに対し、リレーショナルデータベースはクエリオプティマイザを用いてインデックスを自動的に選択する。[ 2 ]
- データへのシーケンシャルアクセスとキーアクセスの両方を可能にするインデックスアルゴリズム。[ 3 ]ほとんどのデータベースはこの目的でBツリーの何らかのバリエーションを使用していますが、オリジナルのIBM ISAMとVSAMの実装ではそうしていませんでした。
- 最も一般的には、データベースのインデックスを指します。インデックスはほぼすべてのデータベースで使用されます。
構成
ISAMシステムでは、データは固定長フィールドで構成されるレコードに編成され、元々はキー順に順番に格納されていました。インデックスと呼ばれる二次レコードセットには、各レコードの位置へのポインタが含まれており、データセット全体を検索することなく個々のレコードを取得できます。これは、他のレコードへのポインタがレコード自体に格納されていた同時ナビゲーションデータベースとは異なります。ISAMの主な改善点は、インデックスが小さく、高速に検索できることです。場合によっては完全にメモリ内で検索できるため、データベースは必要なレコードのみにアクセスできます。データへの追加の変更は、他のデータの変更を必要とせず、該当するテーブルとインデックスのみを変更します
ISAMファイルが作成されると、インデックスノードは固定され、その後の挿入や削除によってそのポインタは変化しません(リーフノードの内容のみが変化します)。この結果、あるリーフノードへの挿入がノードの容量を超えると、新しいレコードはオーバーフローチェーンに格納されます。テーブルへの挿入が削除よりも多くなると、これらのオーバーフローチェーンは徐々に大きくなり、レコードの取得にかかる時間に影響を与えます。[ 4 ]
リレーショナルデータベースは、テーブル間のリンクの有効性を維持するためのロジックを追加することで、ISAMフレームワーク上に簡単に構築できます。通常、リンクとして使用されるフィールド(外部キー)には、迅速な参照のためにインデックスが設定されます。これは、関連データへのポインタをレコードに直接保存するよりも遅くなりますが、データの物理的なレイアウトが変更されてもポインタを更新する必要がなく、エントリの有効性が維持されることを意味します。
ISAM は、主にデータベース ファイルへの直接アクセスで構成されているため、理解と実装が簡単です。ただし、トレードオフとして、各クライアント マシンがアクセスする各ファイルへの接続を個別に管理する必要があります。これにより、それらのファイルへの挿入が競合する可能性が生じ、データベースの状態が矛盾する可能性があります。これを防ぐために、一部の ISAM 実装[ 5 ] [ 6 ]では、ファイル全体または個別のレコードのロック機能を提供しています。複数のレコードをロックすると、デッドロック防止スキームに厳密に従わない限り、デッドロックのリスクがあります。ロックとデッドロックの問題は通常、クライアントの要求を整理して順序を維持するクライアント サーバーフレームワークを追加することで解決します。一部の ISAM クライアント サーバー実装では、完全なACIDトランザクション管理システムが提供されています。 [ 5 ]これらは、基盤となるデータ ストア上のクライアント層であるデータベース管理システム(DBMS)の基本概念です。
IBMでは、ISAMはVSAM (仮想記憶アクセス方式)と呼ばれる方式に置き換えられました。さらにその後、IBMはSQL/DSを開発し、その後IBMが主力データベース管理システムとして推進しているDb2を開発しました。VSAMはDb2で使用される物理アクセス方式です。
OpenVMS
OpenVMSオペレーティングシステムは、Files-11 ファイルシステムを RMS (レコード管理サービス) と組み合わせて使用します。RMSは、アプリケーションとディスク上のファイルの間に追加のレイヤーを提供し、複数の 3GL および 4GL 言語間で一貫したデータ編成とアクセス方法を提供します。RMS は、シーケンシャルアクセス、相対レコード番号アクセス、レコードファイルアドレスアクセス、インデックスアクセスという 4 つの異なるデータアクセス方法を提供します。
データの読み取りまたは書き込みにおけるインデックスアクセス方式は、ファイルが適切な事前定義されたキーを持つISAMファイルとして構成されている場合にのみ、目的の結果をもたらします。事前定義されたキーを使用したデータへのアクセスは非常に高速です。複数のキー、重複するキー、およびハッシュテーブル内のキー圧縮がサポートされています。既存ファイルのキーを定義/再定義するためのユーティリティが提供されています。レコードを削除することも可能ですが、「ガベージコレクション」は別のユーティリティによって実行されます。
設計上の考慮事項
IBMのエンジニアは、ISAMシステムを最小限のコンピュータメモリを使用するように設計しました。そのトレードオフとして、入出力チャネル、制御装置、およびディスクのビジー状態が長くなりました。ISAMファイルは、データレコードの集合と2つまたは3つのレベルのインデックスで構成されています。トラックインデックスには、インデックス付けするシリンダ上の各ディスクトラックの最上位キーが含まれています。シリンダインデックスには、シリンダ上の最上位キーと、対応するトラックインデックスのディスクアドレスが格納されます。オプションのマスターインデックスは、通常は大きなファイルにのみ使用され、シリンダインデックストラックの最上位キーとそのシリンダインデックスのディスクアドレスが含まれています。ファイルがロードされると、データレコードは移動されず、挿入されたレコードは別のオーバーフロー領域に配置されます。キーでレコードを見つけるために、ディスク上のインデックスは複雑な自己更新型チャネルプログラムによって検索されます。[ 7 ]これにより、チャネル、制御装置、およびディスクのビジー時間が増加しました。後のシステムで物理メモリと仮想メモリのサイズが増加すると、これは非効率的であると見なされ、メモリ使用量とディスクアクティビティのトレードオフを変更するために VSAMが開発されました
ISAMの自己書き換えチャネルプログラムの使用は、後にOS/360のCP-67サポートに困難をもたらした。これは、CP-67がI/O操作の開始時にチャネルプログラム全体を固定メモリにコピーし、仮想アドレスを実アドレスに変換するためである。[ 8 ]
ISAMスタイルの実装
- Advantage Database Serverデータベースマネージャー
- Berkeley DB
- Btrieve
- フェアコムDB [ 5 ]
- C-ISAM [ 9 ]
- DataFlex独自のデータベース
- dBaseと関連製品ClipperおよびFoxPro
- デジタル・イクイップメント・コーポレーションレコード管理サービス
- EnscribeはHP Tandemの構造化ファイルアクセス方式です。
- 拡張ストレージエンジン
- Microsoft Accessで使用されるAccessデータベースエンジン(ACE、旧JET)
- MySQLはISAMをMyISAMとして実装し拡張しています。
- パラドックス
- pblIsam C言語で書かれたGPL実装[ 10 ]
- Superbase データベースファミリー
- dbm DBMとフラットファイルデータベースが連携して動作する
参照
参考文献
- ^ Chin, YH (1975). 「VSAMの空き領域挙動の分析」.第1回国際超大規模データベース会議(VLDB '75)の議事録. pp. 514– 515. doi : 10.1145/1282480.1282529 . ISBN 9781450318181. S2CID 11082747 .
- ^ Bogue, Robert L. (2004-02-13). 「ISAMデータベースとリレーショナルデータベースの違いを探る」 . 2014年10月17日閲覧
- ^ Larson, Per-Åke (1981). 「オーバーフロー連鎖を持つインデックスシーケンシャルファイルの解析」 . ACM Transactions on Database Systems . 6 (4): 671– 680. doi : 10.1145/319628.319665 . S2CID 16261748 .
- ^ Ramakrishnan Raghu, Gehrke Johannes - データベース管理システム、McGraw-Hill Higher Education (2000)、第2版 (en) 252ページ
- ^ a b c「FairCom ISAM API for C – 開発者ガイド」。
- ^ 「C-ISAMプログラマーズマニュアル」(PDF) 。 2021年7月21日時点のオリジナル(PDF)からアーカイブ。 2021年7月21日閲覧。
- ^ IBM Corporation (1973). DOS/VS LIOCS 第3巻: DAM および ISAM ロジック. pp . 63–72 . 2018年12月30日閲覧。
- ^ IBM Corporation (1972). IBM Virtual Machine Facility /370: Planning Guide (PDF) . p. 45. 2022年10月25日時点のオリジナル(PDF)からアーカイブ。 2018年1月8日閲覧。
- ^ 「RDBMSワークショップ:Informix」(PDF)(インタビュー)。ルアンヌ・ジョンソンによるインタビュー。コンピュータ歴史博物館。2007年6月12日。 2025年5月30日閲覧。
- ^ Graf, Peter. 「pblIsamFileの実装」 . mission-base.com . 2017年9月8日閲覧。