Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

Datensatz ohne Sekundärschlüssel

ISAM-Datensätze zeichnen sich durch einen Indexbereich aus, der in allen Sätzen einer Datei an der gleichen Stelle steht und gleich strukturiert ist. Der Indexbereich enthält immer einen Satzschlüssel, der den Satz identifiziert. Daneben kann der Index auch Markierungen enthalten, die ein Durchsuchen der Datensätze nach bestimmten Merkmalen ermöglichen. Der gesamte Indexbereich (Schlüssel + Markierungen) darf nicht länger als 255 Bytes sein.

Bild 28: Aufbau des ISAM-Index
ISAM-Schlüssel

Jeder Satz einer ISAM-Datei muss einen mindestens ein Byte langen Schlüssel besitzen. Die Position des ISAM-Schlüssels im Datensatz wird für alle Sätze der Datei in den Makros FILE und FCB (Operand KEYPOS) bzw. im Kommando ADD-FILE-LINK (Operand KEY-POSITION) festgelegt. Bei der Definition der Schlüsselposition müssen Sie das Satzformat (siehe unter „ISAM-Satzformate" (Datensatz mit Sekundärschlüsseln (NK-ISAM))) berücksichtigen.
So kann z.B. in Dateien mit variablem Satzformat der ISAM-Schlüssel erst ab der Position 5 beginnen (KEYPOS >= 5) wegen der 4 Bytes für Satzlängenfeld und Steuerinformationen.

Die Schlüssellänge wird durch den Operanden KEYLEN in FILE/FCB bzw. durch den Operanden KEY-LENGTH in ADD-FILE-LINK festgelegt. Bei der Definition der Schlüssellänge müssen Sie darauf achten, dass die maximale Indexlänge von 255 Bytes für Schlüssel plus Markierungen nicht überschritten werden darf.

Bei K-ISAM kann sich die Schlüssellänge auf die Dateigröße und auf die Performance auswirken. Da der gesamte Schlüssel in den Indexblock aufgenommen wird, hängt von der Schlüssellänge ab, wie viele Indexeinträge in einen Indexblock aufgenommen werden können.

Bei NK-ISAM optimiert das DVS durch Schlüsselkomprimierung die Anzahl der Indexeinträge im Indexblock, sodass längere Schlüssel auf im Durchschnitt 3-5 Bytes komprimiert werden können und jeder Indexblock durchschnittlich 160 Einträge enthält. Die Anzahl Indexeinträge pro Block wirkt sich wiederum aus auf die Gesamtzahl der Indexblöcke und damit auf die Anzahl der Indexstufen einer Datei und die Performance beim Zugriff auf einen Satz.

Mehrfache ISAM-Schlüssel (Duplicate Key)

Das Prinzip der ISAM-Dateiverarbeitung basiert auf eindeutigen Satzschlüsseln. Mit der Angabe DUPEKY=YES in FILE/FCB bzw. mit DUPLICATE-KEY im Kommando ADD-FILE-LINK können Sie Dateien erzeugen, in denen Satzschlüssel mehrfach auftreten können.

Beim Schreiben werden Sätze mit bereits in der Datei enthaltenen Schlüsseln stets hinter den letzten Satz mit dem gleichen Schlüssel in die Datei eingefügt. Die Anordnung von Sätzen mit gleichen Schlüsseln in einer Datei entspricht also der zeitlichen Folge, in der sie in die Datei eingefügt wurden.

NK-ISAM fügt Sätzen mit Schlüsseln, die bereits in der Datei vorkommen, einen Zeitstempel an. Durch den Zeitstempel wird die korrekte Reihenfolge der Sätze in der Datei, entsprechend dem Zeitpunkt ihrer Aufnahme, gesichert.

Sequenzielle Leseoperationen stellen die Sätze in der Reihenfolge bereit, in der sie geschrieben wurden, beim „Rückwärtslesen“ wird die Reihenfolge dementsprechend umgekehrt.

Nichtsequenzielles Lesen über den Satzschlüssel liefert immer den ersten Satz einer Satzfolge mit gleichen Schlüsseln. Die weiteren Sätze dieser Folge müssen dann sequenziell gelesen werden.

Wird bei Shared-Update-Verarbeitung von NK-ISAM-Dateien eine Satzsperre wirksam, umfasst diese Sperre alle Sätze mit dem gleichen Schlüssel.

Enthält eine ISAM-Datei viele Sätze mit gleichen Schlüsseln, kann dies zu erheblichen Performance-Verlusten führen. Bei NK-ISAM-Dateien mit sehr langen Sätzen ist darauf zu achten, dass durch das Anfügen des Zeitstempels Überlaufblöcke entstehen können.
Markierungen im ISAM-Index

Neben dem ISAM-Schlüssel können auch Wertmarkierungen oder logische Markierungen zur Suche von Sätzen verwendet werden. Diese Markierungen (Flags) folgen im ISAM-Index auf den Schlüssel, und zwar Wertmarkierung vor logischer Markierung, wenn beide Markierungsarten genutzt werden. Die Markierungen werden bei NK-ISAM nicht in den Indexeintrag übernommen, sondern intern sequenziell ausgewertet. Für den Benutzer ergeben sich bei der Verwendung markierter Sätze daher Performanceverluste, ansonsten erfolgt die Verarbeitung markierter Sätze wie bei K-ISAM.

Bei NK-ISAM erfolgt die Flagverarbeitung im Gegensatz zu K-ISAM mit erheblich niedrigerer Performance.

Mit K-ISAM werden die Markierungen in die Indexeinträge übernommen und setzen sich – als Bestandteil des ISAM-Index – in allen Indexstufen der Datei fort. Die Übernahme der Markierung in den Indexeintrag verläuft bei Wert- und logischer Markierung jedoch unterschiedlich.

Die Position der Wertmarkierung ist bestimmt durch Position und Länge des vorausgehenden Schlüssels (KEYPOS + KEYLEN), die Länge wird mit VALLEN in den Makros FILE ind FCB bzw. mit dem Operanden VALUE-FLAG-LENGTH im Kommando ADD-FILE-LINK festgelegt. Für die logische Markierung gilt entsprechend: die Position ist durch die Summe von Schlüsselposition, Schlüssellänge und Länge der Wertmarkierung bestimmt, die Länge durch den Operanden LOGLEN in den Makros FILE und FCB bzw. durch den Operanden LOGICAL-FLAG-LENGTH im Kommando ADD-FILE-LINK.

Bei der Suche eines Satzes über Wert- oder logische Markierung wird jeweils der Inhalt des markierten Bereichs der geprüften Sätze mit einem definierten Wert bzw. einer „logischen“ Bit-Maske verglichen. Das DVS stellt den Satz zur Verfügung, der als Erster den Bedingungen genügt.

Bei K-ISAM wird die Wertinformation der Indexeinträge auf Grund der vom Benutzer gemachten Angabe zu VALPROP in den Makros FILE und FCB bzw. zu PROPAGATE-VALUE-FLAG im Kommando ADD-FILE-LINK erstellt. Wird die Funktion MAX (MIN) angegeben, enthält jeder Indexeintrag die höchste (niedrigste) Wertmarkierung des Blockes der nächstniedrigeren Stufe (Daten- oder Indexblock), auf den er verweist. Ob die Weitergabe der maximalen oder minimalen Wertmarkierung sinnvoll ist, hängt ab von der Art, in der die Sätze später bereitgestellt werden sollen. Der Nutzen einer Wertmarkierung ist umso größer, je gleichmäßiger die Wertmarkierungen mit aufsteigendem ISAM-Schlüssel steigen oder fallen.

In der logischen Markierung können duale Eigenschaften des im Datensatz beschriebenen Objektes bitweise verschlüsselt werden. Alle logischen Markierungen eines Datenblocks (oder Indexblocks) werden mit der Funktion ODER verknüpft und in den (nächsthöheren) Indexeintrag weitergegeben. Das DVS kann nun bei der Suche nach Sätzen mit bestimmten Eigenschaften bereits nach Überprüfen des Indexeintrags entscheiden, ob in dem Block, auf den verwiesen wird, Sätze dieser Eigenschaft(en) vorhanden sind oder nicht.

Sind die Angaben zu VALLEN (bzw. VALUE-FLAG-LENGTH) oder LOGLEN (bzw. LOGICAL-FLAG-LENGTH) ungleich null, wird vorausgesetzt, dass es sich um eine Datei mit Markierungen handelt.
Existiert die Datei bereits (d.h. bei OPEN INPUT/INOUT/EXTEND), werden die Katalogwerte von VALPROP (bzw. PROPAGATE-VALUE-FLAG) oder VALLEN (bzw. VALUE-FLAG-LENGTH) verwendet. LOGLEN (bzw. LOGICAL-FLAG-LENGTH) muss immer angegeben werden, wenn die Datei mit einem Markierungsbereich erstellt wurde. Die Katalogwerte können nicht mit den Makros FILE / FCB oder dem Kommando ADD-FILE-LINK geändert werden.

Beispiel: Wertmarkierung

In einer Personaldatei soll das Geburtsjahr als Wertmarkierung dienen; im Katalogeintrag wurde VALPROP=MIN vereinbart. Das bedeutet: aus jedem Datenblock wird bei K-ISAM das niedrigste Geburtsjahr der darin enthaltenen Mitarbeiter-Datensätze in den Indexblock übernommen.

  • geeignete Suchfrage: Welche Mitarbeiter sind vor 1950 geboren ? – Bei der Suche können ganze Datenblöcke auf Grund der Wertmarkierung sofort übergangen werden.

  • ungeeignete Suchfrage: Welche Mitarbeiter sind nach 1950 geboren? – Es müssen alle Sätze jedes Blockes geprüft werden. Hier wäre eine Datei mit VALPROP=MAX sinnvoll.

ISAM-Satzformate

ISAM-Dateien können Sätze fester oder variabler Länge enthalten, d.h. mit Satzformat F oder V. Das Satzformat wird festgelegt im RECFORM-Operanden von FCB und FILE bzw. mit dem Operanden RECORD-FORMAT im Kommando ADD-FILE-LINK.

Gilt RECFORM=V, müssen Sie bei der Definition von Schlüsselposition und maximaler Satzlänge berücksichtigen, dass den Daten ein 4 Byte langes Feld vorangestellt wird. Bei Sätzen fester Länge (RECFORM=F) brauchen Sie dieses 4-Byte-Feld bei der Definition der Schlüsselposition nicht zu beachten. Intern stellt ISAM jedoch auch diesen Sätzen ein 4-Byte-Feld voran.

In der nachfolgenden Tabelle sind die Auswirkungen des Satzformats auf die per Makro bzw. Kommando definierte Satzlänge dargestellt.

Operand in
FILE / FCB

Operand in
ADD-FILE-LINK

Bedeutung von RECSIZE bzw. RECORD-SIZE

RECFORM=F

RECORD-FORMAT= *FIXED

Gibt die für alle Sätze gültige Länge in Bytes an

RECFORM=V

RECORD-FORMAT= *VARIABLE

Gibt die maximale Länge des Datensatzes an; standardmäßig gilt dann RECSIZE=BLKSIZE bzw. RECORD-SIZE=BUFFER-LENGTH

Tabelle 48: Auswirkungen des Satzformats auf die Satzlänge bei ISAM

Wenn (explizit oder implizit) annähernd gilt RECSIZE=BLKSIZE, können bei NK-ISAM Überlaufblöcke entstehen (siehe Abschnitt „Überlaufblock (NK-ISAM)"), was zu einer erhöhten Ein-/Ausgaberate führen kann.

Wird beim Zugriff auf existente Dateien RECSIZE bzw. RECORD-SIZE zu klein gewählt, kann dies Auswirkungen auf Leseoperationen haben: Liest das DVS einen längeren Satz, überträgt es nur die RECSIZE entsprechende Anzahl Bytes in das vom Benutzer definierte Empfangsfeld und bricht das Lesen mit einer Fehlermeldung ab. Der Benutzer kann dies in seinem Programm über entsprechende Fehlerroutinen abfangen.