Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Szenario in einer Multi-User-Umgebung (https://www.delphipraxis.net/125411-szenario-einer-multi-user-umgebung.html)

khh 5. Dez 2008 18:02

Datenbank: firebird • Version: 2.1 • Zugriff über: ZEOS

Szenario in einer Multi-User-Umgebung
 
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

mkinzler 5. Dez 2008 18:04

Re: Szenario in einer Multi-User-Umgebung
 
Verwende Generatoren für die Kundenkreise oder arbeite mit Locks
Zum Thema Transaktionen ist Zeos als Zugriffskomponente nicht so geeignet, da hier nur Softcommits unterstützt werden.

khh 5. Dez 2008 18:13

Re: Szenario in einer Multi-User-Umgebung
 
Zitat:

Zitat von mkinzler
Verwende Generatoren für die Kundenkreise oder arbeite mit Locks
Zum Thema Transaktionen ist Zeos als Zugriffskomponente nicht so geeignet, da hier nur Softcommits unterstützt werden.


Du meinst ein Lock auf Datenbankebene?
Wie mach ich das mit den Generatoren aus der Anwendung raus.
Der Anwender, sprich Betreiber, soll ja die entsprechenden Nummernkreise festlegen könnnen,
z.B. Kundennummern beginnen mit 100 000 oder mit 10 000 oder mit 1.

Gruss KH

mkinzler 5. Dez 2008 18:16

Re: Szenario in einer Multi-User-Umgebung
 
Diese kannst du per
SQL-Code:
SET Generator <Generatorname> TO <Wert>;
setzen.

khh 5. Dez 2008 18:21

Re: Szenario in einer Multi-User-Umgebung
 
Zitat:

Zitat von mkinzler
Diese kannst du per
SQL-Code:
SET Generator <Generatorname> TO <Wert>;
setzen.


gute Idee, dann brauch ich in meiner Tabelle Nummernkreise, die Werte gar nicht selbst verwalten.

SirThornberry 5. Dez 2008 18:27

Re: Szenario in einer Multi-User-Umgebung
 
Spricht etwas dagegen das die 50 Clients gar nicht direkt an der Datenbank arbeiten sondern du einen Server dazu baust und einzig dieser direkt auf der Datenbank arbeitet?
Das hat den Vorteil das du im Server das ganze absichern kannst und das nicht auf jedem Client die Zugangsdaten für die Datenbank hinterlegt werden mit denen man im schlimmsten Fall die Datenbank zerstören kann.

khh 5. Dez 2008 18:33

Re: Szenario in einer Multi-User-Umgebung
 
Zitat:

Zitat von SirThornberry
Spricht etwas dagegen das die 50 Clients gar nicht direkt an der Datenbank arbeiten sondern du einen Server dazu baust und einzig dieser direkt auf der Datenbank arbeitet?
Das hat den Vorteil das du im Server das ganze absichern kannst und das nicht auf jedem Client die Zugangsdaten für die Datenbank hinterlegt werden mit denen man im schlimmsten Fall die Datenbank zerstören kann.

ist sicher eine Überlegung wert, wobei dies dann auch wieder die Gesamtkalkulation des Projekts beeinflusst.

alzaimar 5. Dez 2008 19:13

Re: Szenario in einer Multi-User-Umgebung
 
Ehrlich gesagt sollte eine Multiuseranwendung immer über eine Mittelschicht laufen. Wenn das die Kalkulation sprengt, ist die Kalkulation falsch.
Dessenungeachtet ist eine Mehrschichtanwendung nicht notwendigerweise komplexer, da die ohnehin vorgenommene Trennung von Funktion und Darstellung (habt ihr doch, gelle? :zwinker: ) sowie eine ebenfalls vorhandene Objektpersistenz (auch das habt ihr sicherlich gemacht) keine große Hürde darstellt.

Hansa 6. Dez 2008 00:19

Re: Szenario in einer Multi-User-Umgebung
 
Zitat:

Zitat von khh
Zitat:

Zitat von mkinzler
Diese kannst du per
SQL-Code:
SET Generator <Generatorname> TO <Wert>;
setzen.


gute Idee, dann brauch ich in meiner Tabelle Nummernkreise, die Werte gar nicht selbst verwalten.

Langsam geht mir das mit den Generatoren auf den Keks. :mrgreen: Auch ohne Zeos laufen die Generatoren völlig außerhalb jeglicher Transaktionssteuerung. Da gibts kein Commit und auch kein SoftCommit oder Rollback. Der Wert, der da drin steht, der steht drin und fertig. Und die dann noch in Multiuser Umgebungen verwenden ? Mann, mann :wall:

khh 6. Dez 2008 06:35

Re: Szenario in einer Multi-User-Umgebung
 
Zitat:

Zitat von alzaimar
Ehrlich gesagt sollte eine Multiuseranwendung immer über eine Mittelschicht laufen. Wenn das die Kalkulation sprengt, ist die Kalkulation falsch.

ich hab ja nicht gesagt, dass das die Kalkulation "sprengt"

ich danke euch für eure Meinungen


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.
Seite 1 von 2  1 2      

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