2016-07-29 14 views
1

ruft ich das folgende Szenario haben:Wenn die Verbindung in mehreren Verfahren schließen

MethodA() calls MethodB() 
MethodB() calls MethodC() 

Alle Methoden haben einige Abfrage DB auszuführen. Um dies zu tun, erstelle ich ein Verbindungsobjekt und übergebe es der Kette von Methoden, um das Verbindungsobjekt wiederzuverwenden.

Annahme ist hier, dass das Verbindungsspooling nicht werden eingesetzt wird.

Nun ist meine Frage,
sollte nur eine einzelne Verbindung geöffnet und wiederverwendet werden und am Startpunkt geschlossen sein (im obigen Beispiel wird die Verbindung in der Methode A geöffnet und geschlossen)?
oder
sollte ich eine separate Verbindung für jede Methode erstellen?

Die Verbindung wiederzuverwenden scheint besser, aber dann muss ich die Verbindung offen lassen, bis die Kontrolle wieder zu MethodA() kommt.

Ich habe gelesen, dass die Wiederverwendung der Verbindung besser ist, da sie teuer zu erstellen sind. Aber dann habe ich auch gelesen, dass es besser ist, die Verbindung so schnell wie möglich zu schließen, d. H. Sobald Sie mit dem Abfrageanruf fertig sind.

Welcher Ansatz ist besser und warum?

Antwort

0

Es klingt, als würden Sie nur die DB abfragen und nicht aktualisieren oder einfügen. Wenn das der Fall ist, vermeiden Sie viele der transaktionalen Semantik in einem solchen verschachtelten Prozeduraufruf.

Wenn das stimmt, dann verbinden Sie sich einfach einmal, führen Sie alle Abfragen aus und schließen Sie die Verbindung. Die Verwendung eines Verbindungspools ist etwas orthogonal zu Ihrer Frage - verwenden Sie eine, wenn Sie können. Sie vereinfachen Ihren Code erheblich, da Sie den Pool automatisch testen lassen können, bevor er Ihnen einen gibt. Es wird automatisch eine neue Verbindung erstellt, wenn die Verbindung verloren gegangen ist (sagen wir, weil die DB zurückgeworfen wurde).

Schließlich möchten Sie die Anzahl der Male minimieren, die Sie eine DB-Verbindung erstellen, WEIL es teuer ist. Dies ist jedoch oft nicht trivial. Datenbanken selbst unterstützen nur eine maximale Anzahl von Verbindungen. Wenn es viele Kunden gibt, dann müssen Sie dies berücksichtigen. Wenn Sie den trivialen Fall haben - eine Datenbank und Ihr Programm ist der einzige, der Verbindungen herstellt, dann öffnen Sie die Verbindung und lassen Sie sie für die Dauer des Programms geöffnet. Dies würde erfordern, dass Sie es validieren. Wenn Sie also einen DB-Pool der Größe 1 verwenden, vermeiden Sie dies.