AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Szenario in einer Multi-User-Umgebung

Szenario in einer Multi-User-Umgebung

Ein Thema von khh · begonnen am 5. Dez 2008 · letzter Beitrag vom 6. Dez 2008
Antwort Antwort
Seite 1 von 2  1 2   
khh

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

Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19: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
mkinzler
(Moderator)

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:04
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.
Markus Kinzler
  Mit Zitat antworten Zitat
khh

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:13
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
Karl-Heinz
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:16
Diese kannst du per SET Generator <Generatorname> TO <Wert>; setzen.
Markus Kinzler
  Mit Zitat antworten Zitat
khh

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:21
Zitat von mkinzler:
Diese kannst du per SET Generator <Generatorname> TO <Wert>; setzen.

gute Idee, dann brauch ich in meiner Tabelle Nummernkreise, die Werte gar nicht selbst verwalten.
Karl-Heinz
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:27
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
khh

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 19:33
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.
Karl-Heinz
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Szenario in einer Multi-User-Umgebung

  Alt 5. Dez 2008, 20:13
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? ) sowie eine ebenfalls vorhandene Objektpersistenz (auch das habt ihr sicherlich gemacht) keine große Hürde darstellt.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: Szenario in einer Multi-User-Umgebung

  Alt 6. Dez 2008, 01:19
Zitat von khh:
Zitat von mkinzler:
Diese kannst du per 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. 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
Gruß
Hansa
  Mit Zitat antworten Zitat
khh

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

Re: Szenario in einer Multi-User-Umgebung

  Alt 6. Dez 2008, 07:35
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
Karl-Heinz
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 15:40 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