AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Multithreading und Datenbanken
Thema durchsuchen
Ansicht
Themen-Optionen

Multithreading und Datenbanken

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

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#1

Multithreading und Datenbanken

  Alt 5. Dez 2011, 14:39
Datenbank: FB • Version: 2.5 • Zugriff über: AnyDac
Hallo,
Im moment arbeiten wird mit AnyDac auf Firebird und MSSql server es wird wohl noch Oracle 11g und MySQL hinzukommen.
Wir verwenden kein Storedprocedures alles wird eben über Parameter und Statements abgewickelt.

Das Problem: Wie kann ich einen Multithreaded zugriff auf die Datenbank umsetzen?

Es geht darum das man evtl. 2000 Zugriffe gleichzeitig hat...und wenn alles gequeued wird kann das mal für den letzten 2000 Minuten Dauern. Andererseits weiß ich auch nicht wie ich bei 2000 gleichzeitigen schreib oder lesezugriffen so eine Datenbank Konsistent halten könnte, außer ich mache laaaaange transaktionen auf, aber ich meine gehört zu haben das lange transaktionen böse sind.


Wie macht ihr das? Queuen bis der Arzt kommt oder irgendwie multithreaden und wie?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 14:44
Wieso denkst du das du in einem laufende Prozess deiner Anwendung 20.000 gleichzeitige Zugriffe benötist?
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#3

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 14:48
nur 2000 ...so als peek
Und nun wir haben hier einen Kunden der eine Webanwendug mit 2800 Benutzern sehr stark in Anspruch nimmt.
unter anderem werden viele Berichte gleichzeitig angefordert. Wir queuen diese Vorgänge dann... und je nach Bericht kann das sehr sehr lange dauern. Es kann auch mal eine Minute oder 3 Dauern PRO Bericht in der Queue! Wobei die Datenbank der eigentliche Flaschenhals ist.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty ( 5. Dez 2011 um 14:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:07
Hmmm, das mit der Queue ist ok, aber was hat das mit den Transaktionen zu schaffen?
So ein Bericht ist doch von der Kategorie Ausgabe und der schreibt eigentlich keine Daten zurück in die DB.

Die Transaktionen helfen doch nur dabei, dass gerade die Berichte keine inkonsistenten Daten anzeigen.

Und trotz Transaktion kann ich die Daten noch lesen (nur die aktuell in der Transaktion befindlichen gehen halt nicht - logisch).

Evtl. wäre es aber sinnvoll für die Abfrage einen Snapshot von der DB anzufordern, damit alle Informationen im Bericht die gleiche Basis haben.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:13
Und trotz Transaktion kann ich die Daten noch lesen (nur die aktuell in der Transaktion befindlichen gehen halt nicht - logisch).
Dann bekommt man halt die konsistenten etwas ältern Daten (Jedenfalls bei jeder DB die das Multiversion Concurrency Control unterstützt).

Evtl. wäre es aber sinnvoll für die Abfrage einen Snapshot von der DB anzufordern, damit alle Informationen im Bericht die gleiche Basis haben.
ich würde eher schauen ob es immer ähnliche Berichte sind so das man evt. die Daten vorkomprimiert, d.h. rechenintensive daten schon Vorberechnet und in schnell abrufbare Form bereitstellt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#6

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:22
Hmmm, das mit der Queue ist ok, aber was hat das mit den Transaktionen zu schaffen?
So ein Bericht ist doch von der Kategorie Ausgabe und der schreibt eigentlich keine Daten zurück in die DB.

Die Transaktionen helfen doch nur dabei, dass gerade die Berichte keine inkonsistenten Daten anzeigen.

Und trotz Transaktion kann ich die Daten noch lesen (nur die aktuell in der Transaktion befindlichen gehen halt nicht - logisch).

Evtl. wäre es aber sinnvoll für die Abfrage einen Snapshot von der DB anzufordern, damit alle Informationen im Bericht die gleiche Basis haben.
Kann FB das? Und kann MSSQL das? und wenn ja wie geht das mit anydac?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#7

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:24
Aber Multithreading ist nicht möglich oder?
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#8

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:25
@QuickAndDirty: Das ist so eine Alles-oder-Nichts Problemstellung. Man kann schon mit ein paar Abfragen eine Datenbank dicht machen, wenn die Abfragen nicht optimiert sind. Noch besser SQL Server in einem Read/Write-Mischbetrieb, wenn keine Snapshots verwendet werden.

Prinzipiell kann Firebird mehrere Datenbankverbindungen mehr oder weniger "gleichzeitig" bedienen. Kommt halt drauf an wie viele CPUs/Cores du drinnen hast und wie schnell dein I/O-System ist. Vorausgesetzt, wir reden hier vom Firebird Classic oder SuperClassic Server, wo mehrere CPUs/Cores genutzt werden können.

Ich bezweifle, dass auch Oracle 2000 gleichzeitige physische Verbindungen, sofern diese auch etwas tun, einfach wegsteckt. Kann ich mir nicht vorstellen. Hier läuft es in der Regel dann auf ein Connection Pooling raus und wenn alles größer wird eine Architektur mit Load Balancer etc ...

Auf der Firebird Konferenz 2011 wurde eine Fallstudie vorgestellt, wo eine Firebird Datenbank mit ca. 120 GB und ~ 400 Benutzern verwendet wird. Also, technisch ist viel machbar. Kommt halt auf die Qualität des Produzierten etc ... drauf an.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:29
Ich bezweifle, dass auch Oracle 2000 gleichzeitige physische Verbindungen, sofern diese auch etwas tun, einfach wegsteckt. ...
Also wir haben Oracle schon bei einem Kunden mit einem einzigen laufen Programm und optimierten Import (Ohne Threads) so in die Knie bekommen das sich selbst der Admin nicht mehr mit den Server per Admintools verbinden konnte
Hat sich aber rausgestellt das der Server in HD-Platz-Mangel gelaufen ist ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.930 Beiträge
 
Delphi 12 Athens
 
#10

AW: Multithreading und Datenbanken

  Alt 5. Dez 2011, 15:30
ich würde eher schauen ob es immer ähnliche Berichte sind so das man evt. die Daten vorkomprimiert, d.h. rechenintensive daten schon Vorberechnet und in schnell abrufbare Form bereitstellt.
nun, dann müssten wir das gesammte Berichtswesenändern. So das wir quasi auf alte Auswertungen unangetasteter Daten zurrückgreifen könnten und nur neu entstandenen Daten auswerten um dann alles entsprechend zu kombinieren. Das wäre sicher eine nicht ganz unwesentliche Änderung des Berichtswesens...andererseits müsste ich es nicht Programmieren :=) .
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 00:34 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