Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird aus Thread heraus... (https://www.delphipraxis.net/103428-firebird-aus-thread-heraus.html)

ralfiii 15. Nov 2007 16:20

Datenbank: Firebird • Version: 2.0 • Zugriff über: IBX - Interbase Express

Firebird aus Thread heraus...
 
Hallo!

Ich möchte (naja, ich muss) bei einer Anwendung aus mehreren Threads auf eine Firebird-datenbank zugreifen.
Was sollte man da performance-mässig beachten?

Die Anwendung ist ein Windows-Service das einen TCP-Server laufen hat. Bei jeder eingehenden Vebindung (etwa 1.000 bis 10.000 pro Stunde) muss sie kurz mal was in einer Firebird-Datenbank auslesen und eintragen.
(Es ist immer die gleiche Datenbank)

Es macht vermutlich sinn die Datenbank mal im Hauptthread zu öffnen, oder?
Sollten dann die Threads über Semaphore auf die Datenbank zugreifen?
Sind die IBX-Komponenten überhaupt threadsicher?
Oder sollte jeder Thread selber eine DB-Verbindung aufmachen?

Vielen Dank für eventuelle Tipps,
Ralf

Niko 16. Nov 2007 15:08

Re: Firebird aus Thread heraus...
 
Hi,

ich gehe mal davon aus, dass du pro Anfrage einen Thread erzeugst oder wiederverwendest. Von einer einzelnen Verbindung und entsprechender Synchronistation in der Anwendung die dafür sorgt, dass immer nur ein Thread auf die Verbindung zugreift, würde ich auf jeden Fall abraten. Das Transaktionssystem des Datenbankservers kann solche parallelen Anfragen im Allgemeine viel effizienter koordinieren.

Wenn jeder Thread nur sehr wenige einfache Anfragen stellt könnte es allerdings passieren, dass der Verbindungsauf- und abbau mehr Ressourcen verbraucht, als die eigentlichen Anfragen, weshalb ich einen Verbindungspool vorschlagen würde, in dem einmal geöffnete Verbindungen zwischengespeichert und bei Bedarf wiederverwendet werden. Ich kenne mich mit IBX nicht aus, aber eventuell bieten die Komponenten bereits eine solche Möglichkeit. Falls du einen Threadpool verwendest liese sich das natürlich auch damit kombinieren, in dem jeder Thread seine Verbindung offen hält solange er sich im Pool befindet.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:26 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