ISAM steht für Indexed Sequential Access Method.
ISAM ist eine von IBM Ende der 1960er Jahre entwickelte Zugriffsmethode für Datensätze einer Datei, die sowohl (sortiert) sequentiellen als auch wahlfreien (random) index-basierten Zugriff zulässt.
Eine Datei kann mehrere verschiedene Indices haben. Jeder Index definiert eine unterschiedliche Reihenfolge der Datensätze, je nach dem, welche Informationen gesucht werden. Beispielsweise kann zu einer Kundendatenbank alphabetisch nach dem Nachnamen oder numerisch nach der Postleitzahl sortiert werden, sofern entsprechende Indices existieren.
Die indexsequentielle Zugriffsmethode, die auch in Datenbanksystemen Verwendung findet, vefügt über ein hohes Maß an Flexibilität bei der Definition des Zugriffs. Durch diese Flexibilität läßt sich die Zugriffsgeschwindigkeit aufgabenabhängig optimieren. Seit den ersten Standards von COBOL um 1979 ist ISAM im File-Control Paragraphen ansatzweise Teil des Standards der COBOL-Sprache. Eine sehr frühe Weiterentwicklung von ISAM, ebenfalls von IBM, aber nicht standardisiert, ist VSAM.
Speicherstruktur
Die Datensätze sind in Blöcken oder Seiten zusammengefaßt. Ein einfacher Index verweist auf den niedrigsten Schlüssel eines Datenblockes. Eine einfache, einstufige Indexdatei besteht aus Indexeinträgen, die auf Datenblöcke verweisen. Innerhalb eines Datenblockes sind die Sätze aufsteigend sortiert.
Beispiel in COBOL
Das nebenstehende Bild zeigt den File-Control Paragraphen für eine ISAM-Datei eines modernen COBOL-Compilers:
- SELECT ... ASSIGN TO: Zuordnung externer Dateiname zu internem Dateiname
- WITH COMPRESSION | WITH ENCRYPTION: optional mit Kompression bzw. Verschlüsselung
- ORGANIZATION IS INDEXED
- ACCESS MODE IS SEQUENTIAL | RANDOM | DYNAMIC: alternativ eine der drei Zugriffsmethoden. Sequentiell, über Index oder beides, d.h. mal über Index, ab diesem Startpunkt sequentiell und umgekehrt.
- RECORD KEY IS key-name [= seg-name ...] [ WITH [NO] DUPLICATES ] ] ...: Der (primäre) Schlüssel kann aus mehreren Segmenten, d.h. einzlnen Feldern des Datensatzes bestehen, doppelte Schlüssel können erlaubt sein. Die Felder, von denen auch nur Teile als (Teil-) Index verwendet werden können, sind - wie in COBOL üblich - in der FILE DESCRIPTION zu definieren.
- ALTERNATE RECORD KEY IS ...: weitere Indices können definiert werden.
- LOCK MODE IS EXCLUSIVE | AUTOMATIC | MANUAL ...:
- RESERVE {number} ALTERNATE AREA:
- COLLATING SEQUENCE IS alphabet-name: