Im Folgenden werden die Verarbeitungseigenschaften von ISAM-Dateien beschrieben; dazu zählen auch Shared-Update-Verarbeitung und Datei-Eröffnung, die gesondert in AAbschnitt „Shared-Update-Verarbeitung" und Abschnitt „ISAM-Datei eröffnen" beschrieben werden.
Datei- und Poolkettungsname
Der Dateikettungsname verknüpft über die TFT (Task File Table) Datei und Dateisteuerblock im Programm (siehe Abschnitt „Zugriff über den Dateikettungsnamen (Link-Name)").
Soll eine NK-ISAM-Datei in Benutzer-ISAM-Pools verarbeitet werden, muss im Makro ADDPLNK mit dem Operanden POOLLNK bzw. im Kommando ADD-POOL-LINK mit dem Operanden POOL-LINK ein Poolkettungsnamen angegeben werden, der eine Verbindung zu einem ISAM-Pool herstellt. Dieser Pool kann mit dem Makro CREPOOL bzw. dem Kommando CREATE-ISAM-POOL erzeugt werden. Mit dem Makro ADDPLNK bzw. dem Kommando ADD-POOL-LINK wird dann der Poolkettungsname festgelegt. Wird weder im FILE- noch im FCB-Makroaufruf POOLLNK angegeben bzw. der Operand POOL-LINK im Kommando ADD-FILE-LINK nicht angegeben, werden NK-ISAM-Dateien in Standardpools verarbeitet. K-ISAM-Dateien können nicht in ISAM-Pools verarbeitet werden.
Mehrfachschlüssel
Sie können in den Makros FILE und FCB (Operand DUPEKY) bzw. im Kommando ADD-FILE-LINK (Operand DUPLICATE-KEY) festlegen, dass verschiedene Datensätze einer Datei identische Schlüssel enthalten können. Bei NK-ISAM versieht das DVS intern diese Sätze mit einem Zeitstempel, bei K-ISAM gibt es keinen zusätzlichen Zeitstempel.
Blockfüllung: PAD-Wert
Bei sequenzieller Dateierstellung mit PUT können Sie über den Operanden PAD in den Makros FILE und FCB bzw. über den Operanden PADDING-FACTOR im Kommando ADD-FILE-LINK bestimmen, wie viel Platz in den Datenblöcken freibleiben soll für spätere Aktualisierung. Standardmäßig gilt PAD=15, d.h. 15 % des Speicherplatzes im Datenblock bleiben frei. Wenn mit einem PUT-Aufruf diese Grenze erreicht wird, wird für den folgenden Satz ein neuer Datenblock angelegt.
Für NK-ISAM-Dateien gilt: sobald diese PAD-Grenze überschritten ist, wird ein neuer Datenblock angefordert; K-ISAM fordert einen neuen Datenblock bereits an, bevor die PAD-Grenze überschritten wird.
Beim sequenziellen Erstellen (PUT) nimmt der Platzbedarf einer Datei mit steigendem PAD-Faktor zu. Durch geeignete Wahl des PAD-Faktors lässt sich jedoch die nachfolgende Dateiverarbeitung (STORE/INSRT) optimieren: in den Datenblöcken ist so viel freier Platz
vorzusehen, dass es bei Dateierweiterungen nicht zum Blocksplitting kommt. Zur richtigen Wahl des PAD-Faktors ist also eine Prognose erforderlich, in welchem Umfang die Datei wachsen wird.
Werden ISAM-Dateien mit STORE erstellt, hat PAD keinen Einfluss auf die Blockfüllung: STORE schreibt solange Sätze in einen Datenblock, bis dieser gefüllt ist. Wird noch ein weiterer Satz geschrieben, der nicht mehr in den Datenblock passt, kommt es zum Blocksplitting; die Blöcke werden in der Regel nur zu 50 % gefüllt.
Auch wenn die Datei zwar mit PUT, aber nicht über einen Ein-/Ausgabebereich im Programm erstellt wird, ist die PAD-Angabe wirkungslos (der Ein-/Ausgabebereich wird im FCB mit IOAREAn definiert; siehe unter „Programmpuffer = Ein-/Ausgabebereich im Benutzerprogramm"). Jeder PUT-Aufruf löst eine Schreiboperation aus, und das DVS versucht, den aktuellen Satz im letzten Datenblock unterzubringen. Erst wenn dieser gefüllt ist, legt es einen neuen Datenblock an.
Überlappendes Lesen
Soll eine ISAM-Datei vorwiegend sequenziell verarbeitet werden, können Sie mit dem Operanden OVERLAP=YES im Makro FILE bzw. mit dem Operanden READ-IN-ADVANCE im Kommando ADD-FILE-LINK festlegen, dass bei jedem Leseaufruf „prophylaktisch“ auch der benachbarte Datenblock in den ISAM-Pool eingelesen wird. Auf diese Weise kann die Ein-/Ausgaberate reduziert werden. Überlappendes Lesen erfolgt sowohl beim „Vorwärts-Lesen“ (in Richtung Dateiende) als auch beim „Rückwärts-Lesen“ (in Richtung Dateianfang).
WROUT-Funktion
Die WROUT-Funktion (bzw. Write-Immediate-Funktion) steuert das Zurückschreiben geänderter Blöcke auf die Platte. Bei eingeschalteter WROUT-Funktion ist die Konsistenz der Datei auf Platte und im virtuellen Speicher zu jedem Zeitpunkt gewährleistet.
Ist WROUT nicht eingeschaltet, erfolgt ein Zurückschreiben erst dann, wenn der Inhalt des betreffenden Pufferbereichs ersetzt werden muss. Durch dieses verzögerte Zurückschreiben lassen sich Schreiboperationen auf Platte einsparen, wenn im gleichen Block mehrfach geändert wird.
In nicht taskspezifischen ISAM-Pools ist WROUT=YES voreingestellt: geänderte Blöcke werden immer sofort zurückgeschrieben. Der Benutzer kann jedoch auch mit verzögertem Zurückschreiben auf Platte arbeiten. Dazu ist sowohl im Makro CREPOOL bzw. im Kommando CREATE-ISAM-POOL als auch im Makro FILE bzw. im Kommando ADD-FILE-LINK verzögertes Zurückschreiben auf Platte zu spezifizieren.
Wird die Datei in einem taskspezifischen Benutzer-ISAM-Pool verarbeitet, kann die WROUT-Funktion bei Verwendung von Makros sowohl in FILE/FCB für die Datei als auch im CREPOOL-Makro für den Pool eingeschaltet werden. Bei Verwendung von Kommandos kann die Funktion WRITE-IMMEDIATE sowohl im Kommando ADD-FILE-LINK für die Datei als auch im Kommando CREATE-ISAM-POOL für den Pool eingeschaltet werden. Bei unterschiedlichen Angaben auf Datei- und Pool-Ebene überwiegt jeweils die Angabe, bei der die WROUT-Funktion eingeschaltet wird.
Programmpuffer = Ein-/Ausgabebereich im Benutzerprogramm
Verwendet ein Programm einen eigenen Ein-/Ausgabebereich, muss dieser mindestens die Größe eines Datenblocks haben (= n * 2048 BLKSIZE, 1 <= n <= 16) entsprechend BLKSIZE=(STD,n). Standardmäßig wird vom System ein Ein-/Ausgabebereich im Klasse-5-Speicher angelegt.
Die Existenz eines vom Benutzer in seinem Programm mit IOAREA1/2 definierten Ein/Ausgabebereichs ist vor allem bei sequenzieller Verarbeitung von ISAM-Dateien von Vorteil durch die Reduzierung von SVCs:
sequenzielles Lesen (GET/GETR): bei der ersten Leseoperation werden so viele Sätze wie möglich in den Ein-/Ausgabebereich übertragen, bevor der erste Satz dem Programm zur Verfügung gestellt wird. Bei den nachfolgenden Leseoperation werden dem Programm dann die weiteren im Ein-/Ausgabebereich vorhandenen Sätze zur Verfügung gestellt. Eine erneute Ein-/Ausgabe erfolgt erst, wenn alle Sätze gelesen sind.
sequenzielles Schreiben (PUT): bei sequenzieller Dateierstellung oder -erweiterung werden die Sätze im Ein-/Ausgabebereich gesammelt, bis er gefüllt ist (PAD-Wert wird berücksichtigt) oder die sequenzielle Verarbeitung durch Aufruf einer anderen Operation beendet wird. Es ist also darauf zu achten, dass „PUT“-Folgen nicht durch andere Aktionsaufrufe unterbrochen werden, da dann jedes Mal aus dem Inhalt des Ein-/Ausgabebereichs ein Datenblock gebildet wird und so Datenblöcke mit geringer Blockfüllung entstehen können.
Für NK-ISAM kann im Übertragungsbetrieb (Move Mode) auf den Ein-/Ausgabebereich verzichtet werden (im FCB: IOAREA1=NO). Jeder Aktionsmakroaufruf führt dann zu einem SVC.
Betriebsarten: Übertragungs-/Ortungsbetrieb
Normalerweise laufen ISAM-Aktionen im Übertragungsbetrieb (Move Mode) ab. Einige ISAM-Aktionen können auch im Ortungsbetrieb (Locate Mode) ablaufen, der über den Operanden IOREG eingestellt wird. Da dann auch die Übertragung von Sätzen in einen oder von einem Ein-/Ausgabebereich entfällt, kann dies bei sequenzieller Dateiverarbeitung zu geringfügigen Performance-Verbesserungen führen. Der Ortungsbetrieb wird bei NK-ISAM nur noch aus Kompatibilitätsgründen unterstützt. Näheres siehe Kapitel „Zugriffsmethoden".