Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Von diversen Threads SQL Abfragen auf eine MySQL Datenbank (https://www.delphipraxis.net/56449-von-diversen-threads-sql-abfragen-auf-eine-mysql-datenbank.html)

DataCool 5. Nov 2005 19:52

Datenbank: MySQL • Version: 5.0.6 • Zugriff über: ZEOS

Von diversen Threads SQL Abfragen auf eine MySQL Datenbank
 
Hi Leute,

ich schreibe gerade an einem Windows-Dienst, der als Middleware arbeitet.
D.H. diverse Clients stellen an meinen Dienst anfragen, dieser verarbeitet die Anfragen in unterschiedlichen Threads, diese suchen das Ergebnis aus der DB(anderer Server), und liefern es aufbereitet an die Clients zurück.

Zur Zeit verwende ich für den Zugriff auf die Datenbank-Komponenten von Zeos, allerdings scheint es bei den Zeos so zu seien, das sie extreme Probleme mit Multi-Thread Zugriff hat.

Die gleichen Querys laufen mal durch mal nicht, meistens kommt die Fehlermeldung "Connection Lost during query".

Jetzt meine Frage, hat jemand schonmal mit ähnlichen Problemen zu kämpfen ? Wie habt Ihr sie gelöst ?


Desweiteren bin ich gerade dabei zu überlegen, ob ich anstatt der Zeos auf DirectSQL umsteige, was meint Ihr dazu ?

emsländer 5. Nov 2005 20:33

Re: Von diversen Threads SQL Abfragen auf eine MySQL Datenba
 
Die besten Erfahrungsn habe ich mir mysql.pas gemacht (einfach mal hier im Forum nach suchen)


Gruss

EL

Bernhard Geyer 6. Nov 2005 11:58

Re: Von diversen Threads SQL Abfragen auf eine MySQL Datenba
 
Zitat:

Zitat von DataCool
Jetzt meine Frage, hat jemand schonmal mit ähnlichen Problemen zu kämpfen ? Wie habt Ihr sie gelöst ?

Das Problem ist ein Grunsätzliches Problem von VCL-Controls da diese nicht Thread-Save sind (Sprich: Zugriff auf ein Control von einem anderen Thread als dem wo das Control erzeugt wird ist nicht immer sicher). Ich denke dein Problem läßt sich lößen wenn auch deine Connection im Thread erzeugt wird.

DataCool 6. Nov 2005 18:48

Re: Von diversen Threads SQL Abfragen auf eine MySQL Datenba
 
Hi,

es geht aber um einen Dienst, der keine Controls hat(gar keine GUI).
Desweiteren habe ich nicht einen Thread, sondern N-Threads(Indy Tcp-Server).
Also muss die Connection Global und Threadsave seien.
Zeos packt das definitiv nicht !
DirectSQl probiere ich gerade, das sieht bis jetzt ganz gut aus.

Gruß Data

DataCool 7. Nov 2005 14:10

Re: Von diversen Threads SQL Abfragen auf eine MySQL Datenba
 
Hi,

für alle zur Info, erste Stress-Tests haben bis jetzt noch keiner Fehler ergeben, die Komponenten von :

DirectMySQL :

DirectMySQL

kann ich nur jedem ans Herz legen, vor allen weil die Performance anscheinend wesentlich besser ist als die von Zeos. Desweiteren ist der RAM Verbrauch im Vergleich zu den Zeos auch wesentlich geringer.

Als einzige wichtige Information bleibt zu erwähnen, das es in der Unit "uMySqlClient" im Create der Klasse TMySqlClient, einen Schalter für die Thread-Sicherheit gibt.

Delphi-Quellcode:
  {$DEFINE HAVE_THREADSAFE} // wurde von mir jetzt hinzugefügt, um die Thread-Sicherheit zu gewährleisten.
  {$IFDEF HAVE_THREADSAFE}
  if IsMultiThread then
    begin
      FCriticalSection:= TCriticalSection.Create;
      FThreaded:= true;
    end;
  {$ENDIF}
Gruß Data


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 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-2025 by Thomas Breitkreuz