webForumDet fria alternativet

Vad är bäst (databaskoppling)

8 svar · 456 visningar · startad av Lennholm

LennholmMedlem sedan aug. 2004108 inlägg
#1

Vilket är bäst när det gäller databaskopplingen mellan webservern och sql servern, att skapa kopplingen i Application_OnStart som sedan är öppen jämt och används när den behövs eller att bara öppna kopplingen i varje script när den ska användas och sedan stänga den när scriptet är klart?

Själv tycker jag att det första låter bäst, det är definitivt smidigast att jobba med i scripten. Har jag rätt eller fel?

Engine^Medlem sedan dec. 20003 887 inlägg
#2

Det bästa är att endast öppna en anslutning när det behövs. Strax innan du ska hämta eller skriva till databasen med andra ord. När du hämtat eller uppdaterat datat stänger du anslutningen.

LennholmMedlem sedan aug. 2004108 inlägg
#3

Säkert?

Det bästa är att endast öppna en anslutning när det behövs. Strax innan du ska hämta eller skriva till databasen med andra ord. När du hämtat eller uppdaterat datat stänger du anslutningen.

Är det verkligen så? Jag tycker att det låter lite ologiskt att det prestandamässigt skulle vara bättre att öppna och stänga en anslutning för varje enskild användare som besöker nåt script på sajten. Åtminstone om det vanligtvis är flera användare på sajten samtidigt.

erkaMedlem sedan dec. 19996 522 inlägg
#4

Vilket tror du tar mest prestanda, att öppna och stänga en anslutning när den behövs, eller att ha flera anslutningar öppna konstant och simultant? Det säger sig själv att det är bättre att öppna/stänga vid behov

LennholmMedlem sedan aug. 2004108 inlägg
#5

Vilket tror du tar mest prestanda, att öppna och stänga en anslutning när den behövs, eller att ha flera anslutningar öppna konstant och simultant? Det säger sig själv att det är bättre att öppna/stänga vid behov

Men är det så det går till då? Jag skapar ju databaskopplingen i global.asa och databaskopplingen är applikationsobjektet 'con'.
'con.Open' och 'con.Close' kör jag endast i Application_OnStart / Application_OnEnd.
Är det inte då så att varje enskild session istället för att öppna en ny anslutning använder sig av den här applikationsomfattande kopplingen som redan är öppen?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#6

Ha aldrig objekt i session- eller applicationscope. Aldrig.

Så du menar att alla på sajten delar på samma connectionobjekt via application? Jag har aldrig någonsin testat något sådant, så jag vågar inte gissa hur konsekvenserna ser ut, men en sak kan jag lova; det kommer inte att bli kul.

Ett exempel; om nu alla delar på connectionobjektet, så delar också alla på alla 'transaktioner' som utförs med t.ex. BeginTrans, Abort och SetComplete. Jätteskoj när folk börjar Abort'a och Commit'a varandras transaktioner.

LennholmMedlem sedan aug. 2004108 inlägg
#7

Jag har en experimentsajt som jag kör så på. Har aldrig testat med mer än kanske 4 besökare åt gången, på hela sajten. Antar att det är när man har många besökare så att vissa använder objektet samtidigt som det kan bli problem.
Du får gärna förklara problemen som kan uppstå lite mer. Jag använder inte BeginTrans m.m. Har inte haft det behovet. Men om detta ställer till problem när alla delar på samma objekt eftersom det ligger i application, borde det inte åtminstone kunna funka om varje session får ett connectionobjekt?

OveRRidEMedlem sedan feb. 200112 078 inlägg
#8

Jag upprepar;

Jag och alla andra skrev:

Ha aldrig objekt i session- eller applicationscope. Aldrig.

;)

Det finns ingen som helst mening att ha denna typ av objekt i session- eller applicationscope p.g.a. den enkla anledningen att de inte behöver vara resistenta eller 'levande' hela tiden. Jag kan tänka mig att hålla objekt levande om det finns användning för att de proppas fulla med olika data eller beteenden, men ett connectionobjekt har väldigt sällan fler uppgifter än snacka lite med en databas. Att hålla något som ändå är så kostnadskrävande igång hela tiden är som att låta bilen stå på över en vinternatt för att du inte skall frysa när du skall till jobbet nästa morgon.

Starta connectionobjektet, använd det och förstör det. Upprepa nästa gång det behövs. Det finns en anledning till att det är så alla, och jag menar verkligen alla, gör.

Skriv en snygg DAL (Data Access Layer) som wrappar alla metoder mot connection och sånt, inkludera dem i den filer där du behöver använda databasen och använd dina funktioner istället. Då får du en någorlunda snygg datamodell och dessutom snyggare kod! ;)

PS. Jag vet inte vad du har för databas, men har du Access så kan du ändå inte köra fler frågor mot databasen samtidigt, då de ställs på kö.

LennholmMedlem sedan aug. 2004108 inlägg
#9

Tack, det var hjälpsamt.

129 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)