Tilkoblingspooling og transaksjoner
Håndter databasetilkoblinger effektivt med pooling, og sørg for dataintegritet ved hjelp av transaksjoner i next.jdbc.
Tilkoblingspooling og transaksjoner er en gratis leksjon i Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit. Dette er leksjon 4 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Clojure: funksjonell programmering og backendutvikling på JVM, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.
Hvorfor bruke tilkoblingspooling
Det er tregt og ressurskrevende å åpne en ny databasetilkobling for hver spørring. En tilkoblingspool holder et sett med gjenbrukbare tilkoblinger klare, noe som forbedrer gjennomstrømningen betydelig.
HikariCP-poolen
Den mest populære tilkoblingspoolen for JVM er HikariCP. Navnerommet next.jdbc.connection tilbyr en hjelpefunksjon for å bygge en datakilde med pool.
(require '[next.jdbc.connection :as connection])
(import '[com.zaxxer.hikari HikariDataSource])Opprette en datakilde med pool
Bruk connection/->pool med pool-klassen og db-spesifikasjonen din. Den returnerte datakilden er det du sender spørringer til.
(def datasource
(connection/->pool HikariDataSource
{:dbtype "postgresql"
:dbname "mydb"
:username "app"
:password "secret"}))Kjøre spørringer gjennom poolen
Når datakilden er opprettet, sender du den direkte til jdbc/execute!, akkurat som en vanlig tilkobling. Poolen henter ut og leverer tilbake en tilkobling automatisk.
(require '[next.jdbc :as jdbc])
(jdbc/execute! datasource
["SELECT * FROM users WHERE active = ?" true])Lukke poolen
En datakilde med pool er en ressurs som kan lukkes. Lukk den ved avslutning for å frigjøre alle tilkoblingene.
(.close datasource)Hva er en transaksjon
En transaksjon grupperer flere setninger slik at de enten lykkes alle sammen eller mislykkes alle sammen. Dette garanterer konsistens, for eksempel ved overføring av penger mellom kontoer.
with-transaction
next.jdbc tilbyr with-transaction. Setninger i blokken kjøres atomisk. Hvis et unntak oppstår, rulles alt tilbake.
(jdbc/with-transaction [tx datasource]
(jdbc/execute! tx ["UPDATE acct SET bal = bal - 100 WHERE id = 1"])
(jdbc/execute! tx ["UPDATE acct SET bal = bal + 100 WHERE id = 2"]))Automatisk tilbakerulling
Hvis en setning kaster et unntak, rulles transaksjonen automatisk tilbake, og unntaket videresendes. Ingen delvise oppdateringer bekreftes.
(jdbc/with-transaction [tx datasource]
(jdbc/execute! tx ["INSERT INTO orders (id) VALUES (1)"])
(throw (ex-info "boom" {}))) ; insert above is rolled backIsolasjonsnivåer
Du kan angi et isolasjonsnivå for å kontrollere hvordan samtidige transaksjoner ser hverandre.
:read-committed:repeatable-read:serializable
(jdbc/with-transaction [tx datasource {:isolation :serializable}]
(jdbc/execute! tx ["UPDATE counters SET n = n + 1 WHERE id = 1"]))Manuell tilbakerulling
Du kan tvinge frem en tilbakerulling uten å kaste et unntak ved å sette tilbakerullingsflagget på tilkoblingen.
(jdbc/with-transaction [tx datasource]
(jdbc/execute! tx ["INSERT INTO logs (msg) VALUES ('test')"])
(.rollback tx))Pooling og transaksjoner sammen
I produksjon oppretter du én datakilde med pool ved oppstart og pakker kritiske skriveoperasjoner med flere trinn inn i with-transaction. Dette gir både ytelse og integritet.
(defn transfer! [ds from to amount]
(jdbc/with-transaction [tx ds]
(jdbc/execute! tx ["UPDATE acct SET bal = bal - ? WHERE id = ?" amount from])
(jdbc/execute! tx ["UPDATE acct SET bal = bal + ? WHERE id = ?" amount to])))Hurtigsjekk
Test kunnskapen din om transaksjoner.
Oppsummering
Du har lært å bruke tilkoblingspooling og transaksjoner med next.jdbc.
- Bygg en pool med
connection/->poolog HikariCP - Pakk atomiske skriveoperasjoner inn i
with-transaction - Feil rulles automatisk tilbake. Velg isolasjonsnivåer for samtidighet
Lær deg Clojure med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 12
- Leksjoner
- 48
Ofte stilte spørsmål
Er leksjonen «Tilkoblingspooling og transaksjoner» gratis?
Ja – hele teksten i «Tilkoblingspooling og transaksjoner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Clojure: funksjonell programmering og backendutvikling på JVM-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Clojure: funksjonell programmering og backendutvikling på JVM inneholder totalt 4 leksjoner.
Hva lærer jeg i «Tilkoblingspooling og transaksjoner»?
Håndter databasetilkoblinger effektivt med pooling, og sørg for dataintegritet ved hjelp av transaksjoner i next.jdbc. Du øver på Clojure: funksjonell programmering og backendutvikling på JVM med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Clojure: funksjonell programmering og backendutvikling på JVM?
Ingen tidligere erfaring er nødvendig. Clojure: funksjonell programmering og backendutvikling på JVM på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Tilkoblingspooling og transaksjoner»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Clojure: funksjonell programmering og backendutvikling på JVM-leksjonen?
Ja. Alle Clojure: funksjonell programmering og backendutvikling på JVM-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Koble til databaser med next.jdbc
- Utføre CRUD-operasjoner
- Databasemigreringer og skjemahåndtering
- Tilkoblingspooling og transaksjoner