Einzelnen Beitrag anzeigen

khh

Registriert seit: 18. Apr 2008
Ort: Südbaden
1.903 Beiträge
 
FreePascal / Lazarus
 
#1

Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 18:02
Datenbank: firebird • Version: 2.1 • Zugriff über: ZEOS
Hallo zusammen,
folgendes Szenario:
In einer Mehrbenutzerumgebung mit, sagen wir mal, 50 Arbeitsplätzen sollen Neukunden angelegt werden.
Nun ist es ja theoretisch möglich, das an _allen_ Arbeitsplätzen zur gleiche Zeit neue Kunden angelegt werden.
Die Kundennummern die verwendet werden kommen aus einer Tabelle Nummernkreise.
Diese wird bei der Kunden-Anlage gelesen und die Kundennummer wird beim Speichern in der Tabelle Nummernkreise hochgezählt.

Wenn ich jetzt zu Beginn der Neuanlage eine Kundenummer hole, ist es ja möglich, dass an einem anderen Arbeitsplatz zur gleichen Zeit( bevor diese hochgezählt ist), eine Kundennummer angefordert wird.
Also müsste ich ich die Tabelle Nummernkreise sperren.
Wen nun aber ein Anwender den Vorgang nicht zu Ende bringt und in Urlaub geht, steh ich blöd da.
Also habe ich gedacht, ich hole die neue Nummer erst vor dem Speichern des neuen Satzes.
Dennoch besteht immer noch die Möglichkeit,dass zwei Kundennummern gleichzeitig angefordert werden.
Also sperre ich die Tabelle Nummerkreise vor dem Post und gebe sie danach wieder frei.

Die müsste sich ja in Sekundenbruchteilen abspielen.
Wie hoch ist die Wahrscheinlichkeit, bei 50 Arbeitsplätzen, dass mehrere Benutzer im gleichen Sekundenbruchteil auf die Tabelle zugreifen?

Wie würdet ihr vorgehen, die Tabelle zu sperren?

Mit Transaktionen aus der Anwendungssoftware, ( ich dachte an ein begin work, commit work, vor und nach dem Post) oder auf Datenbankseite.

Wenn auf DB-Seite, wie ist das dort am effektivsten?

Danke für eure Meinungen gruss kh
Karl-Heinz
  Mit Zitat antworten Zitat