Seite 1 von 1

Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Montag 23. November 2020, 10:55
von Hartmannsgruber
Servus Forum,

ich hätte eine kurze allgemeine Frage zum Umgang mit Datenbanken.
Wird in einem Programm das eine Datenbank benötigt und diese regelmäßig abgefragt,
beim Programmstart eine Verbindung zum Server gestartet und so lange
mit dieser Verbindung gearbeitet bis sie nicht mehr benötigt wird, oder wird bei jedem
Zugriff eine neue Verbindung zum Server hergestellt, abgefragt und wieder geschlossen?

Lg
Benjamin

Re: Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Montag 23. November 2020, 11:07
von __deets__
Ersteres. Der Aufbau ist sonst zu teuer.

Re: Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Montag 23. November 2020, 11:12
von Sirius3
SQL-Alchemy hat einen Connection-Pool, dann ist es auch nicht teuer.

Re: Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Montag 23. November 2020, 11:27
von Hartmannsgruber
Vielen Dank für die schnellen Rückmeldungen!

Wie ist das mit "zu teuer" zu verstehen (Systemresourrcen, Geschwindigkeit)?

Re: Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Montag 23. November 2020, 11:53
von __deets__
Na viel anderes gibt’s ja nicht ;)

100 mal eine Verbindung aufbauen und 100 mal eine Anfrage sind 200 Dinge. Vs 101 Dinge wenn man nur einmal eine Verbindung aufbaut.

Es ist Standard DB Verbindungen zu poolen. Aus eben diesem Grund.

Re: Allgemeine Frage zum Umgang mit Datenbanken

Verfasst: Dienstag 24. November 2020, 11:04
von DasIch
Grundsätzlich hast du beim Aufbau einer Verbindung über ein Netzwerk immer gewisse "einmalige" Kosten die auftreten. Das sind Dinge wie TCP slow start oder der Handshake um ggfs. die TLS Verbindung aufzubauen.

Bei einer Datenbank hast du darüberhinaus noch die Situation dass mit jeder Verbindung i.d.R. einiges an Informationen verbunden ist. Je nach Datenbank hast du auch pro Verbindung einen Thread oder sogar Prozess. Die benötigen natürlich auch noch einiges an Arbeitsspeicher. Es gibt auch einige Prozesse in der Datenbank die von der Anzahl der Verbindungen abhängt.

Aus diesem Grund möchte man nicht nur vermeiden ständig neue Verbindungen zur Datenbank aufzubauen, es empfiehlt sich auch die Anzahl der Verbindungen zur Datenbank möglichst klein zu halten. Tust du dass nicht wird die Performance auch in der Regel schlechter weil deine Datenbank ohnehin durch die Anzahl der CPUs nur begrenzt Queries parallel ausführen kann, mehr Verbindungen führen dann nur zu mehr Context Switches (und anderen unerwünschten Effekten).