Bayer Bäume
Beschreibung der ISAM Dateiverarbeitung:
========================================
Wichtig:
Die Indexdateiverarbeitung funktioniert nur mit eindeutigen
Schlüsselstrings einwandfrei ! Bei Mehrfachauftreten des
gleichen Keys, werden nur die Daten des Zuletzt bearbeteten
Keys in der Indexdatei gespeichert (wegen REWRITE !).
Alle Funktionen zur ISAM-Verarbeitung arbeiten mit
Freispeicherverwaltung, sodaß kein Speicherplatz
verschwendet wird.
Aufbau Datendatei:
==================
Pos 0: unsigned reclen Datensatzläng in Bytes
Pos 2: long recanz Anzahl gespeicherter Datensätze
Pos 6: long datfrevek Vektor auf zuletzt frei ge=
wordenen speicherbereich
Pos 8: unsigned keylen Schlüssellänge
Pos 511
...........................
Pos 512: records Datensätze ab Pos 512.
Zuletzt frei gewordenen Speicherbereich:
----------------------------------------
long datfrevek Vektor auf zuvor freigewordenen
Speicherbereich.
Beim zuallererst freigewordenen
Speicherbereich ist dieser
Pointer gleich '0'.
Bsp. :
-----
Pos 6: 762
Pos512: record
Pos562: record
Pos612: 0 Freier Speicherbereich
Pos662: record
Pos712: 612 Freier Speicherbereich
Pos762: 712 Freier Speicherbereich
An Pos 762 ist eine 712 (long-Wert) eingetragen, d.h. Pos 712 ist der
zuvor feigewordene Speicherplatz. Wird jetzt vom System ein Speicher-
platz für einen Satz gebraucht, so wird dieser Satz an Pos762 geschrieben.
Die Zahl 762 an Pos 6 wird in 712 geändert. Steht an Pos 6 (datfrevek)
eine Null, so wird der zu speichernde Datensatz ans Dateiende
geschrieben.
Aufbau Indexdatei:
==================
Pos 0: unsigned idxkeylen Länge des Indexschlüssels (in Bytes)
Pos 2: unsigned idxstufen Tiefe des B-Baumes
Pos 4: long idxwrz Vektor auf Wurzelblock
Pos 8: long idxfrevek Vektor auf zuletzt freigewordenen
Speicherbereich
Pos 2047:
...........................
Pos 2048: blocks Indexblocks
Bsp:
----
Pos 0: 20
Pos 2: 4
Pos 4: 4096
Pos 8: 12288
Pos 2048: block
Pos 4096: block Wurzel
Pos 6144: 0 Freier Speicherbereich
Pos 8192: block
Pos12288: 6144 Freier Speicherbereich
.
.
Aufbau Indexblock:
------------------
Positionen relativ zum Blockbeginn.
Pos 0: long blkvek Position des blocks in der
Indexdatei.
Pos 4: long blkvatvek Position des Vaterblocks in der
Indexdatei.
Positionen können mit lseek()
eingestellt werden
Pos 8: unsigned blkstfnr Höhe des Blocks in der Indexdatei
Pos 10: unsigned blkkeyanz Anzahl der Einträge im Indexblock.
Pos 11: Eintragungen
.
.
.
BLOCKSIZE Blockende
...........................
Aufbau einer Eintragung:
------------------------
Pos 0: string----------- Pos keylen: long Vektor
Tiefste Indexstufe: Vektor = Vektor auf datensatz in Datendatei.
Ansonsten : Vektor = Vektor auf Indexblock indem weitergesucht
werden muß [siehe auch Beschreibung
isamramsrch()]
Copyright (c) 1989-2019 Michael Ollmann