Kapslad transaktion

En kapslad transaktion är en databastransaktion som startas av en instruktion inom ramen för en redan påbörjad transaktion.

Kapslade transaktioner implementeras olika i olika databaser. De har dock det gemensamt att förändringarna inte synliggörs för några icke-relaterade transaktioner förrän den yttersta transaktionen har begått. Detta innebär att en commit i en inre transaktion inte nödvändigtvis kvarstår uppdateringar av systemet.

I vissa databaser ses ändringar som görs av den kapslade transaktionen inte av "värd"-transaktionen förrän den kapslade transaktionen har genomförts. Enligt vissa, [ vem? ] detta följer av transaktionernas isoleringsegenskap.

Förmågan att hantera kapslade transaktioner korrekt är en förutsättning för verkliga komponentbaserade applikationsarkitekturer. I en komponentbaserad inkapslad arkitektur kan kapslade transaktioner ske utan att programmeraren vet om det. En komponentfunktion kan innehålla eller inte innehålla en databastransaktion (detta är komponentens inkapslade hemlighet. Se Informationsdöljning ). Om ett anrop till en sådan komponentfunktion görs inom en BEGIN - COMMIT-parentes, uppstår kapslade transaktioner. Eftersom populära databaser som MySQL inte tillåter kapsling av BEGIN - COMMIT-parenteser behövs ett ramverk eller en transaktionsövervakare för att hantera detta. När vi talar om kapslade transaktioner bör det klargöras att denna funktion är DBMS-beroende och inte är tillgänglig för alla databaser.

Teorin för kapslade transaktioner liknar teorin för platta transaktioner.

Bankbranschen bearbetar vanligtvis finansiella transaktioner med öppna kapslade transaktioner, [ citation needed ] vilket är en lösare variant av den kapslade transaktionsmodellen som ger högre prestanda samtidigt som den accepterar de medföljande avvägningarna av inkonsekvens .

Vidare läsning

  •   Gerhard Weikum, Gottfried Vossen, Transaktionsinformationssystem: teori, algoritmer och praktiken för samtidighetskontroll och återhämtning , Morgan Kaufmann, 2002, ISBN 1-55860-508-8