Avatar billede skovjuul Nybegynder
12. oktober 2012 - 11:20 Der er 8 kommentarer og
1 løsning

Hvorfor bliver hele programmet langsomt?

Hola

Jeg har lavet et forholdsvis simpelt program med et dbgrid. Ved at trykke på "tilføj" popper et ny vindue op hvor man kan indtaste diverse tekster, vælge i dropdowns etc.

Min forundring er, når jeg sidder og tester programmet mod en lokal database kører det hele lynhurtigt.

Med det samme jeg lægger databasen ud på min nas (eller på arbejdet, ud på et netværksdrev) så bliver programmet super langsomt. Bare det at skrive i en tekstboks i pop-up vinduet tager en krig. Man kan nå at skrive 5-8 tegn før de rent faktisk dukker op på skærmen og mouse-over highlights i drop-downbokse (som allerede er fyldt og ikke er dbdropdowns) er meget forsinkede hvilket gør at man nemt får valgt den forkert.

Hvad kan sløve hele programmet på den måde, bare fordi databasen ligger på et netværksdrev?

Jeg bruger AbsoluteDB fra componentace som ellers skulle være gearet til flerbruger-systemer.

mvh
Jesper
Avatar billede magic-mouse Novice
12. oktober 2012 - 11:39 #1
Der er mange faktore som spiller ind når du lægger noget på et netværksdrev på en nas, istedet for en maskine som er beregnet til det.

1 kablerne kan være langsomme. Det kan være at informationen ikke går så hurtigt over dem. Er det trådløst kan det være stort pakke frafald.

2. Nassen er beregnet til at distribuere filer, ikke til at have en aktiv database liggende.

Når du skriver til databasen på nassen skabes først en kobling mellem din computer og nassen, der efter skal informationen sendes frem og tilbage, dette er sikkert over TCP/IP som flytter information på ca 50 mbps hvis du er heldig. Hvor en normal nutildags flytter information med ca 2-3 gbps, helt op til  6 gbps med nye SSD diske.  Der skal ikke meget mattematik til at finde ud af at med en normal 7.2k disk er det over 40 gange hurtigere, og det er uden net forhandlinger.

Der efter er nassen beregnet til at man flytter information til og fra den. Ikke behandler en fil som er på den (dog beroende på nas' nye og bedre nas kan behandle dette), for ikke at regne med QOS (Quality of service) ind i billedet. Som sikre at hvis du streamer en lyd eller billed fil fra nassen bliver den høgst prioriteret (dog mest normalt med nas der har media center bygget ind), modsat din database fil som bliver stærkt ned prioriteret da din nas (QOS protokol) med sikkerhed ikke er kendt med filens type.

Hvis det er noget hvor performance er kritisk, køb en gammel server og installere den som database server og kør den der fra. De koster ca 300 kr og er helt udemærket til dette, enten som tower eller rack (hvis dit firma har eget server rum)

Alternativt flyt databasen til din harddisk når du bruger den og flyt den tilbage når du er færdig. Hvis flere brugere skal kobles på den ad gangen anbefaler jeg alievel at du bruger en større database som Postgre, Mysql, MSSql, oracle eller andet.
Avatar billede hugopedersen Nybegynder
12. oktober 2012 - 11:56 #2
Når den unge mand har en NAS er det vel meget nærliggende at spørge: er der ikke en MySQL på den?
I dag er det næsten ikke til at købe en NAS fra et af de lidt mere seriøse firmaer uden at der er en MySQL på den (har selv en QNap og det spiller rigtig godt)
Desværre ser det ikke ud til at du kan bruge AbsoluteDB til det formål, men der findes så mange andre gode. Jeg bruger selv UniDAC som kan køre på næste hvilken som helst DB
Avatar billede skovjuul Nybegynder
12. oktober 2012 - 12:07 #3
Hola

Jeg skal måske præcisere at slutløsningen skal fungere som følger:
Det er et flerbrugersystem der ikke må skulle installeres på nogen måde. Dvs. løsningen skal kunne ligge i en folder og brugeren skal have et link til exe-filen på skrivebord.

Havde godt tænkt over det med at netværket kunne gøre det langsomt, men det forklarer vel ikke hvorfor samtlige dele af programmet bliver langsomt? Som sagt, hvis jeg lægger en tekstboks på et ny panelt ved siden af mit dbgrid, så bliver det langsomt at skrive i tekstboksen, som umiddelbart ikke har noget med databasen at gøre.

Desværre er mysql eller lignende løsninger ikke mulige, da jeg ikke har mulighed for at installere noget software på nogen computere i forbindelse med slutløsningen. Derfor faldt valget på ComponentAce som er en stand-alone fil.

Men hvorfor skulle det være hurtigere at bruge mysql over netværket end AbsoluteDB? Mængden af data mellem klient og server er vel den samme?
Avatar billede hugopedersen Nybegynder
12. oktober 2012 - 12:15 #4
Nu kender jeg ikke AbsoluteDB men da det er en filbaseret løsning kunne jeg forestille mig at det vil være lidt i stil med når M$ Access kører fra et netværksdrev - og det er noget skrammel. Der sker det at hver gang du forespørger på data så hentes hele skidtet til klienten og behandles der. På MySQL og MS SQL er der noget aktivt på serveren og du sender f.eks. en SELECT statement afsted som serveren så behandler og sender de resulterende records/felter retur til dig.  Allerede der kan du se performanceforskellen.
Avatar billede skovjuul Nybegynder
12. oktober 2012 - 12:29 #5
Hej Hugo

Du fik lige min hjerne på gled. Kom i tanke om at jeg kører en timer, som ComponentAce bruger i en demo, der fortæller brugeren hvor mange der er på lige nu:
sbStatus.Panels[0].Text := 'Antal brugere online: '+ IntToStr(dmCont.dbRapportPrg.GetDBFileConnectionsCount);

Den kører hvert sekund og kan vel nærmest tvinge hvad som helst i knæ :D

Den er droppet (muligvis genindsat senere med 5 min. interval i stedet for) og det hjalp jo gevaldigt :)

Smid et svar begge to, så er der også lidt point til den magiske mus for god info.

God weekend!
Avatar billede hugopedersen Nybegynder
12. oktober 2012 - 12:34 #6
Ja det må nok siges at være en god grund til at der er ventetid

Jeg er rigtig glad for min DB monitor til UniDAC - der kan jeg se al trafik til og fra databasen hele tiden og følge med i hvad der sker. Rigtig god i fejlfindingsøjemed.
Avatar billede skovjuul Nybegynder
12. oktober 2012 - 13:10 #7
Ja, havde godt kig på devarts komponenter. Men som sagt, skulle bruge en multiuser stand-alone database, hvor der ikke skulle installeres eller konfigureres noget på brugerens pc (f.eks. odbc) eller installeres andet software nogen steder.
Avatar billede hugopedersen Nybegynder
12. oktober 2012 - 13:17 #8
Der er UniDAC også perfekt - jeg bruger dem både på MySQL, MS SQL, SQLite og MS Access. Uden at ændre 1 linie i min kode kan jeg skifte til en anden DB ved blot at ændre i den INI fil hvor databaseopsætningen er gemt.
Avatar billede kloge Nybegynder
07. november 2012 - 07:10 #9
Med MS sql express / adokomponenetr behøver du heller ikke at installere noget på klientmaskinen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester