Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Verbindungsdauer bei Datenbanken (https://www.delphipraxis.net/130506-verbindungsdauer-bei-datenbanken.html)

TheMiller 9. Mär 2009 18:20

Datenbank: MySQL • Version: 5 • Zugriff über: Zeos

Verbindungsdauer bei Datenbanken
 
Hallo,

ich benutze für mein Programm mit 10 Plugins als Backend eine MySQL-Datenbank. Das Hauptprogramm und die Plugins haben jeweils eine eigene Verbindung zur Datenbank. Das funktioniert alles bestens!

Meine Frage ist nun, wie lange so eine Verbinung bestehen bleiben soll. Soll die Verbindung immer sofort wieder geschlossen werden, oder soll die Verbindung so lange aufrecht erhalten werden, wie das jeweilige Plugin genutzt wird? Hier mal ein Beispiel aus der Kundenverwaltung:

Zitat:

Plugin wird aufgerufen. Ein Kunde wird gesucht, Datenbankverbindung wird hergestellt, führ die Query aus und schließt die Verbindung wieder. Ein weiterer Kunde wird gesucht - eine neue Verbindung wird erstellt...etc.
oder vllt so:

Zitat:

Plugin wird aufgerufen, die Datenbankverbindung wird hergestellt, Queries werden ausgeührt (wann auch immer) und beim Verlassen des Plugins wird die Verbindung geschlossen.
Es kann auch passieren, dass Daten mit Barcode eingescannt werden. So wird jedesmal eine neue Verbindung hergestellt.

Was ist nun besser? Danke!

RWarnecke 9. Mär 2009 18:42

Re: Verbindungsdauer bei Datenbanken
 
Jede neue Verbindung zur Datenbank erzeugt Traffic auf dem Netz. Ich persönlich würde beim Programmstart eine Verbindung zur Datenbank herstellen und beim Beenden des Programms diese Verbindung wieder trennen. Dazwischen kann der user so viele PlugIns laden, benutzen und wieder entladen wie er möchte.

TheMiller 9. Mär 2009 18:44

Re: Verbindungsdauer bei Datenbanken
 
Ok, so sehe ich das eigentlich auch. So dauert die Abfragen beim BarCode-Scannen auch nicht so lange. Manchmal braucht der PC auch lange, bis er zum Server connected hat. Der einzige Unterschied ist, dass bei mir jedes Plugin seine eigene Verbindung hat.

RWarnecke 9. Mär 2009 18:51

Re: Verbindungsdauer bei Datenbanken
 
Warum lässt Du die PlugIn's nicht den SQL-Befehl an die Hauptanwendung senden und die macht den Rest und gibt das Ergebnis im Plugin wieder aus.

TheMiller 9. Mär 2009 18:55

Re: Verbindungsdauer bei Datenbanken
 
Weil die Plugins alle DLLs sind, ich keinen MemoryManager verwenden will und es daher "bequemer" zu programmieren ist. An sich stellt es für mich kein Problem dar, Strings etc zwischen Exe und DLL auszutauschen nur ist es für mich wirtschaftlich nicht rentabel. Den einzigen Nutzen hätte ich in der Hinsicht, dass die DLLs kleiner wären, da die Zeos-Lib nicht mit drinsteckt - aber das ist für mich - in diesem Projekt - kein Grund.

RWarnecke 9. Mär 2009 19:01

Re: Verbindungsdauer bei Datenbanken
 
Ok, dann bleibt aus meiner Sicht ja nur die Lösung, dass Du die Datenbankverbindung herstellst, wenn die DLL geladen wird. Beim Entladen der DLL die Datenbankverbindung wieder trennst.

TheMiller 9. Mär 2009 19:04

Re: Verbindungsdauer bei Datenbanken
 
Ok, dann fange ich mal an, das Projekt umzustellen. Ich danke an dieser Stelle!

Für weitere Meinungen/Vorschläge bin ich dennoch offen!

RWarnecke 9. Mär 2009 19:12

Re: Verbindungsdauer bei Datenbanken
 
Zitat:

Zitat von RWarnecke
Warum lässt Du die PlugIn's nicht den SQL-Befehl an die Hauptanwendung senden und die macht den Rest und gibt das Ergebnis im Plugin wieder aus.

Wenn Du eh schon Dein Programm umstellen musst, dann schaue Dir doch mal dieses Tutorial an.

TheMiller 9. Mär 2009 19:17

Re: Verbindungsdauer bei Datenbanken
 
Danke, aber nach diesem Tutorial habe ich dir Plugins erstellt, ergänzt und den DLLs noch Forms gegeben ;)

mjustin 9. Mär 2009 20:32

Re: Verbindungsdauer bei Datenbanken
 
Zitat:

Zitat von DJ-SPM
Meine Frage ist nun, wie lange so eine Verbinung bestehen bleiben soll.

Bei InterBase / FireBird (neuere Versionen) ist es wegen der Transaktionsverwaltung sehr empfehlenswert, die Verbindung so kurz wie möglich geöffnet zu halten, um lang laufende Transaktionen zu vermeiden. Also z.B. nach dem Öffnen eines ClientDataSets die Verbindung sofort zu schliessen.

Wenn MySQL dieses Problem nicht hat, ist das natürlich ein Pluspunkt für MySQL :)


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