索引順次アクセス方式( ISAM ) は、コンピュータ ファイルのデータを作成、維持、および操作する方法であり、レコードを 1 つ以上のキーで順次またはランダムに取得できます。キー フィールドのインデックスは、索引付きファイル内の必要なファイル レコードを高速に取得できるように維持されます。IBMは当初、メインフレーム コンピュータ用に ISAM を開発しましたが、ほとんどのコンピュータ システムで実装できます。
ISAMという用語は、いくつかの関連する概念に使用されます。
- IBM ISAM製品とそれが採用するアルゴリズム。[1]
- アプリケーション開発者がアプリケーションプログラミングインターフェイスを直接使用してインデックスを検索し、データファイル内のレコードを検索するデータベースシステム。対照的に、リレーショナルデータベースは、インデックスを自動的に選択するクエリオプティマイザーを使用します。[2]
- データへのシーケンシャルアクセスとキーアクセスの両方を可能にするインデックスアルゴリズム。[3]ほとんどのデータベースはこの目的でBツリーの何らかのバリエーションを使用していますが、オリジナルのIBM ISAMおよびVSAM実装ではそうしていませんでした。
- 最も一般的には、データベースのインデックスです。インデックスはほぼすべてのデータベースで使用されます。
組織
ISAM システムでは、データは固定長フィールドで構成されるレコードに編成され、元々はキー シーケンスで順番に格納されていました。インデックスと呼ばれる 2 次レコード セットには、各レコードの場所へのポインターが含まれており、データ セット全体を検索しなくても個々のレコードを取得できます。これは、他のレコードへのポインターがレコード自体に格納されていた同時ナビゲーション データベースとは異なります。ISAM の主な改善点は、インデックスが小さく、高速に検索でき、場合によっては完全にメモリ内で検索できるため、データベースは必要なレコードにのみアクセスできることです。データへの追加の変更では、他のデータを変更する必要はなく、問題のテーブルとインデックスのみを変更します。
ISAM ファイルが作成されると、インデックス ノードは固定され、その後に挿入や削除が行われてもそのポインタは変化しません (その後はリーフ ノードの内容のみが変化します)。この結果、あるリーフ ノードへの挿入がノードの容量を超えると、新しいレコードがオーバーフロー チェーンに格納されます。テーブルからの挿入が削除よりも多い場合、これらのオーバーフロー チェーンは徐々に大きくなり、レコードの取得に必要な時間に影響します。[4]
リレーショナル データベースは、テーブル間のリンクの有効性を維持するためのロジックを追加することで、ISAM フレームワーク上に簡単に構築できます。通常、リンクとして使用されるフィールド (外部キー)は、迅速な検索のためにインデックス化されます。これは、関連データへのポインターをレコードに直接保存するだけの場合よりも遅くなりますが、データの物理レイアウトが変更されてもポインターを更新する必要がなく、エントリは引き続き有効になります。
ISAM は、主にデータベース ファイルへの直接アクセスで構成されているため、理解と実装が簡単です。ただし、各クライアント マシンは、アクセスする各ファイルへの接続を独自に管理する必要があります。これにより、それらのファイルへの挿入が競合する可能性が生じ、データベースの状態が不整合になります。これを防ぐために、一部の ISAM 実装[5] [6]では、ファイル全体または個々のレコードのロック機能を提供しています。複数のレコードをロックすると、デッドロック防止スキームに厳密に従わない限り、デッドロックのリスクがあります。ロックとデッドロックの問題は通常、クライアント要求を整理して順序を維持するクライアント サーバーフレームワークを追加することで解決されます。一部の ISAM クライアント サーバー実装では、完全なACIDトランザクション管理システムが提供されています。 [5]これらは、基盤となるデータ ストア上のクライアント層で あるデータベース管理システム(DBMS)の基本的な概念です。
IBM では、ISAM はVSAM (仮想ストレージ アクセス メソッド)と呼ばれる方法論に置き換えられました。その後、IBM はSQL/DS を開発し、その後IBM が主要なデータベース管理システムとして推進しているDb2 を開発しました。VSAM は Db2 で使用される物理アクセス メソッドです。[引用が必要]
オープンVMS
OpenVMSオペレーティング システムは、RMS (レコード管理サービス) と組み合わせて Files-11 ファイル システムを使用します。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データベース マネージャー
- バークレーDB
- Btrieve
- フェアコムDB [5]
- C-ISAM
- DataFlex独自データベース
- dBaseおよび関連製品ClipperおよびFoxpro
- デジタル・イクイップメント・コーポレーション レコード管理サービス
- EnscribeはHP Tandemの構造化ファイルアクセス方式です
- 拡張可能なストレージエンジン
- Microsoft Accessで使用されるAccess データベース エンジン(ACE、旧 JET)
- MySQLはISAMをMyISAMとして実装し拡張しています。
- パラドックス
- pblIsam C言語で書かれたGPL実装[9]
- Superbase データベースファミリー
- dbm DBMとフラットファイルデータベースが連携して動作する
参照
- シーケンシャル アクセス メモリ(SAM)
- 仮想記憶アクセス方式(VSAM)
- フラットファイル
- ノーSQL
- 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 ページ
- ^ abc 「FairCom ISAM API for C - 開発者ガイド」。
- ^ 「C-ISAM プログラマーズマニュアル」(PDF)。
- ^ 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 . 2018年1月8日閲覧。
- ^ Graf, Peter. 「pblIsamFile 実装」. mission-base.com . 2017 年9 月 8 日閲覧。
