Databastransaktion
En databastransaktion symboliserar en arbetsenhet, utförd inom ett databashanteringssystem (eller liknande system) mot en databas , som behandlas på ett sammanhängande och tillförlitligt sätt oberoende av andra transaktioner. En transaktion representerar i allmänhet varje förändring i en databas. Transaktioner i en databasmiljö har två huvudsakliga syften:
- Att tillhandahålla tillförlitliga arbetsenheter som tillåter korrekt återställning från fel och håller en databas konsekvent även i fall av systemfel. Till exempel: när exekvering avbryts i förtid och oväntat (helt eller delvis) i vilket fall många operationer på en databas förblir ofullbordade, med oklart status.
- För att ge isolering mellan program som får åtkomst till en databas samtidigt. Om denna isolering inte tillhandahålls, är programmens resultat möjligen felaktiga.
I ett databashanteringssystem är en transaktion en enda enhet av logik eller arbete, ibland uppbyggd av flera operationer. Varje logisk beräkning som görs i ett konsekvent läge i en databas kallas en transaktion. Ett exempel är en överföring från ett bankkonto till ett annat: den fullständiga transaktionen kräver att man subtraherar beloppet som ska överföras från ett konto och lägger till samma belopp till det andra.
En databastransaktion måste per definition vara atomär (den måste antingen vara komplett i sin helhet eller inte ha någon som helst effekt), konsekvent (den måste överensstämma med befintliga begränsningar i databasen), isolerad (den får inte påverka andra transaktioner) och varaktig (det måste skrivas till beständig lagring). Databasutövare hänvisar ofta till dessa egenskaper hos databastransaktioner med akronymen ACID .
Syfte
Databaser och andra datalager som behandlar dataintegriteten som av största vikt inkluderar ofta förmågan att hantera transaktioner för att upprätthålla dataintegriteten. En enskild transaktion består av en eller flera oberoende arbetsenheter, där varje läser och/eller skriver information till en databas eller annat datalager. När detta händer är det ofta viktigt att se till att all sådan behandling lämnar databasen eller datalagret i ett konsekvent tillstånd.
Exempel från dubbel bokföringssystem illustrerar ofta begreppet transaktioner. I dubbel bokföring kräver varje debitering registrering av en tillhörande kredit. Om man skriver en check på 100 USD för att köpa matvaror, måste ett transaktionssystem med dubbel bokföring registrera följande två poster för att täcka den enda transaktionen:
- Debitera 100 USD på utgiftskontot för dagligvaror
- Kreditera $100 till checkkontot
Ett transaktionssystem skulle få båda posterna att passera eller så skulle båda posterna misslyckas. Genom att behandla inspelningen av flera poster som en atomär transaktionsenhet för arbetet upprätthåller systemet integriteten hos de registrerade data. Med andra ord, ingen hamnar i en situation där en debitering registreras men ingen tillhörande kredit registreras, eller vice versa.
Transaktionsdatabaser
En transaktionsdatabas är ett DBMS som tillhandahåller ACID-egenskaperna för en uppsättning databasoperationer inom parentes (begin-commit). Alla skrivoperationer inom en transaktion har en allt-eller-inget-effekt, det vill säga antingen lyckas transaktionen och alla skrivningar träder i kraft, eller så förs databasen till ett tillstånd som inte inkluderar någon av skrivningarna av transaktionen . Transaktioner säkerställer också att effekten av samtidiga transaktioner uppfyller vissa garantier, så kallad isoleringsnivå . Den högsta isoleringsnivån är serialiserbarhet , vilket garanterar att effekten av samtidiga transaktioner är likvärdig med seriell (dvs. sekventiell) exekvering.
De flesta moderna relationsdatabashanteringssystem stöder transaktioner. NoSQL- databaser prioriterar skalbarhet tillsammans med stödjande transaktioner för att garantera datakonsistens i händelse av samtidiga uppdateringar och åtkomster.
I ett databassystem kan en transaktion bestå av en eller flera datamanipuleringssatser och frågor, varvid varje läser och/eller skriver information i databasen. Användare av databassystem anser att datakonsistens och integritet är mycket viktigt. En enkel transaktion skickas vanligtvis till databassystemet på ett språk som SQL insvept i en transaktion, med ett mönster som liknar följande:
- Börja transaktionen.
- Utför en uppsättning datamanipulationer och/eller frågor.
- Om inget fel uppstår, genomför transaktionen.
- Om ett fel uppstår återställer du transaktionen.
En transaktionsbekräftelseoperation kvarstår alla resultat av datamanipulationer inom ramen för transaktionen till databasen. En återställning av transaktionen kvarstår inte de partiella resultaten av datamanipulationer inom ramen för transaktionen till databasen. I inget fall kan en deltransaktion övergå till databasen eftersom det skulle lämna databasen i ett inkonsekvent tillstånd.
Internt lagrar och bearbetar fleranvändardatabaser transaktioner, ofta med hjälp av ett transaktions- ID eller XID.
Det finns flera olika sätt för transaktioner att genomföras förutom det enkla sättet som dokumenterats ovan. Kapslade transaktioner , till exempel, är transaktioner som innehåller uttalanden inom dem som startar nya transaktioner (dvs. deltransaktioner). Flernivåtransaktioner är en variant av kapslade transaktioner där deltransaktionerna sker på olika nivåer av en skiktad systemarkitektur (t.ex. med en operation på databasmotornivå, en operation på operativsystemnivå). En annan typ av transaktion är kompensationstransaktionen .
I SQL
Transaktioner är tillgängliga i de flesta SQL-databasimplementeringar, men med varierande nivåer av robusthet. Till exempel MySQL stödja transaktioner från tidig version 3.23, men InnoDB- lagringsmotorn var inte standard före version 5.5. Den tidigare tillgängliga lagringsmotorn, MyISAM, stöder inte transaktioner.
En transaktion startas vanligtvis med kommandot BEGIN
(även om SQL-standarden anger START TRANSACTION
). När systemet bearbetar ett COMMIT-
uttalande, slutar transaktionen med framgångsrikt slutförande. En ROLLBACK
-sats kan också avsluta transaktionen och ångra allt arbete som utförts sedan BEGIN
. Om autocommit inaktiverades när en transaktion startade, kommer autocommit också att återaktiveras när transaktionen är slut.
Man kan ställa in isoleringsnivån för individuella transaktionsoperationer såväl som globalt. På den högsta nivån ( READ COMMITTED
) kommer resultatet av en operation som utförs efter att en transaktion har startat att förbli osynlig för andra databasanvändare tills transaktionen har avslutats. På den lägsta nivån ( LÄS OENGAGERAD
), som ibland kan användas för att säkerställa hög samtidighet, kommer sådana förändringar att vara omedelbart synliga.
Objektdatabaser
Relationsdatabaser är traditionellt sammansatta av tabeller med fast storlek på fält och poster. Objektdatabaser består av blobbar av variabel storlek , möjligen som kan serialiseras eller innehåller en mime-typ . De grundläggande likheterna mellan relations- och objektdatabaser är starten och commit eller rollback .
Efter att ha startat en transaktion låses databasposter eller objekt, antingen skrivskyddat eller läs-skriv. Läser och skriver kan då förekomma. När transaktionen är fullständigt definierad, genomförs eller rullas ändringar tillbaka atomärt , så att det inte finns någon inkonsekvens i slutet av transaktionen .
Distribuerade transaktioner
Databassystem implementerar distribuerade transaktioner som transaktioner som kommer åt data över flera noder. En distribuerad transaktion upprätthåller ACID-egenskaperna över flera noder och kan inkludera system som databaser, lagringshanterare, filsystem, meddelandesystem och andra datahanterare. I en distribuerad transaktion finns det vanligtvis en enhet som koordinerar hela processen för att säkerställa att alla delar av transaktionen tillämpas på alla relevanta system.
Transaktionella filsystem
Namesys Reiser4 -filsystemet för Linux stöder transaktioner, och från och med Microsoft Windows Vista stöder Microsoft NTFS- filsystemet distribuerade transaktioner över nätverk. Det pågår forskning om mer datakoherenta filsystem, såsom Warp Transactional Filesystem (WTF).
Se även
Vidare läsning
- Philip A. Bernstein , Eric Newcomer (2009): Principles of Transaction Processing , 2nd Edition , Morgan Kaufmann (Elsevier), ISBN 978-1-55860-623-4
- Gerhard Weikum, Gottfried Vossen (2001), Transaktionsinformationssystem: teori, algoritmer och praktiken för samtidighetskontroll och återhämtning , Morgan Kaufmann, ISBN 1-55860-508-8