Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Datenbank-Connection in mehreren Threads benutzen (https://www.delphipraxis.net/201408-datenbank-connection-mehreren-threads-benutzen.html)

Neutral General 19. Jul 2019 10:02

Datenbank: Firebird • Version: 3.0 • Zugriff über: IBDAC

Datenbank-Connection in mehreren Threads benutzen
 
Hallo,

Ich bin mir nicht ganz sicher wie das aussieht, aber kann/darf man folgendes machen:

Eine Datenbank-Connection (TIBCConnection) die dauerthaft connected ist und von mehreren Threads folgendermaßen genutzt wird:
Delphi-Quellcode:
MonitorEnter(Connection);
try
  Connection.StartTransaction();
  try
    // Query
  finally
    Connection.Commit;
  end;
finally
  MonitorExit(Connection);
end;
Reicht die Absicherung über Monitor.Enter und der Start einer neuen Transaktion oder ist das trotzdem nicht (Thread-)Safe?

OlafSt 19. Jul 2019 10:23

AW: Datenbank-Connection in mehreren Threads benutzen
 
Eigentlich soll das Multithreading ja helfen, mehere Dinge parallel laufen zu lassen. Lang laufende Datenbank-Abfragen z.B.

Durch das Lock per Monitor serialisierst du diese Abfragen aber wieder - dann kannst das Threading auch weglassen.

Ergo: Funktioniert, macht aber außer größerem Aufwand genau null Sinn ;)

Neutral General 19. Jul 2019 10:40

AW: Datenbank-Connection in mehreren Threads benutzen
 
Mein Szenario ist in der Realität etwas komplexer/anders als nur mehrere Threads die ihre SQLs alle auf der gleichen Connection abfeuern.
Diese "Connection für alle" wird von jedem Thread nur 1x am Anfang genutzt, danach läuft jeder Thread unabhängig von dieser Connection und arbeitet an anderen Sachen.

Aber ist eigentlich auch egal. Es geht nur darum ob das rein technisch ohne Probleme funktioniert oder ob ich da Probleme kriegen kann.

hoika 19. Jul 2019 10:49

AW: Datenbank-Connection in mehreren Threads benutzen
 
Hallo,
ich hatte damals "gelernt", dass die Connection einmal vorhanden sein soll,
und pro Thread eine eigene/separate Transaktion gestartet werden soll.


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