003
25.04.2006, 18:14 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
hi, bei einem alten programm ging das so:
data.idx data.db
index sah "umgewandelt" in etwa so aus:
nr offset nr offset nr offset nr offset nr offset
die .db sah dann halt so aus:
nr data nr data nr data nr data nr data nr data
Wenn ein neuer datensatz hinzugefügt wird, wird die idx durchlaufen bis ein "freier" platz gefunden ist (nr = 0) bzw ein neuer angehängt. in der db wird entweder das offset des nicht benutzten datensatzs benutzt oder halt auch eben hinten angehängt.
Wenn du nun einen datensatz löscht musste "nur"
db-datensatz nullen (also satz mit 0en überschreiben), ist sauberer, dann nr in der index mit 0 überschreiben. Fertig.
Das suchen nach einem Datensatz läuft dann über die "kleine" idx die selbst bei 10000 einträgen höchstens auf 1-2kb anschwillt.
Es empfiehlt sich jedoch ne Routine zur "Reorganisation" einzubauen, die dann die Datendateien komplett neu schreibt, also in 2 tempfiles aus den daten diese sortiert schreibt, und dann die alten löscht und die neuen wieder umbenennt. -- class God : public ChuckNorris { }; |