Seite 1 von 1

Grundlegende Frage zu Datenbankverbindungen

Verfasst: 18. November 2009 18:02
von sea_bear
Moin moin!
Ich habe da mal eine grundlegende Frage zum Thema Datenbankverbindungen. Ich hatte mal gelernt, dass man versuchen soll, so wenig echte Verbindungen wie möglich zu einem Datenbankserver aufzubauen. In einem meiner selbst geschriebenen Qt4 Programme nutze ich zum Beispiel eine mySQL Datenbank mit 11 einzelnen Tabellen. Aufbauen tue ich aber nur eine Verbindung zum mySQL Server. Nehme ich nun zum Beispiel knoda, so wird für jede geöffnete Tabelle eine Verbindung zum mySQL Server aufgebaut. Bei 11 aktiven Tabellen habe ich dann 11 Verbindungen zu mySQL. Kann man alles sehr schön mit mytop sehen.
Ich möchte nun aber gerne auf einem Rechner mehrere Programme gleichzeitig von mir laufen lassen, welche alle auf einen mySQL Server zugreifen werden. Wenn ich für jede Tabelle der einzelnen Datenbanken jeweils eine Verbindung herstelle, werde ich ungefähr 50 Verbindungen haben. Scheint mir ein bisschen viel zu sein, vor allen da nicht ständig alle Verbindungen benötigt werden.
Was ist aber nun der bessere Weg? Was ist der Unterschied? Gibt es Geschwindigkeitsvor- / nachteile?
Irgendwie habe ich bis jetzt noch keine vernünftige Antwort im Netz zu diesen Fragen gefunden. Aber vielleicht kann mir ja jemand hier helfen.

Tobias

Verfasst: 18. November 2009 19:50
von upsala
Jede Verbindung zur Datenbank braucht Resourcen.

Im allgemeinen reicht eine Verbindung zur Datenbank aus. Der Server-Administrator wird es dir danken.

Verfasst: 18. November 2009 20:15
von sea_bear
upsala hat geschrieben:Jede Verbindung zur Datenbank braucht Resourcen.

Im allgemeinen reicht eine Verbindung zur Datenbank aus. Der Server-Administrator wird es dir danken.
So denke ich auch. Doch welchen tieferen Sinn hätten dann mehrere Verbindung zu einer Datenbank, wenn doch auch eine reicht?? Das ist ja gerade mein Problem, dass ich eben genau da keine Logik sehe.

Verfasst: 18. November 2009 20:42
von upsala
Für mich hätte max. eine 2. Verbindung in einem eigenem Thread zum synchronisieren mit einer anderen Datenbank einen Sinn.

Was die Programmierer von KNoda damit bezwecken wollte, must du schon diese fragen.
Mal davon abgesehen: Ist dieses Projekt überhaupt noch aktiv?

Verfasst: 18. November 2009 20:54
von sea_bear
upsala hat geschrieben:Für mich hätte max. eine 2. Verbindung in einem eigenem Thread zum synchronisieren mit einer anderen Datenbank einen Sinn.

Was die Programmierer von KNoda damit bezwecken wollte, must du schon diese fragen.
Mal davon abgesehen: Ist dieses Projekt überhaupt noch aktiv?
Keine Ahnung ob noch an knoda gearbeitet wird. Ich finde knoda nur sehr schön, da recht schnell. Habe leider noch nichts besseres gefunden, was mir diese Funktionen in ebenso einfacher Art und Weise zur Verfügung stellt. Lasse mich aber gerne von anderen Projekten überzeugen.

Verfasst: 19. November 2009 12:43
von RHBaum
Wenn man eine DB hat, die Transaktionen untersteutzt, und es meist max eine transaktion pro verbindung gibt, macht es Sinn fuer "mehrere" logische vorgaenge im selben programm ne eigene verbindung zu bauen (um mehrere transaktionen zu bekommen)

Ansonsten iss es manchmal nen guter trick, um mehr Last parallel auf den Datenbankserver zu legen. oft wird pro verbindung nur ein prozess gestartet ohne multithreading. Um die Rechenleistung des Servers besser auszunutzen bekommt man mit mehreren verbindungen quasi multiprozessing.
Ob das gewollt ist, oder ob der Admin Dir auf die Finger hauen woellte iss von fall zu fall unterschiedlich.
Grad in komplexen client server architekturen isses besser die Last so gut wie geht auf den server zu legen, weil man den an zentraler stelle besser kalkulieren kann .... Aber da wuerde man dann auch nen RDBMS verwenden was mit der rechenleisteung sehr gut mitskaliert (und pro connect mehrere Abfragen parallel bearbeiten kann).

Ciao ...

Verfasst: 10. Dezember 2009 16:59
von odenter
Mir fallen spontan 10 Gründe ein warum man mehr als eine Connection braucht, und das auf verscheidenen Servern MSSQL, Oracle, MySql und PostgresSql.

Alleine schon weil Funktionen der Server sich zum Teil eben auf die aktuelle Connection beziehen.

Da produziert eine Multithreaded Anwendung schonmal nur Mist, wenn nur eine Connection verwendet wird.