直接編成ファイル【direct access file】
概要

ファイル内の各レコードは、主キーとなる識別番号をハッシュ関数に入力して得られる物理アドレスに格納される。データを読み書きする際は先頭から順にたどる必要がなく、目的のレコードの位置を計算で直接求めてアクセスする。レコード件数が増えてもアクセス時間がほぼ一定に保たれるため、大量のレコードを扱うデータベースや即時性が求められるリアルタイム処理のシステムで用いられてきた。
これに対し、レコードを先頭から順に格納・読み取りする方式は「順編成ファイル」と呼ばれる。順編成では特定のレコードを取り出すためにファイルを先頭から走査しなければならず、件数が増えるほどアクセス時間も長くなる。直接編成はこの欠点を解消する目的で用いられる。
実装上の課題として、異なるキー値が同じ格納位置に変換される衝突(コリジョン)への対処がある。衝突が発生した場合は、連結リストでレコードを繋ぎ合わせて格納する「チェイン法」や、別のハッシュ関数を適用する「オープンアドレス法」などが用いられる。衝突の頻度はファイルの充填率が高まるほど増加し、あふれ領域の探索が必要になってアクセス速度が低下するため、効率的なハッシュ関数の選定と十分な格納領域の確保が求められる。また、データの追加や削除を繰り返すと未使用領域が発生しやすく、記憶領域を効率よく利用できない場合もある。
直接編成ファイルは、任意の位置へ物理的に直接アクセスできる磁気ディスク装置の普及によって実用的に利用できるようになった。それまで主流だった磁気テープは先頭から順にしか読み書きできなかったが、磁気ディスクの登場によって任意の位置を飛び飛びに読み書きするランダムアクセスが可能になり、この編成方式が活用されるようになった。
メインフレームや業務向けシステムでは顧客情報や商品情報の管理に広く利用され、COBOLなどの言語でもサポートされてきた。現在ではリレーショナルデータベース(RDB)の普及により、直接編成ファイルを意識する機会は少なくなったが、ハッシュインデックスやキーバリューストア(KVS)の内部構造などに共通する考え方が受け継がれている。