Er der nogen der kan forklare mig hvad transaktioner er og hvad de bruges til. Ved bl.a at de bruges i J2EE miljøet, men kan ikke helt se fordelen i transaktioner
Danmark vil mindske afhængigheden af globale techgiganter, men det kræver mere end politiske formuleringer og strategier, understreger PROSA’s formand Niels Bertelsen.
Transaktioner er en måde at samle eller gruppere flere operationer på. Man kræver at alle operationerne i transaktionen bliver udført med succes førend hele transaktionen er udført med succes. Dette er praktisk i systemer hvori der indgår flere processer. Tag eksempelvis et banksystem. Når der skal hæves penge på en konto foregår det måske som følger :
if kontobeløb > HævetBeløb kontobeløb = kontobeløb - HævetBeløb
Er der nu to processer som begge ønsker at hæve fra samme konto risikere man at proces A først kontrollerer kontobeløb mod hævetbeløb. Herefter kontrollerer proces B kontobeløb mod hævetbeløb og derefter trækker de to processer deres hævetbeløb fra kontobeløb. Et problem vil opstå hvis der er 1000 kr på kontoen og begge hæver 800 kr. Proces A vil finde at 1000 kr > 800(A) kr og proces B vil finde at 1000 kr > 800(B) kr. Herefter vil A sænker kontobeløbet til 200 kr og B vil sænke det til -600 kr. Hvis man antager at kontobeløet skal være større end 0 er det således kommet under 0, uden at ens kode opdagede dette.
Dette problem løses med en transaktion. Når den fejler udføres der et såkaldt roll-back hvor alle operationer i transaktionen (indtil fejlen) (neutraliseres). Således vil fratræk af 800 kr fra kontobeløbet i et roll-back betyde et addition af 800 kr til kontobeløbet. Filmen køres faktisk baglæns og effekten alle de operation som er blevet udført inden fejlen ophæves. En transaktion til ovenstående problem kan være som følger : Start transaktion if kontobeløb > HævetBeløb kontobeløb = kontobeløb - HævetBeløb else fail if kontobeløb < 0 fail slut transaktion
Et roll back vil køre fra fail tilbage til start og kontoen vil være som om intet var hændt. I eksemplet med proces A og B vil proces A nå til slut da 200 kr > 0, mens B vil fejle da -600 < 0 og process B\'s transaktion vil lave rollback og lægge 800 kr til kontobeløbet og bringe det tilbage til 200 kr. Systemet vil være som om det kun var proces A der havde kørt.
Fordelen med en transaktion er altså at den kan annulleres undervejs. Selvfølgelig kan man selv kode annullering udenom transaktioner men på lang sigt vil ens kode risikere at blive rigtig grim, og multiproces (concurrent) kodning er ikke så nemt igen.
Synes godt om
Ny brugerNybegynder
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.