webForumDet fria alternativet

smart databaskoppling?

23 svar · 784 visningar · startad av Gimbo · sida 2 av 2

OveRRidEMedlem sedan feb. 200112 078 inlägg
#21

Ok.

Det är iallafall ganska nyttigt att ta för vana att göra så, så man slipper överraskningar. ;)

RED. Ballt! 5555 inlägg. :D ;)

PatrikBMedlem sedan mars 20002 836 inlägg
#22

Gladh skrev:

Ms har gjort en SQL Helper "class" som du kan ladda ner gratis från MS sida: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/daab-rm.asp

Finns även en PPT slide här om SQLHelper: http://www.microsoft.com/israel/msdn/downloads/netsa/appblocks.ppt

- M

Den funkar endast mot SqlServer vilket inte alla kör med (har tillgång till). Finns ju andra alternativa DBMS att välja som MySQL, Oracle etc.

Engine^:
Jag håller på med en Wrapper för NET som man egentligen under "run-time" kan switcha från tex en Access-db till en MySQL och vidare mot en sql-server bara genom att ändra en liten egenskap i Wrappern.
Dock ännu bara under utveckling. Har dock kört den på lite mindre projekt :e och utvecklingen går segt då jag har mycket annat att göra just nu .... :(

Gladh.

ConnectionPooling i all ära. Mot mysql funkar det inte speciellt bra då poolningen och mysql inte riktigt alltid kommer överens och man får "irriterande" fel som att mysql har timat ut då connection-poolen håller en connection mot mysql som i sin tur har en max-tid som en connection får vara öppen. Syncen däremellan är inte "bullet-proof" om man säger så ;)

Oftast när det gäller kod här är det access som gäller som databas och jag är osäker på hur connection-pooling funkar där, om det överhuvudtaget fungerar/finns.

Kör man SQL-server så är det en helt annan femma och klart bättre att öppna och stänga databasen "för varje hämtning", men för övriga DBMS kan det bli förödande .... om inte providern stödjer connection-pooling.

Då tycker jag nog att det finns viktigare saker att göra INNAN man börjar att "mixtra" med ConnectionPooling och det är att bygga diverse cache-objekt så man slipper att göra uppslag mot databasen hela tiden. Vissa applikationer kräver nya uppslag hela tiden men många saker kan (ska) cachas för att slippa belastningen att hämta data som sällan (eller aldrig) uppdateras från databasen

Som sagt, finns många lösningar och man måste hitta det bästa av sin "egen" situation

cya,
PatrikB

GladhMedlem sedan maj 20012 812 inlägg
#23

ConnectionPooling i all ära. Mot mysql funkar det inte speciellt bra då poolningen och mysql inte riktigt alltid kommer överens och man får "irriterande" fel som att mysql har timat ut då connection-poolen håller en connection mot mysql som i sin tur har en max-tid som en connection får vara öppen. Syncen däremellan är inte "bullet-proof" om man säger så

Okej, har aldrig anvätt mig av MySQL som i mitt tycke har en bit kvar för att bli en riktig DBMS. Det är ju dock så att du skriver mindre bra kod, för att lösa ett problem som inte borde finnas, det är ju givetviss bättre om drivrutinerna till MySQL hade fungerat klanderfritt med connectionpooling.

Då tycker jag nog att det finns viktigare saker att göra INNAN man börjar att "mixtra" med ConnectionPooling och det är att bygga diverse cache-objekt så man slipper att göra uppslag mot databasen hela tiden. Vissa applikationer kräver nya uppslag hela tiden men många saker kan (ska) cachas för att slippa belastningen att hämta data som sällan (eller aldrig) uppdateras från databasen

Tja jag tycker ju inte du skall strunt i att optimera dina öppningar motdatabasen bara för att du har cachade data. Givetviss så skall så mycket data som möjligt cachas om det går, men att inte optimera sina öppningar är som att säga, jag hämtar bara data lite då och då, så därför så optimerar jag inte min SQL kod.

Sedan så är det så att på många siter så märks det inte om man har optimerat sin databaskoppling, eftersom det sällan/aldrig kommer att ha mer än 5 öppnakopplingar samtidigt eftersom man helt enkelt inte har tillräckligt med besökare. Det är dock ingen anledning att inte optimera sin kod från början, för den dagen som besökarna kommer så är det inte roligt i efterhand att optimera sin kod.

Så man skall alltid optimera sin kod, som man kan göra enkelt och med avvägning på vad det kostar i tid att göra det.

Kör du fast i din wrapper så finns det en lösning i Professional ADO.NET från WROX hur man gör en generell databaswrapper.

De använder sig av Interfacen för att öppna mot olika databaser, samt att så skickar man tillbaka ISqlDataReader istället för SqlDataReader/OleDbDataReader. Jag antar att du gör något liknande.

- M

PatrikBMedlem sedan mars 20002 836 inlägg
#24

Själv kommer jag i kontakt med MySQL rätt ofta genom olika kunder (mindre företag) som tycker att MS-SQL Server är dyr + att de har en blandad miljö.

Själv är jag ju oxå en "prestanda b*g" så jag tycker också att det är viktigt att ha optimerad kod.
Ibland får man dock göra avvägningar och "talla lite" på prestandan för att få en så "skalbar" lösning som möjligt. Det är detta som är roligt med programmering, vi gör samma sak lite olika, beroende på hur vår miljö och förutsättningar ser ut.

Att bygga om den wrappern för att stänga och öppna databasen för varje recordset är inte speciellt svårt, eller tidskrävande, då man bara behöver lägga in det i varje metod som hämtar ett recordset.

Min NET Wrapper så använder jag också de olika interfacen som finns.
Det lite tråkiga är att tex SqlConnection (eller OleDb, Odbc MySql) dock kan ha andra användbara metoder som inte finns i Interfacen. Interfacen är ju bara ett "minimikrav" på vilka metoder som måste återfinnas ...

ska kika in boken ... blir till att beställa den imorgon :e ...

cya,
PatrikB

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