Einzelnen Beitrag anzeigen

Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#12
  Alt 15. Feb 2003, 22:47
Moin Luckie,

also ich hab' so etwas noch etwas anders gelöst, nämlich mit der Aufteilung in eine Daten und eine Indexdatei (eben auch "DB like").
In der Indexdatei stehen dann, im Wesentlichen, jeweils der Offset innerhalb der Datendatei, und ein Feld als Flag, das anzeigt, ob der Satz am Offset gültig ist, oder, z.B. gelöscht.

Als Header für die Daten kämen, in Deinem Falle, zwei Felder für die Längen der beiden Felder (Titel und Text) in Frage.

Wird jetzt ein Text/Titel geändert, kannst Du, anhand des gesamt zur Verfügung stehenden Platzes für den Datensatz, entscheiden, ob Du ihn überschreiben kannst (length(Titel)+Length(Text) <= Vorige Länge) oder nicht.
In letzterem Falle wird der Datensatz hinten an die Datendatei angehängt (FileStream.Position := FileStream.Size).
Nun kannst Du in der Indexdatei entweder dem alten Satz den neuen Offset verpassen, und einen neuen Indexsatz mit dem alten Offset und der Markierung "frei oder gelöscht" schreiben, oder aber einen neuen Indexsatz mit dem neuen Offset und auf den alten Indexsatz wird das Flag entsprechend gesetzt.

Durch diese Trennung hast Du den Vorteil, dass Du schnell auf die Sätze zugreifen kannst, ohne Dich mit den Längenfeldern durch die ganze Datei hangeln zu müssen. Gerade bei Texten können die ja grösser ausfallen.
Ausserdem liessen sich bei einer Kennung "frei" ggf. auch Lücken für neue/geänderte Sätze nutzen.

Nachteil: Gelegentlich müsste die Datei komprimiert werden, um den, durch Änderungen nicht mehr genutzten Platz freizugeben.

In der Indexdatei könntest Du dann z.B. auch noch eine ID des Satzes anlegen (Hash Code), oder den Index als verkettete List aufbauen.

Es dürfte, zumindest wenn die Datei grösser wird, wohl schneller gehen die Indexdatei durchzugehen und gezielt einen Satz aus der Datendatei herauszugreifen, als immer die Datendatei durchzulesen.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat