Avatar billede elv Nybegynder
13. juni 2003 - 14:12 Der er 8 kommentarer og
1 løsning

Database multithreading

Jeg har en application, hvor der kører adskillige threads som skal have adgang til en database. Hvordan skal de enkelte threads have adgang til denne? På nuværende tidspunkt har jeg i min main-klasse en Connection, som den laver 4 statements ud fra (1 til hver thread), som så bliver sendt med i constructoren af thread'en, men jeg kan let se, at dette ikke er den bedste måde at gøre det på. Så spørgsmålet er: Hvordan bør man egentlig gøre?
Avatar billede arne_v Ekspert
13. juni 2003 - 14:15 #1
Der er flere muligheder:

1) en connection per thread

2) en connection pool som threads reserver connections fra og releaser igen

3) omstrukturering aå trådene bare giver opgaverne til en dedikeret database tråd
Avatar billede arne_v Ekspert
13. juni 2003 - 14:16 #2
#2 er den mest professionelle løsning, fordi den skalerer betydeligt
bedre når de rbliver mange tråde.

I dit tilfælde er #1 muligt fordi 4 connections ikke er et problem.

#3 er kun relevant i specielle tilfælde.
Avatar billede arne_v Ekspert
13. juni 2003 - 14:17 #3
Men flere statements i flere tråde og en enkelt connection
vil kunne give problemer.
Avatar billede elv Nybegynder
13. juni 2003 - 14:20 #4
Tror jeg snupper #1, lyder ganske fornuftigt.
Jeg har nogle problemer med deadlocks i det samme program, kan den fælles connection være grunden til dette? Vil det normalt smide exceptions eller lave deadlocks? (for jeg får ingen exceptions)
Avatar billede elv Nybegynder
13. juni 2003 - 14:21 #5
Glemte lige:
Vil hver thread skulle lave ét statement som den anvender konstant, eller laver man nyt statement hver gang man skal bruge det?
Avatar billede arne_v Ekspert
13. juni 2003 - 14:40 #6
Du kan godt genbruge et statement.

Men der er såmænd ikke vundet meget ved det.

Almindelige statements er et meget "ligth" objekt.

Prepared og callable statements er der mere kød på.
Avatar billede elv Nybegynder
13. juni 2003 - 14:42 #7
Så siger jeg tak!
Avatar billede arne_v Ekspert
13. juni 2003 - 14:43 #8
Det er usikkert at bruge den samme connection i multiple tråde.

Jeg vil umiddelbart forvente at det kunen give alle mulige
slags mærkelige problemer.

Så dine deadlock problemer kan sagtems skyldes det.

Jeg kan dog ikke sige med sikkerhed at det er det der er skyld i det.

Men prøv og ændre det og se om problemet forsvinder.
Avatar billede elv Nybegynder
13. juni 2003 - 14:44 #9
Tror faktisk jeg i dette sekund fandt fejlen, men jeg må jo nok hellere rette det andet til alligevel :)
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