![]() |
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 |
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. |
Re: Szenario in einer Multi-User-Umgebung
Zitat:
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 |
Re: Szenario in einer Multi-User-Umgebung
Diese kannst du per
SQL-Code:
setzen.
SET Generator <Generatorname> TO <Wert>;
|
Re: Szenario in einer Multi-User-Umgebung
Zitat:
gute Idee, dann brauch ich in meiner Tabelle Nummernkreise, die Werte gar nicht selbst verwalten. |
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. |
Re: Szenario in einer Multi-User-Umgebung
Zitat:
|
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. |
Re: Szenario in einer Multi-User-Umgebung
Zitat:
|
Re: Szenario in einer Multi-User-Umgebung
Zitat:
ich danke euch für eure Meinungen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:22 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 by Thomas Breitkreuz