Allgemeine Frage zum Umgang mit Datenbanken

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

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
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ersteres. Der Aufbau ist sonst zu teuer.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

SQL-Alchemy hat einen Connection-Pool, dann ist es auch nicht teuer.
Hartmannsgruber
User
Beiträge: 89
Registriert: Mittwoch 15. Januar 2014, 22:30
Wohnort: Bad Kötzting
Kontaktdaten:

Vielen Dank für die schnellen Rückmeldungen!

Wie ist das mit "zu teuer" zu verstehen (Systemresourrcen, Geschwindigkeit)?
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

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).
Antworten