Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi "Ich sperre, also bin ich" (https://www.delphipraxis.net/143790-ich-sperre-also-bin-ich.html)

mfrank 23. Nov 2009 18:12

Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS 6.6.5

"Ich sperre, also bin ich"
 
Hallo,

nachdem ich als Einzelnutzer auf eine Datenbank zugreifen kann, möchte ich einen Mehrnutzerzugriff
ausprobieren. Nach etwas googeln habe ich auch etwas gefunden, was sehr interessant klingt:
"Ich sperre, also bin ich" in Entwickler 2003 Ausgabe 6. Leider gibt es dies nicht mehr nachzubestellen.
Vielleicht kann mir hier jemand weiterhelfen.

Vielen Dank und viele Grüße

Michael

himitsu 23. Nov 2009 18:41

Re: "Ich sperre, also bin ich"
 
Was dort drinsteht weiß ich nicht, aber hoika hatte schonmal 2 gute Vorschläge gemacht

http://www.delphipraxis.net/internal...=854092#854092


hier wurde es auch schonmal diskutiert
http://newsgroups.derkeiler.com/Arch.../msg00043.html

mfrank 23. Nov 2009 19:01

Re: "Ich sperre, also bin ich"
 
Hallo,

diese Beiträge habe ich schon gefunden - im ersten steht ja auch der Hinweis
auf den "Entwickler".

Michael

mkinzler 24. Nov 2009 06:55

Re: "Ich sperre, also bin ich"
 
Wobei bei FireBird dank der Architektur, Sperren oft überflüssig sind.

alex517 24. Nov 2009 07:22

Re: "Ich sperre, also bin ich"
 
Hallo Michael,

bevor du anfängst Datensätze zu sperren, solltest du
dich mit der Multi-Generationen-Architektur und dem
Transaktionsmanagement von Firebird vertraut machen.
Wenn du das verstanden hast, wirst du feststellen,
dass Sperren von Datensätzen unter Firebird eher die
Ausnahme bilded als die Regel.
Damit möchte ich nicht behaupten das Sperren nicht
notwendig sind. Aber das Wissen um die MGA und Transaktionen
sind Voraussetzung für den Einsatz von Sperren.

Alex

mannewolff 24. Nov 2009 16:10

Re: "Ich sperre, also bin ich"
 
Na ja, Transaktionen helfen ja nicht bei dem Problem der Nebenläufigkeit. Ein Rollback der Datenbank ist außerdem keine Lösung für den Nutzer, nur für die Konsistenz der Datenbank. Optimistischer Lock ist da die Lösung. Es gibt ein Version-Feld in jeder Tabelle. Mit jedem Update wird das Version-Feld um 1 erhöht. Hast Du einen Datensatz mit der Version x dann ist das Update (pseudo code)

Lesen eines Objekts (einer Tabellenspalte)
merken der version in x
..
update tabelle set a=b where version = x;
on error
Benutzer informieren, dass sich Datensatz geändert hat
neuen Datensatz lesen
neuen Datensatz anzeigen

Das Update geht schief, wenn jemand zwischen Lesen und Schreiben etwas geändert hat, weil die Version der Datenbanktabelle dann nicht mehr x sondern >x ist.

mschaefer 24. Nov 2009 16:55

Re: "Ich sperre, also bin ich"
 
Moin, moin,

irgendwie findet man bei fast jeder Diskussion zu dem Datensatzsperren den Unsinn,

das 1. "technisches Sperren" für die Datenbankkonsistenz
das 2. "Bearbeitungssperren" für garantiert einmalige Datenversion

vermischt werden. Da der Artikel sich mit dem 2. Problem beschäftigt wäre es sicher
Hilfreich auf die Diskussion über das FB-Versioning hier zu verzichten.


Leider fehlt FB hier eine Abfragemöglichkeit ob ein Datensatz derzeit pessimistisch gesperrt ist. Das wird manchmal mit einem Dummypost auf den zu bearbeitenden Datensatz gelöst. Dabei kracht es nach dem Post oder eben nicht. Hat so eine Tabelle zum Beispiel ein Blob-Feld wird allerdings erst mal mit einer größeren Datenmenge geworfen, was nicht wirklich glücklich ist.

Als Workaround beschreibt
der Artikel die Verwendung einer Sperrtabelle, wobei die Datensatz ID des zu sperrenden Datensatzes in die Tabelle vor Bearbeitung eingetragen wird (könnte auch noch User, Sperrdauer, usw. hinzukommen). Danach wird der Datensatz der Bearbeitungstabelle unter pessimistischem Locking geöffnet und erst nach dem abschließenden Post wird der Eintrag aus der Sperrtabelle genommen. Damit können andere Clients vor Datenzugriff die Sperrtabelle abfragen und einen Datensatz nicht zur Benutzung freigeben. Genaugenommen müssten jetzt wartende Clients noch benachrichtigt werden, dass der Datensatz jetzt verfügbar ist. Dafür war der Artikel aber einige Jahre zu früh unterwegs, heute ist FB da weiter.

Grüße // Martin

hoika 28. Nov 2009 18:39

Re: "Ich sperre, also bin ich"
 
Hallo,

Zitat:

könnte auch noch User, Sperrdauer, usw. hinzukommen
Das ist hier noch Wert zu sagen.

Eine Meldung ala "Rechnung Nr. XXX wird gerade von Frau Meier bearbeitet"
ist doch schon sehr anwenderfreundlich.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz