Tranzacție (computer)
În acest termen, există alte utilizări, a se vedea. Transaction (dezambiguizare).
Tranzacție (tranzacția Engl.) - un grup de operații consecutive la baza de date. care este o unitate logică de lucru cu datele. Tranzacția poate fi efectuată fie păstrarea integrității în întregime și cu succes a datelor și orice alte operațiuni care se extinde în paralel sau nu efectuate deloc, atunci nu ar trebui să producă nici un efect. Tranzacții procesate de sistemele de tranzacție. în procesul de care este creat istoricul tranzacțiilor.
Distinge succesive (normal), paralele și distribuite tranzacție. tranzacțiile distribuite implică utilizarea a mai mult de un sistem de tranzacție și necesită mult mai complexă logică (de exemplu, în două faze - o comitere în două faze protocol de tranzacție). De asemenea, în unele sisteme implementate de tranzacții independent sau sub-tranzacții care fac parte autonomă a tranzacției mamă.
Exemplu: este necesar să se transfere în contul bancar numărul 5 datorită numărului 7 în mărime de 10 unități monetare. Acest lucru poate fi realizat, de exemplu, secvența redusă a acțiunilor:
- Citiți soldul numărul de cont 5.
- Reduce soldul de 10 unități monetare.
- Salvați noul echilibru al numărului de cont 5.
- Citiți soldul numărul de cont 7.
- Sporirea soldului de 10 unități monetare.
- Salvați noul echilibru al numărului de cont 7.
Acești pași reprezintă o unitate logică de lucru „de numerar de transfer între conturi,“ și, astfel, sunt tranzacții. Dacă anulați această tranzacție, de exemplu, în mijloc, și nu pentru a anula toate modificările, este ușor să părăsească numărul titularului de cont 5 fără 10 unități, în timp ce proprietarul numărul de cont 7 nu le va primi.
Una dintre cele mai comune set de cerințe la sistemul de tranzacționare și de tranzacție este un set de ACID (atomicitate, coerență, izolare, durabilitate). Cerințe ACID sunt formulate în principal, la sfârșitul anilor 1970, Jim Gray [1]. Cu toate acestea, există sisteme specializate cu proprietăți tranzacționale slăbite [2].
nivelurile de izolare tranzacție
În mod ideal, o tranzacție de utilizatori diferiți ar trebui să fie efectuată astfel încât să se creeze iluzia utilizatorul a tranzacției curente pe care - numai. În realitate, cu toate acestea, din motive de eficiență și pentru a efectua anumite sarcini specifice, baze de date oferă diferite niveluri de izolare tranzacție.
Nivelele sunt descrise, în scopul de a crește izolarea tranzacției și, în consecință, fiabilitatea datelor.
- 0 - Citirea datelor (neconfirmat murdare citește) (Read neangajată, murdar Read) - lectură modificările neangajate în ambele tranzacții lor și tranzacții concurente. Nu există nici o garanție că datele modificate de alte tranzacții nu vor fi modificate în orice moment, ca urmare a rollback, astfel încât această lectură este o sursă potențială de eroare. Modificările nu pot fi pierdute (pierdute modificări), poate irepetabilă citește și fantasme.
- 1 - Citirea datelor verificate (Read Angajate) - citirea toate modificările tranzacției și a tranzacțiilor concurente înregistrate modificări. mărunțiș și murdar reads nu sunt permise, pot exista irepetabilă citește și fantasme.
- 2 - Citire repetabilă (Citire repetabilă, Instantaneu) - citirea toate modificările de tranzacție sale, modificările efectuate tranzacții paralele după începutul său, nu este disponibil. mărunțiș, lectură murdar și irepetabil este imposibil, fantasme posibile.
- 3 - Serializable (Serializable) - tranzacții serializabile. Rezultatul execuției paralele tranzacție serializabilă cu alte tranzacții ar trebui să fie în mod logic echivalentă cu rezultatul orice execuție secvențială. nu apar probleme de sincronizare.
Cu cât nivelul de izolare, cu atât mai multe resurse sunt necesare pentru a le oferi. Prin urmare, izolarea crescută poate reduce viteza de execuție a tranzacțiilor concurente care este „plata“ pentru îmbunătățirea fiabilității.
Nivelul de izolare a bazei de date de tranzacție poate fi selectată pentru toate tranzacțiile dintr-o dată și pentru o anumită tranzacție. În mod implicit, cele mai multe baze de date utilizate de nivelul 1 (Read Angajate). Nivelul 0 este folosit în principal pentru modificările apărute în urmărirea tranzacțiilor lungi sau citi date rar în schimbare. Nivelurile 2 și 3 sunt utilizate pentru exigente izolare tranzacție.
Punerea în aplicare integrală a proprietăților de izolare niveluri acide și nu este o sarcină banală. Prelucrarea rezultatelor date de intrare într-un număr mare de modificări mici, inclusiv actualizarea atât a tabelelor și indexurile. Aceste modificări au potențialul de a eșua: din spațiu pe disc, operațiunea durează prea mult timp (timeout), etc. Sistemul trebuie să fie, în caz de eșec în mod corespunzător pentru a readuce baza de date de stat înainte de tranzacție ...
Primele baze de date comerciale (de exemplu, IBM DB2), utilizat exclusiv de blocare a accesului la date pentru proprietățile ACID. Dar un număr mare de încuietori care duce la o scădere substanțială a performanțelor. Există două familii populare de soluții la această problemă, ceea ce reduce numărul de blocări:
Dezvoltarea în continuare a tehnologiilor de gestionare a bazei de date a dus la apariția unor tehnologii de blocare-free. Ideea de a controla accesul concurente prin intermediul amprentei de timp (de control bazat pe concurenta a amprentei de timp) a fost elaborat și a dus la apariția arhitecturii MVCC multi-versiune. Aceste tehnologii nu necesită modificări de logare, fără umbră de pagini. Arhitectura, implementat în Oracle 7.x și versiuni mai vechi înregistrări mai mari de pagini într-un segment special de derulare înapoi, dar ele sunt încă disponibile pentru lectură. În cazul în care citirea cade de pe pagina de tranzacție, timestamp-ul este mai nou decât începutul lecturii, datele sunt preluate din segmentul rollback (de exemplu, un „vechi“ versiune). Pentru a sprijini această lucrare se realizează jurnalul de tranzacții, dar în contrast cu „exploatarea forestieră preempțiune“, aceasta nu conține date. Lucrul cu el este compus din trei etape logice:
- intenția de înregistrare pentru a face unele operațiuni
- Pentru a efectua o sarcină prin copierea paginilor variabile originale din segmentul rollback
- Scrieți că totul se face corect
Jurnalul de tranzacții coroborat cu segmentul rollback (o zonă în care este stocată o copie a tuturor modificat în datele tranzacției) asigură integritatea datelor. În cazul unei defecțiuni proceduri de recuperare a începe, care se uită la unele dintre intrările sale, după cum urmează:
- În cazul în care înregistrarea daune, eșecul a avut loc în momentul de a pune un semn în revista. Deci, nimic important să nu piardă, ignora această eroare.
- Dacă toate intrările marcate ca finalizate cu succes, eșecul a avut loc între tranzacții, nu există, de asemenea, nici o pierdere.
- În cazul în care revista are o tranzacție ciot, eșecul a avut loc în timpul înregistrării pe disc. În acest caz, ne restabilim versiunea veche a datelor din segmentul rollback.