sql >> Database teknologi >  >> RDS >> PostgreSQL

JDBC:Kan jeg dele en forbindelse i en multithreading-app og nyde gode transaktioner?

Ja, generelt skal du oprette en ny forbindelse for hver tråd. Du har ikke kontrol over, hvordan operativsystemet tidsdeler udførelse af tråde (uanset at du definerer dine egne kritiske sektioner), så du kan uforvarende have flere tråde, der forsøger at sende data ned ad det ene rør.

Bemærk, at det samme gælder for enhver netværkskommunikation. Hvis du havde to tråde, der for eksempel forsøgte at dele en socket med en HTTP-forbindelse.

  • Tråd 1 fremsætter en anmodning
  • Tråd 2 fremsætter en anmodning
  • Tråd 1 læser bytes fra socket og læser uforvarende svaret fra tråd 2s anmodning

Hvis du pakkede alle dine transaktioner ind i kritiske sektioner og derfor låser alle andre tråde ude i en hel start/commit-cyklus, så kan du muligvis dele en databaseforbindelse mellem tråde. Men jeg ville ikke gøre det selv da, medmindre du virkelig har medfødt viden om JDBC-protokollen.

Hvis de fleste af dine tråde sjældent har behov for databaseforbindelser (eller slet ikke behov), kan du muligvis udpege én tråd til at udføre dit databasearbejde og få andre tråde til at stille deres anmodninger i kø til den ene tråd. Det ville reducere omkostningerne ved så mange forbindelser. Men du bliver nødt til at finde ud af, hvordan du administrerer forbindelser pr. tråd i dit miljø (eller stille et andet specifikt spørgsmål om det på StackOverflow).

opdatering: For at besvare dit spørgsmål i kommentaren, understøtter de fleste databasemærker ikke flere samtidige transaktioner på en enkelt forbindelse (InterBase/Firebird er den eneste undtagelse, jeg kender til).

Det ville være rart at have et separat transaktionsobjekt og være i stand til at starte og udføre flere transaktioner pr. forbindelse. Men sælgerne støtter det simpelthen ikke.

På samme måde antager standardleverandøruafhængige API'er som JDBC og ODBC den samme antagelse, at transaktionstilstanden blot er en egenskab for forbindelsesobjektet.



  1. Oracle:SOM hvor enhver del af en streng matcher enhver del af en anden streng

  2. Bruger seneste aktiviteter - PHP MySQL

  3. PyInstaller, spec fil, ImportError:Intet modul med navnet 'blah'

  4. Optimering af mysql-forespørgsel (synes godt om/kan ikke lide)