Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi [Indy] TidTCPServer und Datenbank Zugriff (https://www.delphipraxis.net/145948-%5Bindy%5D-tidtcpserver-und-datenbank-zugriff.html)

Win32.API 11. Jan 2010 11:57

Datenbank: MySQL • Version: 5.5 • Zugriff über: noch garnicht

[Indy] TidTCPServer und Datenbank Zugriff
 
Hallo,

ich bin dabei eine Client-Server-Anwendung zu planen und stehe nun vor der Frage, ob ich fuer jeden Client eine eigene Datenbank-Verbindung erstellen soll (bei Indy wird fuer jeden Client ein eigener Thread erstellt) oder eine globale Verbindung erstelle und alle Zugriffe auf diese schuetze.

Zu den Anforderungen an den Server:
  • Es koennen mehrere 100 Clients gleichzeit connecten
  • Beim connecten werden pro Client ca 10 Queries ausgefuerht
  • Bei Anfragen an den Server _kann_ unter Umstaenden auch aus der DB gelsen werden muessen
  • Loggin findet auch ueber die DB statt

Hat jemand Erfahrung mit solchen Szenarien? Welche Komponenten sind fuer den Zugriff auf MySQL Datenbanken zu empfehlen? Hatte Data Access Components for MySQL von Devart ins Auge gefasst.


--Win32.API

Astat 11. Jan 2010 15:17

Re: [Indy] TidTCPServer und Datenbank Zugriff
 
Zitat:

Zitat von Win32.API
..ich bin dabei eine Client-Server-Anwendung zu planen und stehe nun vor der Frage, ob ich fuer jeden Client eine eigene Datenbank-Verbindung erstellen soll

Ja, ist allgemein üblich.

Zitat:

Zitat von Win32.API
..bei Indy wird fuer jeden Client ein eigener Thread erstellt

In solchen Szenarien arbeitet man Serverseitig mit Workerthreads.
D.h. die eingehenden Clientconnections (Sockets) werden durch diese abgearbeitet.
Dadurch ist eine gute Skallierung, auch bei hunderten gleichzeitigen Zugriffe möglich.
Als Faustregel gilt, 8 Workerthreads pro CPU.
Beim Indy IdTCPServer, gibt es die Einstellung "MaxConnections" und auch einen Threadmanager.
Wie diese genau zu handhaben sind, kann ich dir leider nicht beantworten.

Zitat:

Zitat von Win32.API
oder eine globale Verbindung erstelle und alle Zugriffe auf diese schuetze.

Würde ich nicht empfehlen, weil dadurch keine Skallierung möglich ist.


lg. Astat

Win32.API 11. Jan 2010 16:12

Re: [Indy] TidTCPServer und Datenbank Zugriff
 
Hallo Astat,

danke fuer Deine Antwort.

Zitat:

Zitat von Astat
In solchen Szenarien arbeitet man Serverseitig mit Workerthreads.
D.h. die eingehenden Clientconnections (Sockets) werden durch diese abgearbeitet.
Dadurch ist eine gute Skallierung, auch bei hunderten gleichzeitigen Zugriffe möglich.
Als Faustregel gilt, 8 Workerthreads pro CPU.
Beim Indy IdTCPServer, gibt es die Einstellung "MaxConnections" und auch einen Threadmanager.
Wie diese genau zu handhaben sind, kann ich dir leider nicht beantworten.

An Workerthreads habe ich auch schon gedacht, aber konnte leider keinerlei Informationen ueber Indy und Threadmanager/Threadpools finden.


Grueße,
Win32.API

Astat 11. Jan 2010 18:14

Re: [Indy] TidTCPServer und Datenbank Zugriff
 
Zitat:

Zitat von Win32.API
An Workerthreads habe ich auch schon gedacht, aber konnte leider keinerlei Informationen ueber Indy und Threadmanager/Threadpools finden.

Hallo Win32.API, in der DP sind einige hoch karätige INDY Entwickler zu hause, zB. "Assertor".

Tip: Erstell einen neuen Thread unter (Internet und Netzwerk) mit diesem konkreten Problem.
Sollte sich dann sicher jemand finden lassen, der Dir weiterhelfen kann.

lg. Astat


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