[Allegro] Probleme mit A99 V. 29.4

Bernhard Eversberg ev at biblio.tu-bs.de
Mo Mai 11 08:29:24 CEST 2009


Heinrich Allers schrieb:
> 
> Die Logik, der die Aktualisierung der Registerschlüssel bei einer 
> Datensatz-Bearbeitung folgt, ist meiner Erinnerung nach in etwa die 
> folgende: das Programm ermittelt und merkt sich die Registerschlüssel, 
> die sich laut Indexparameterdatei _vor_ der Bearbeitung ergeben. _Nach_ 
> der Bearbeitung tut es das Gleiche und vergleicht die festgestellten 
> Registerschlüssel mit den von vor der Bearbeitung und wird nur dann 
> tätig (im Sinne der Löschung des "Registerschlüssels vorher" und des 
> Eintragens von "Registerschlüssel nachher"), wenn es einen Unterschied 
> zwischen "Registerschlüssel vorher" und "Registerschlüssel nachher" 
> feststellen kann.

Genauso ist das, und zwar "vorher" - "nachher" aufgrund der aktuellen
Indexparameter. Denn die älteren kennt das Programm zu dem Zeitpunkt
nicht mehr.
Wem das zu abstrakt ist, möge sich mal fragen, was eigentlich passiert,
wenn man F7 drückt. "Nun", denkt da so manche(r), "da sucht halt das
Progrämmle im Index all die Zeilen von dem Satz und zeigt einem die! Es
filtert also quasi den Index und zeigt nur die Einträge mit der Nummer
des aktuellen Satzes!"

Ja, so _KÖNNTE_ es das machen, das Progrämmle. Aber wie lange würde das
wohl dauern, wenn der Index zig Millionen Einträge hätte? Das könnte
auch der schnellste Rechner nicht in Sekundenbruchteilen schaffen, doch
F7 reagiert immer sofort, ohne jede Verzögerung. Also muß es wohl bei F7
irgendwie anders arbeiten!? So ist es, und zwar nimmt es die
Indexparameter her, die sind schon beim Start geladen worden, und
arbeitet sie ab. Dabei kommen die Einträge raus, die sich eben aus den
Vorschriften der aktuellen Indexparameter ergeben. Das geht immer
gleich schnell, weil kein einziger Zugriff auf die Register nötig ist.
(Daß es so ist, sieht man auch daran, daß bei F7 auch schon diejenigen
Einträge aufscheinen, die man gerade durch eine Änderung am Satz
erwirkt hat, wenn der Satz jedoch noch gar nicht gespeichert ist.
Sonst könnten die nicht erscheinen. EIn Blick in den Index _vor_ der
Speicherung des Satzes zeigt, daß dort noch keine Änderung vorliegt.

M.a.W., das Programm _kann_ gar nicht wissen, welche unnötigen (d.h. zu
den aktuellen Parametern nicht mehr passenden) Einträge in den Registern
noch schlummern. Wenn die Indexparameter geändert wurden, muß man
neu indexieren, anders wird man diese Einträge nicht los, dann aber
dauerhaft. Wenn nicht, haben die Parameter einen Fehler, nicht das
Programm.

Gut, OK, nicht jede(r) will das alles wissen müssen. Wissen ist immerhin
aber ein gutes Mittel gegen Fehlvorstellungen. Davon gibt es eine Menge,
nicht nur im allegro-Umfeld...

B.E.





Mehr Informationen über die Mailingliste Allegro