Laden...

Vor/Nachteile verwendung mehrerer connections...

Erstellt von jogibear9988 vor 16 Jahren Letzter Beitrag vor 15 Jahren 1.424 Views
J
jogibear9988 Themenstarter:in
641 Beiträge seit 2007
vor 16 Jahren
Vor/Nachteile verwendung mehrerer connections...

verwendetes Datenbanksystem: alle

Ist es von Vor oder Nachteil wenn ich in einem projekt mehrere datenbankverbindungen verwende. Was ist schneller, wenn ich vieles nacheinander über eine, oder vieles parallel über mehrere connections abarbeite???

cSharp Projekte : https://github.com/jogibear9988

Gelöschter Account
vor 16 Jahren

da .net intern connectionpooling verwendet, bringt es dir absolut nichts, mit ein und demselben connectionstring, mehrere connections aufzumachen. denn tatsächlich gehst du trotzdem nur über eine einzige. (ok man kann das umgehen aber per default stimmt das so [denke ich ^^])

außerdem: wozu mehrere connections? hast du keinen DAL?

1.433 Beiträge seit 2006
vor 16 Jahren

da .net intern connectionpooling verwendet, bringt es dir absolut nichts, mit ein und demselben connectionstring, mehrere connections aufzumachen. denn tatsächlich gehst du trotzdem nur über eine einzige. (ok man kann das umgehen aber per default stimmt das so [denke ich ^^]) Da gebe ich JAck30lena recht.

Des weiteren sind Connections in ADO.NET so oder so kurzlebig ausgelegt, sodass es keine Rolle spielt ob Du nun permanent eine Connection offen hast oder gleich mehrere hintereinander öffnest.

Grüsse
Daniel
Space Profile
Wer nicht fragt, der nicht gewinnt

F
10.010 Beiträge seit 2004
vor 16 Jahren

Doch, eine permanent offene Connection ist "schädlich" für die Erweiterbarkeit
der Software.

J
jogibear9988 Themenstarter:in
641 Beiträge seit 2007
vor 15 Jahren
Geschwindigkeitsmäsig???

Ja, aber dauert es nicht immer die Connection aufzubauen??? Ist es nicht schneller wenn Ich diese immer offen lasse? So muss ja auch jedes mal von dem Datenbankserver einer Benutzerauthentifizierung durchgeführt werden usw... Was ist eine DAL?

cSharp Projekte : https://github.com/jogibear9988

3.511 Beiträge seit 2005
vor 15 Jahren

Das siehst du falsch.
Der ADO.NET ConnectionPool regelt das schon. Ungefähr läuft das so ab

  1. Connection wird erzeugt (Benutzerauthentifierung, Verbindung, usw...)
  2. Connection wird im Pool abgelegt
  3. Anwendung braucht Connection, also wird diese aus dem Pool genommen. Dabei ist die Connection zum Server selber immer noch offen. Jedesmal, wenn jetzt eine Anwendung die Connection braucht, wird diese aus dem Pool genommen, sprich immer noch die "offene".
  4. Wenn nach x-Minuten keine Anwendung die Connection mehr braucht, wird diese aus dem Pool genommen und damit physisch geschlossen.
    Erst jetzt tritt Punkt 1 wieder ein.

Wenn deine Anwendung also immer wieder die gleiche Connection braucht, wird diese immer nur aus dem Pool genommen. Und wie bereits geschrieben ist diese Connection immer noch offen*.

Für den Connection Pool ist der ConnectionString die eindeutige ID. Wenn also im ConnectionString irgendwo z.B. bei WorkstationID die aktuelle Uhrzeit mit reingeschrieben wird, wird nie der Pool genutzt werden können.

Was ist eine DAL?

Ein Data Abstraction Layer. Dazu such am besten mal nach "3 Tier Design". Ganz grob gesagt, wird im DAL alles geregelt, was die Datenbank betrifft. In der Anwendung selber, wird nie auf die Datenbank zugegriffen, sondern nur auf den DAL.

*Das ganze ist natürlich noch etwas komplexer, aber das kann man alles detailiert nachlesen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

343 Beiträge seit 2007
vor 15 Jahren

Was ist schneller, wenn ich vieles nacheinander über eine, oder vieles parallel über mehrere connections abarbeite???

Connection brauchst du nur eine. Wenn du mehrere Befehle parallel abarbeiten lassen möchtest brauchst du Transaktionen.
Außerdem denke ich das es nicht eine Frage der Geschwindigkeit ist, sondern der Notwendigkeit.
Wenn du viele kurze Statements/Transaktionen hast wäre es (wahrscheinlich) besser sie hintereinander durchzuführen, da das Datenbanksystem dann weniger Arbeit hat.
Oft ist dies aber nicht möglich, denn wenn plötzlich eine Transaktion abgearbeitet werden muss die etwas länger dauert, müssen alle anderen Abarbeitungen warten.
(Bei großen Datenmengen im Unternehmensbereich ist es denkbar, dass Transaktionen durchaus mehrere Stunden oder Tage dauern können)

Es kommt also alles ganz auf die Anforderungen und das Design deiner Anwendung an. Aber mehrere gleichzeitig offene Connections sind auf jeden Fall nicht sinnvoll (unter anderem auch wegen dem bereits erwähnten ConnectionPool)

Lg
Preli

PS: sorry dass ich etwas abgeschweift bin

[- www.saftware.net -](http://www.saftware.net/)