Registriert seit: 5. Jun 2011
Ort: Chemnitz
1 Beiträge
Delphi 2010 Professional
|
AW: Multiuser mit C-API
5. Jun 2011, 22:13
Man muss Datensätze nicht zwingend sperren, um Datensalat zu vermeiden.
Die typische vorgehensweise ist ja in der Regel die folgende:
1. Benutzer erhält Datensatz zur Anzeige (1 Sekunde)
2. Benutzer führt Änderungen durch (3 Minuten)
3. Benutzer speichert Daten (1 Sekunde)
Für Schritt zwei wird üblicherweise die meiste Zeit benötigt - nämlich genau so viel, wie der Benutzer benötigt, um sich Daten auszudenken und einzugeben. Probleme treten auf, wenn während Schritt zwei in der Datenbank Änderungen vonstatten gehen.
Doch statt diese Veränderungen zu verhindern, könnte man versuchen, mit ihnen umzugehen. Benutzer führen Änderungen in der Regel nicht vor lauter Langeweile, sondern weil etwas wichtige ansteht, durch. Vor einem gesperrten Datensatz zu stehen resultiert in Frust.
Eine Möglichkeit ist, während Schritt eins den Zustand des Datensatzes beiseite zu legen. Anschließend lässt man den Benutzer seine Eingaben machen. Im dritten Schritt vergleicht man, vor dem Speichern, den aktuellen Zustand des Datensatzes wie er aktuell in der Datenbank liegt, mit dem Abbild im Zwischenspeicher aus Schritt eins. Falls zwischen den beiden ein Unterschied besteht, wurde in der Zwischenzeit von einem weiteren Benutzer eine Änderung vorgenommen.
Den Vergleich kann man auch mit Hilfe eines Zeitstempels, Hashs oder eines x-beliebigen, zufälligen Codes, welcher bei jeder Veränderung am Datensatz gespeichert wird, vornehmen.
An dieser Stelle gibt es nun vielfältigste Möglichkeiten der Behandlung:
A) Den vom Benutzer bearbeiteten Datensatz verwerfen und den neuen Stand aus der Datenbank erneut zur Bearbeitung vorlegen.
B) Den Benutzer nach dem weiteren Vorgehen befragen: Verwerfen oder Überschreiben?
C) Eine komfortable Oberfläche zur Zusammenführung der beiden Stände bereitstellen.
In der Regel wird nicht ein Benutzer einen Auftrag freigeben, während ein anderer ihn storniert. Ich behaupte mal, es sind meist Änderungen, die problemlos gemeinsam existieren und somit durch ein intelligentes System zusammengeführt werden können.
Conrad
|