In einer Multithread -Anwendung besteht eine gute Praxis darin, die Komponenten des Zugriffs auf die Datenbank zu isolieren. Der Verstoß gegen diese Praxis kann unter anderem Zugriffsverletzungsfehler generieren. Um dieses Problem zu lösen, hat Emcharchadero die Komponente FDManager zur Verfügung gestellt, die für die Definition und Verwaltung von Verbindungen verantwortlich ist und Thread-Safe ist (sichere Verwendung in Multithread-Umgebungen).
Quelle: https://docwiki.embarcadero.com/radstudio/sydney/en/multithreading_(fiedac)
Vorteile der Verwendung von FDManager
Bibliotheksdefinition Kundenzugriff auf die Datenbank. [Optional]
Zentralisierung von Verbindungseinstellungen mit der Datenbank.
Zentralisierung von Parametrisierungen der TFDConnection -Komponente. (Diese Konfiguration erstreckt sich auf alle in der Anwendung verwendeten FDConnection)
Zusätzlich zur Verwendung von FDManger eine gute Praxis und die Verwendung der Technik zur Optimierung der Datenbankverbindung, die als Verbindungspool bezeichnet wird.
Wenn wir einen Betrieb in einer Datenbank ausführen müssen, ist es zunächst erforderlich, eine Verbindung damit herzustellen. Die Herstellung dieser Verbindung erfolgt normalerweise über das TCP/IP -Protokoll, das die Kosten für das Öffnen und Schließen der Verbindung umfasst. Diese Kosten sind in Webanwendungen besonders von Bedeutung, bei denen Sie einen Fluss von Tausenden von konstanten Anfragen haben können, und jedes erzeugt das Öffnen und Schließen der Datenbankverbindung. Eine einfache Technik, um dieses konstante "Ficken" von Verbindungen zu vermeiden, besteht darin, eine bestimmte Anzahl von Verbindungen immer geöffnet zu halten (einen Verbindungspool ) und einfach bei Bedarf wiederverwenden, sodass Sie sowohl die ausgegebene Ressource der Maschine als auch Ihre Anwendungsantwortzeit verringern.
Diese Kosten für die Erstellung einer Datenbankverbindung finden Sie im Bild unten mit dem Wireshark -Tool. Wir können die Anzahl der Pakete sehen, mit denen eine einfache Auswahl durchgeführt wird.
Wir können im Bild unter dem Verhalten von Datenbankabfragen mithilfe von Connections Pool sehen:
Um einen Verbindungspool zu konfigurieren, verwenden wir den FDManager und die Pooleigenschaften.
| Parameter | Beschreibung | Beispiel |
|---|---|---|
| Gepoolt | Aktiviert den Verbindungspool für einen ConnectionDefname, der in fdmanager.ConnectationNdefs informiert ist. Um einen Verbindungspool zu verwenden, muss die Verbindungsdefinition hartnäckig oder privat sein. | WAHR |
| Pool_Cleanuptimeout | Die Zeit in Millisekunden, bis FireDac Verbindungen beseitigt , die erst bis Pool_expiretimeout -Zeit verwendet wurden. Der Standardwert beträgt 30000 ms (30 Sekunden). | 15000 ms 15 s |
| Pool_expiretimeout | Die Zeit in Millisekunden, nach der die inaktive Verbindung aus dem Pool ausgeschlossen und zerstört werden kann. Der Standardwert beträgt 90000 ms (90 Sekunden). | 60000 ms 60 s |
| POOL_MAXIMUMEMTES | Die maximale Anzahl von Verbindungen im Pool. Wenn die Anwendung mehr Verbindungen erfordert, wird eine Ausnahme generiert. Der Standardwert beträgt 50. Wenn die Gesamtzahl der auf dieser Eigenschaft angegebenen Verbindungen erreicht ist, wird eine Ausnahme generiert: | 100 |
Im Allgemeinen hält der FDManager einen Pool von "physischen" Verbindungen offen, wenn:
Um FDManager mit anderen Datenbanken zu verwenden
| Datenbank | Driverid | Tfdconnendefpass | Einheiten |
|---|---|---|---|
| Microsoft SQL Server | MSSQL | TFDPHYSMSSSQLONNEONEFPASS | Firedac.phys.mssqldef, Firedac.stan.intf, Firedac.phys, Firedac.phys.odbcbase, Firedac.phys.mssql |
| Oracle Server | Jetzt | Tfdphysoracleconnecontefpass | Firedac.phys.oracledef, Firedac.stan.intf, Firedac.phys, Firedac.phys.oracle |
| PostgreSQL | Pg | Tfdphyspgconneonecendefpass | Fiedac.phys.pgdef, Firedac.stan.intf, Firedac.phys, Firedac.phys.pg; |
| MySQL Server | Mysql | Tfdphysmysqlconneonefpass | Firedac.phys.mysqldef, Firedac.stan.intf, Firedac.phys, Firedac.phys.mysql |
| IBM DB2 Server) | DB2 | Tfdphysdb2ConnectionAndefparams | Firedac.phys.db2def, Firedac.stan.intf, Firedac.phys, Firedac.phys.odbcbase, Firedac.phys.db2 |
| Firebird | Fb | TfdphysfbConneontefpass | Firedac.phys.fbdef, Firedac.stan.intf, Firedac.phys, Firedac.phys.ibbase, Firedac.phys.fb |
| Interbase | Ib | TfdphysibConneonecendefpass | Firedac.phys.ibdef, Firedac.stan.intf, Firedac.phys, Firedac.phys.ibbase, Firedac.phys.ib |
| Sqlite | Sqlite | TfdPhysSQLiteConnectionAndEfParams | Fiedac.stan.exprfuncs, Firedac.phys.sqlitedef, Firedac.stan.intf, Firedac.phys, Firedac.phys.sqlite |
| MongoDb | Mongo | TfdphysMongoconneottondefpass | Firedac.phys.Mongodbdef, Firedac.stan.intf, Firedac.phys, Firedac.phys.Mongodb |
| ODBC | ODBC | TFDPHYSODBCCONNEONECENDEFPASS | Firedac.phys.odbcdef, Firedac.stan.intf, Firedac.phys, Firedac.phys.odbcbase, Firedac.phys.odbc |
An dem Projekt beigefügt, gibt es zwei Beispiele für die Verwendung der Datenbankverbindung in Multithread -Umgebungen.
1. Beispiel: Verwenden von Verbindungen in einer Multithreading -Umgebung für Desktop .
2. Beispiel: Verwenden von Verbindungen in einer Multithreading -Umgebung für Webserver mit Pferd.
Beide Beispiele verwenden die Firebird -Datenbank