AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi "Ich sperre, also bin ich"
Thema durchsuchen
Ansicht
Themen-Optionen

"Ich sperre, also bin ich"

Ein Thema von mfrank · begonnen am 23. Nov 2009 · letzter Beitrag vom 28. Nov 2009
Antwort Antwort
mfrank

Registriert seit: 7. Okt 2006
26 Beiträge
 
Turbo Delphi für Win32
 
#1

"Ich sperre, also bin ich"

  Alt 23. Nov 2009, 18:12
Datenbank: Firebird • Version: 2.1 • Zugriff über: ZEOS 6.6.5
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
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.167 Beiträge
 
Delphi 12 Athens
 
#2

Re: "Ich sperre, also bin ich"

  Alt 23. Nov 2009, 18:41
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mfrank

Registriert seit: 7. Okt 2006
26 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: "Ich sperre, also bin ich"

  Alt 23. Nov 2009, 19:01
Hallo,

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

Michael
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: "Ich sperre, also bin ich"

  Alt 24. Nov 2009, 06:55
Wobei bei FireBird dank der Architektur, Sperren oft überflüssig sind.
Markus Kinzler
  Mit Zitat antworten Zitat
alex517

Registriert seit: 23. Nov 2004
Ort: Bernau b. Berlin
273 Beiträge
 
Delphi XE5 Enterprise
 
#5

Re: "Ich sperre, also bin ich"

  Alt 24. Nov 2009, 07:22
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
Alexander
  Mit Zitat antworten Zitat
mannewolff

Registriert seit: 21. Okt 2008
48 Beiträge
 
RAD-Studio 2009 Arc
 
#6

Re: "Ich sperre, also bin ich"

  Alt 24. Nov 2009, 16:10
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.
  Mit Zitat antworten Zitat
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.029 Beiträge
 
Delphi XE3 Enterprise
 
#7

Re: "Ich sperre, also bin ich"

  Alt 24. Nov 2009, 16:55
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
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: "Ich sperre, also bin ich"

  Alt 28. Nov 2009, 18:39
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz