[Allegro] Mysteriöse Variable

Thomas Berger ThB at Gymel.com
Do Mai 3 12:01:30 CEST 2012


Lieber Herr Eversberg,

>> Der "Normalzustand" waere, dass Ergebnismengen (find, family, ...)
>> aus existierenden internen Datensatznummern bestehen (Verhalten bei
>> "ungenutzten" Satznummern derzeit noch etwas unklar). Beim Zugriff
>> auf einen Datensatz (implizit bzw. "f1nd", "get", ...) wird
>> dieser Datensatz in einem konsistenten Zustand (Locking auf
>> Betriebssystemebene evtl. notwendig) eingelesen.
> 
> Also bei  f1nd  mit Locking, bei  find  nicht!? Na gut, das ginge.

NEIN. Ich habe mich bemueht, die allegro-Operationen als
.TBL-Sperre und Datensatz-Sperre zu bezeichnen. Implementiert
werden muessen sie mit Hilfe des Betriebssystems, dem
(Range)-Locking.

Konkret bezog ich mich im zitierten Absatz darauf, dass es
beim reinen Lesen eines Datensatzes Concurrency-Probleme
geben /kann/, eben weil die allegro-Mechanismen nur exklusive
Sperren kennen und es viel zu teuer waere, jeweils die
gesamte Datenbank zu sperren bloss weil man einen Datensatz
oder einen Indexeintrag lesen will.

D.h. es ist moeglich, einen Satz ("spontan", ohne Tests auf
.TBL und anderes) einzulesen, obwohl gerade ein anderer
Prozess / ein anderer Arbeitsplatz eine Schreiboperation
durchfuehrt, womoeglich auf denselben Datensatz. Wird der
Satz dabei umgespeichert, ist alles harmlos (der von mir
gelesene ist in der naechsten Millisekunde auch nicht anders
veraltet als wenn ich ihn eine Millisekunde frueher
eingelesen haette). Wird er hingegen /nicht/ umgespeichert,
kann es sein, dass mir das Betriebssystem den Anfang des
Datensatzes in der alten Version liefert und das Ende -
nach Unterbrechung durch den schreibenden Prozess - in
der neuen Version. Gegen diese Moeglichkeit hat allegro
m.W. noch gar keine Schutzmechanismen, eine Moeglichkeit
waere, stets umzuspeichern, die andere, Range-Locks des
Betriebssystems auf die einschlaegigen .TBL-Bytes
durchzufuehren, die dritte wie gesagt, auch jegliches
Lesen durch .TBL-Sperren der Gesamten Datenbank zu
schuetzen (oder durch Datensatzsperren, die wiederum
mittels .TBL-Sperren implementiert sind)

viele Gruesse
Thomas Berger



Mehr Informationen über die Mailingliste Allegro