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
Grundlegende Frage zu Datenbankverbindungen
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.upsala hat geschrieben:Jede Verbindung zur Datenbank braucht Resourcen.
Im allgemeinen reicht eine Verbindung zur Datenbank aus. Der Server-Administrator wird es dir danken.
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.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?
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 ...
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 ...
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.
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.