Wann Connection schließen?

2 Antworten

Wenn Du die Connection nicht mehr brauchst. Normalerweise (ohne nun die genauen Umstände zu kennen) sagt man: Da das Öffnen und Schließen jeweils Zeit und Ressourcen braucht, das Offenhalten aber die Gefahr von Verbindungsabbrüchen birgt, sollte man einen Mittelweg finden zwischen dem Offenhalten oder Neuaufbauen der Verbindung.

Wenn Du viele Datenbankabfragen machst, dürfte das Offenhalten über mehrere Befehle hinweg (oder gar über Transaktionen hinweg) deutlich mehr Sinn ergeben und Geschwindigkeit bringen, als für jedes Statement eine Verbindung zu öffnen.

Bei Anfragen an REST-Services wird hingegen normalerweise eine Verbindung pro Aufruf gemacht.

Bei anderen Netzwerkdiensten kann man versuchen, die Verbindung offenzuhalten - allerdings ist das Erkennen, ob die Verbindung serverseitig abgebrochen wurde nicht immer trivial. Da bietet sich eventuell auch das Öffnen und Schließen an.


iNeedHelp961 
Beitragsersteller
 19.07.2022, 12:13

Die Verbindung wird halt onCommand gebraucht. Also in Minecraft gibt ein User etwas ein und ich muss dann in der Datenbank danach suchen. Weiß nicht wie geil es ist, bei 200 Usern oder so dann noch immer eine Verbindung zu öffnen/schließen.

0
schnfz  19.07.2022, 12:49
@iNeedHelp961
Weiß nicht wie geil es ist, bei 200 Usern oder so dann noch immer eine Verbindung zu öffnen/schließen.

In solchen Fällen verwendet man natürlich einen zentralen Connection Pool, der sich um die Verbindungen kümmert. Statt einfach eine einzige Verbindung als static-Variable zu halten...:-/

1
iNeedHelp961 
Beitragsersteller
 26.07.2022, 13:01
@schnfz

Aber soweit ich weiß kann SQLite nur 1 Connection (Weil die Datei gelockt wird während eine Query da ist). Aber die Queries brauchen halt nur 0,1 Sekunden oder sowas. Vielleicht währe hier wohl MySQL mit einem Array aus Connections wirklich das schlauste.

0

Der Verbindungsaufbau ist eine teure Operation, daher sollte man die Verbindung nicht pausenlos aufbauen und kurz darauf wieder abbauen. Wenn du für einige Zeit die Datenbankverbindung immer mal wieder brauchst, kannst du die Verbindung auch offen lassen.

Es gibt auch den Ansatz einen Connection Pool anzulegen:

Unter einem Connection Pool versteht man in der Softwaretechnik einen Cache von bestehenden Datenbankverbindungen, der für Anfragen verwendet wird. Da die Einrichtung einer neuen Verbindung zur Datenbank Zeit kostet und Rechnerressourcen bindet (z. B. im Rahmen einer Webanwendung), wird nicht für jede Anfrage eine neue Verbindung erstellt. Stattdessen wird eine Verbindung aus dem Connection Pool verwendet. Connection Pools verbessern so die Geschwindigkeit der Ausführung und reduzieren den Ressourcenverbrauch. [Wikipedia]

iNeedHelp961 
Beitragsersteller
 19.07.2022, 14:08

Ich verstehe, sozusagen ein Array aus Connections und ich nehme mir eine. Mir wurde allerdings gesagt, SQLite ist nicht so happy wenn man mehrere Connections hat und es gibt auch Bugs. Außerdem ist die Datei so lange blockiert bis eine Request etc. fertig ist. Das heißt es kann nur 1 nach dem anderen verarbeitet werden (Wenn ich das richtig verstanden habe).

0
schnfz  19.07.2022, 18:14
@iNeedHelp961

SQLite ist auch keine sinnvolle Wahl, wenn man viele gleichzeitige User erwartet. Andererseits ist die "Connection" dabei relativ leichtgewichtig - es wird ja nur ein File geöffnet, keine Netzwerkverbindung wie bei einem richtigen RDBMS.

Wenn es unbedingt eine Embedded-DB sein muss, würde ich mir eher sowas wie H2 anschauen.

0