# Muss ich wirklich bei jeder Anfrage öffnen/schließen?



## m²labs (19. Jan 2014)

Hallo, bisher hats immer gereicht irgendwo mitzulesen aber jetzt steh ich ganz aufm Schlauch.
Ich hab mir mal ein paar Tuts und Erklärungen "einfacher" Datenbankanfragen angeschaut. Nun sind die ja immer ca. 20 Zeilen lang, durch das verbinden und schließen. Die eigentliche Aktion ist aber immer mit 2 Zeilen getan.
Nun meine Frage: Muss ich jedesmal, wenn ich auch nur einen kleinen Wert aus meiner DB möchte dieses ganze Ding da hinschreiben oder versteh ich da was falsch?
Vielen Dank schon mal im Voraus.

Grüße,
Markus


----------



## turtle (19. Jan 2014)

> Nun sind die ja immer ca. 20 Zeilen lang, durch das verbinden und schließen


Das musst du zumindest EINMAL machen, aber...

Es wäre ein großer Performance Verlust wenn du die Verbindung häufiger herstellst. Daher setzt man praktisch immer sogenannte Pooled-Connections ein.

Dies bedeutet, das die Applikation eine bestimmte Anzahl (kann man einstellen) von Datenverbindungen herstellt. Deine Applikation "leiht" sich für eine Aktion quasi die Connection aus und schließt sie danach sofort wieder. Letzteres gibt die Verbindung aber nur an den Pool zurück, so dass der nächste Verbindungsaufbau schnell gemacht werden kann.


----------



## mjustin (21. Jan 2014)

Das hängt von der Datenbank ab:

es gibt Datenbanken, bei denen lang laufende Transaktionen zu ernsthaften Performanceverlusten führen können. Mir bekannte Beispiele sind InterBase / Firebird. Ursache ist die Mehrgenerationen-Architektur, die einen hohen Overhead erzeugt, der mit der Zeit immer weiter ansteigt.

Daher sollte man sicherheitshalber auch beim Datenbank-Administrator nachfragen, falls er nicht schon "proaktiv" diese Informationen bereitgestellt hat.


----------



## Spitfire777 (22. Jan 2014)

Um die Anfragen an eine DB zu reduzieren, lohnt es sich auch über ein Caching nachzudenken. z.B. durch ein ORM wie Hibernate oder EclipseLink (beides JPA). Wenn mans ganz weit treiben will, kann man sich noch einen Level 2 Cache wie Infinispan anschauen.


----------

