08. oktober 2011 - 10:32Der er
4 kommentarer og 1 løsning
Begynder: close connections - bedste løsning?
Hejsa, jeg er ved at forsøge (bare for at lære) at kode et program der går ind og grabber data i nogle ofte opdaterede filer. Det data den grabber, det smider den ind i en mysql database og gemmer... Jeg har en idé om at jeg vil køre metoden der grabber dataen ca. hvert 30. sekund hele dagen... Dvs. temmelig mange connections.
Jeg er lidt i tvivl om jeg presser systemet med for mange jdbc connections. Derfor vil jeg høre, hvad den mest optimale løsning er?
Pt. starter jeg metoden med at åbne database forbindelsen. Dernæst har jeg en try-metode, som slutter af med en finally der lukker forbindelsen. Metoden kaldes som sagt hvert 30. sekund.
Er der en bedre måde? Jeg er temmelig begynder, så det må gerne være simpelt... Jeg har læst om connection pools, men jeg har separeret min databaseforbindelse i en anden metode...
Det lyder som om du kun har behov for én forbindelse til databasen ad gangen, så jeg ser ikke nogen grund til at bruge connection pools. Jeg tror heller ikke du belaster din db synderligt ved at åbne/lukke forbindelsen hvert 30. sekund. Alternativt kan du bare lade den være åben hele tiden. Det kan ske at forbindelsen dør af den ene eller anden grund, men det kan du fange i en try-catch og så åbne en ny forbindelse.
Start med det som du har nu: open, opdater, close hver gang du skal opdatere.
Der sker en hel naar man aabner en database forbindelse - saa det tager "lang tid".
Men: - "lang tid" er sammenlignet med simple data operationer og i den sammenhaeng er 30 sekunder "meget lang tid", saa det kan sagtens taenkes at det slet ikke er et problem - MySQL har ry for at vaere en af de databaser hvor det at aabne en forbindelse er hurtigst (formentligt fordi at man sjaeldent bruger database connection pool i PHP, saa der har vaeret et pres fra den store gruppe af PHP+MySQL brugere m at det skulle vaere hurtigt)
Hvis du kan maale (altsaa ikke subjektivt "tror" men objektivt "maale") at der er et problem, saa skal du kigge paa alternativer.
A) en permanent aaben connection
Det er helt fint for desktop apps eller single threaded server apps.
Det duer ikke i multithreaded server apps.
Det er ret nemt, men man skal bare huske ikke at goere det til en vane som man bringer med over i server verdenen.
B) database connection pool
Det duer til det hele.
Men kraever lidt mere kode maessigt / konfigurations maessigt.
Java EE servere kommer med support for konfiguration af database connection pool.
For Java SE apps skal man selv skrive lidt kode.
Hvis man bruger Apache Commons Connection Pool, saa skal man skrive 4 linier ekstra.
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.