Transaksi sareng mékanisme kontrolna

Transaksi

Transaksi mangrupa runtuyan operasi dina data nu boga awal jeung ahir.

Transaksi mangrupikeun palaksanaan berurutan tina operasi baca sareng tulis. Tungtung transaksi tiasa boh nyimpen parobahan (komit) atanapi ngabatalkeun perobahan (rollback). Dina hubungan database a, transaksi diwangun ku sababaraha requests nu dianggap salaku pamundut tunggal.

Transaksi kedah nyugemakeun sipat ACID

Atomitas. Transaksi boh réngsé lengkep atanapi henteu pisan.

Konsistensi. Nalika ngalengkepan transaksi, larangan anu ditumpukeun kana data (contona, konstrain dina pangkalan data) teu kedah dilanggar. Konsistensi nunjukkeun yén sistem bakal dialihkeun tina hiji kaayaan anu leres ka kaayaan anu leres anu sanés.

Isolasi. Transaksi anu dijalankeun paralel henteu kedah saling mangaruhan, contona, ngarobih data anu dianggo ku transaksi anu sanés. Hasil tina ngalaksanakeun transaksi paralel kedah sami sareng upami transaksi dieksekusi sacara berurutan.

Kelestarian. Sakali komitmen, parobahan teu kudu leungit.

Log transaksi

Log nyimpen parobahan anu dilakukeun ku transaksi, ngajamin atomisitas sareng stabilitas data upami aya kagagalan sistem

Log ngandung nilai-nilai anu aya data sateuacan sareng saatos dirobih ku transaksi. Strategi log Tulis-hareup merlukeun nambahkeun entri log ngeunaan nilai saméméhna saméméh mimiti, sarta ngeunaan nilai final sanggeus urus réngsé. Dina acara lirén ngadadak sistem, pangkalan data maca log dina urutan sabalikna sareng ngabatalkeun parobahan anu dilakukeun ku transaksi. Sanggeus encountered hiji urus interrupted, database executes eta jeung ngajadikeun parobahan ngeunaan eta log. Janten dina kaayaan dina waktos gagalna, pangkalan data maca log dina urutan maju sareng ngabalikeun parobihan anu dilakukeun ku transaksi. Ku cara ieu, stabilitas transaksi anu parantos dilakukeun sareng atomisitas transaksi anu kaganggu dilestarikan.

Kantun ngajalankeun deui transaksi anu gagal henteu cekap pikeun pamulihan.

Conto. Pamaké ngagaduhan $ 500 dina akunna sareng pangguna mutuskeun pikeun mundur tina ATM. Dua transaksi nuju lumangsung. Anu mimiti maca nilai kasaimbangan sareng upami aya dana anu cekap dina kasaimbangan, éta ngaluarkeun artos ka pangguna. Nu kadua subtracts jumlah diperlukeun ti kasaimbangan. Hayu urang nyebutkeun yén sistem nabrak jeung operasi kahiji gagal, tapi nu kadua. Dina hal ieu, urang teu bisa deui ngaluarkeun duit ka pamaké tanpa balik sistem ka kaayaan aslina kalawan kasaimbangan positif.

Tingkat insulasi

Baca Komitmen

Masalah Baca Kotor nyaéta yén transaksi tiasa maca hasil panengah tina transaksi anu sanés.

Conto. Nilai kasaimbangan awal nyaéta $0. T1 nambihan $ 50 kana kasaimbangan Anjeun. T2 maca nilai kasaimbangan ($ 50). T1 miceun perobahan sareng kaluar. T2 neruskeun palaksanaan kalawan data kasaimbangan lepat.

Solusina nyaéta maca data tetep (Read Committed), anu ngalarang maca data anu dirobih ku transaksi. Upami transaksi A parantos ngarobih sababaraha data, maka transaksi B, nalika ngaksés data ieu, kapaksa ngantosan transaksi A réngsé.

Maca anu tiasa diulang

Masalah Apdet Leungit. T1 nyimpen parobahan dina luhureun parobahan T2 urang.

Conto. Nilai kasaimbangan awal nyaeta $0 jeung dua transaksi sakaligus replenish kasaimbangan. T1 jeung T2 maca kasaimbangan $0. T2 lajeng nambahkeun $ 200 ka $ 0 tur nyimpen hasilna. T1 nambihan $ 100 ka $ 0 tur nyimpen hasilna. Hasil ahir nyaéta $100 tibatan $300.

Masalah maca anu teu tiasa diulang. Maca data anu sami sababaraha kali mulihkeun nilai anu béda.

Conto. T1 maca nilai kasaimbangan $0. T2 lajeng nambahkeun $ 50 kasaimbangan sarta tungtung. T1 maca data deui sarta manggihan bédana jeung hasil saméméhna.

Bacaan anu tiasa diulang mastikeun yén bacaan kadua bakal ngahasilkeun hasil anu sami. Data anu dibaca ku hiji transaksi henteu tiasa dirobih dina anu sanés dugi ka urus réngsé. Upami transaksi A parantos maca sakumpulan data, maka transaksi B, nalika ngaksés data ieu, kapaksa ngantosan transaksi A réngsé.

Diurutkeun bacaan (Serializable)

Masalah Phantom Reads. Dua queries nu milih data dumasar kana kaayaan nu tangtu balik nilai béda.

Conto. T1 nyuhunkeun jumlah sadaya pangguna anu kasaimbanganna langkung ageung ti $0 tapi kirang ti $100. T2 ngurangan $1 ti pamaké kalawan kasaimbangan $101. T1 reissues pamundut teh.

Maréntahkeun bacaan (Serializable). Transaksi dilaksanakeun sakumaha lengkep sequential. Dilarang pikeun ngapdet atanapi nambihan rékaman anu aya dina syarat pamundut. Lamun urus A geus dipénta data ti sakabéh tabel, lajeng sakabéh tabel beku pikeun transaksi sejenna dugi urus A réngsé.

Penjadwal

Nyetél urutan dimana operasi kudu dipigawé salila transaksi paralel.

Nyadiakeun tingkat isolasi husus. Upami hasil operasi henteu gumantung kana urutanna, maka operasi sapertos kitu mangrupikeun komutatif (Permutable). Operasi maca sareng operasi dina data anu béda nyaéta komutatif. Operasi maca-nulis sareng nyerat-nulis henteu komutatif. Tugas scheduler nyaéta pikeun interleave operasi anu dilakukeun ku transaksi paralel supados hasil palaksanaan sarua jeung palaksanaan sequential transaksi.

Mékanisme pikeun ngadalikeun padamelan paralel (Concurrency Control)

Optimis dumasar kana ngadeteksi sareng ngarengsekeun konflik, pesimis dumasar kana nyegah konflik timbul.

Dina pendekatan optimistis, sababaraha pamaké gaduh salinan data dina pembuangan maranéhanana. Jalma anu pangheulana ngaréngsékeun éditan nyimpen parobihan, sedengkeun anu sanés kedah ngahijikeun parobihan. Algoritma optimistis ngamungkinkeun konflik lumangsung, tapi sistem kedah pulih tina konflik éta.

Kalayan pendekatan pesimis, pangguna pangheulana nyandak data nyegah batur tina nampi data. Mun konflik jarang, éta wijaksana pikeun milih strategi optimistis, sabab nyadiakeun tingkat luhur concurrency.

Ngonci

Upami hiji transaksi parantos ngonci data, maka transaksi anu sanés kedah ngantosan dugi ka teu dikonci nalika ngaksés data.

Blok tiasa ditindih dina pangkalan data, méja, baris, atanapi atribut. Konci dibagikeun bisa ditumpukeun dina data anu sarua ku sababaraha transaksi, ngamungkinkeun sakabeh transaksi (kaasup hiji nu ditumpukeun) maca, prohibits modifikasi sarta newak ekslusif. Konci Eksklusif bisa ditumpukeun ku ngan hiji urus, ngamungkinkeun sagala lampah tina transaksi maksakeun, prohibits sagala lampah ku batur.

Deadlock mangrupakeun kaayaan dimana transaksi mungkas nepi dina kaayaan pending nu lasts salamina.

Conto. Transaksi kahiji ngantosan data anu dicandak ku anu kadua dileupaskeun, sedengkeun anu kadua ngantosan data anu dicandak ku anu munggaran dileupaskeun.

Solusi optimistis pikeun masalah deadlock ngamungkinkeun deadlock lumangsung, tapi lajeng recovers sistem ku rolling deui salah sahiji transaksi aub dina deadlock nu.

Deadlocks ditéang dina interval nu tangtu. Salah sahiji metodeu deteksi nyaéta ku waktos, nyaéta, anggap yén jalan buntu parantos kajantenan upami transaksi nyandak lami teuing pikeun réngsé. Nalika deadlock kapanggih, salah sahiji transaksi digulung deui, sahingga transaksi séjén kalibet dina deadlock pikeun ngalengkepan. Pilihan korban tiasa dumasar kana nilai transaksi atanapi senioritasna (Skéma Tunggu-Paeh sareng Wound-Antosan).

Unggal transaksi T a timestamp ditugaskeun TS ngandung waktu mimiti transaksi.

Antosan-Paeh.

upami TS(Ti) < TS(Tj)terus Ti ngantosan, disebutkeun Ti gulung deui tur mimitian deui ku timestamp sarua.

Lamun urus ngora geus kaala sumberdaya sarta urus heubeul requests sumberdaya sarua, lajeng urus heubeul diwenangkeun ngantosan. Lamun hiji urus heubeul geus kaala sumberdaya a, mangka urus ngora requesting sumberdaya nu bakal digulung deui.

Tatu-antosan.

upami TS(Ti) < TS(Tj)terus Tj gulung deui tur mimitian deui ku timestamp sarua, disebutkeun Ti ngantosan.

Lamun urus ngora geus kaala sumberdaya sarta urus heubeul requests sumberdaya sarua, mangka transaksi ngora bakal digulung deui. Lamun hiji urus heubeul geus kaala sumberdaya a, mangka urus ngora requesting sumberdaya nu diwenangkeun ngantosan. Pilihan korban dumasar-précedence nyegah deadlocks, tapi gulungan deui transaksi nu teu deadlocked. Masalahna nyaéta yén transaksi tiasa digulung deui sababaraha kali sabab ... hiji urus heubeul bisa nahan sumberdaya pikeun lila.

Hiji leyuran pesimis pikeun masalah deadlock teu ngidinan hiji urus dimimitian executing lamun aya resiko deadlock a.

Pikeun ngadeteksi deadlock a, grafik diwangun (nunggu grafik, antosan-pikeun-grafik), nu vertices nu transaksi, sarta edges diarahkeun ti transaksi ngantosan sékrési data kana transaksi nu geus direbut data ieu. A deadlock dianggap geus lumangsung lamun grafik ngabogaan loop a. Ngawangun grafik antosan, khususna dina database anu disebarkeun, mangrupikeun prosedur anu mahal.

Ngonci dua-fase - nyegah deadlocks ku ngarampas sadaya sumber daya anu dianggo ku transaksi dina awal transaksi sareng ngaleupaskeun di ahir.

Sadaya operasi meungpeuk kedah sateuacanna muka konci anu munggaran. Cai mibanda dua fase - Fase Tumuwuh, salila cekelan ngumpulkeun, jeung Fase Nyusut, salila cekelan dileupaskeun. Lamun teu mungkin keur nangkep salah sahiji sumberdaya, urus dimimitian deui. Ieu mungkin yen transaksi moal bisa acquire sumberdaya diperlukeun, contona, lamun sababaraha transaksi bersaing pikeun sumberdaya sarua.

Komitmen dua-fase mastikeun yén komitmen dieksekusi dina sadaya réplika database

Unggal database asupkeun informasi ngeunaan data nu bakal dirobah jadi log jeung responds ka koordinator OK (Fase Voting). Saatos sadayana ngaréspon OK, koordinator ngirim sinyal anu ngawajibkeun sadayana pikeun komitmen. Saatos committing, server ngabales OK; lamun sahanteuna hiji teu ngabales OK, teras koordinator ngirimkeun sinyal pikeun ngabolaykeun parobahan ka sadaya server (Fase Parantosan).

Métode timestamp

Transaksi anu langkung lami digulung deui nalika nyobian ngaksés data anu kalebet transaksi anu langkung ngora

Unggal transaksi ditugaskeun timestamp TS pakait jeung waktu mimiti palaksanaan. Lamun Ti langkung sepuh Tjterus TS(Ti) < TS(Tj).

Nalika urus digulung deui, ditugaskeun timestamp anyar. Unggal objék data Q aub dina urus ditandaan ku dua labél. W-TS(Q) - timestamp tina transaksi bungsu anu hasil réngsé rékaman leuwih Q. R-TS(Q) - timestamp tina transaksi bungsu anu dipigawé rékaman dibaca dina Q.

Nalika urus T requests maca data Q Aya dua pilihan.

upami TS(T) < W-TS(Q), nyaeta, data ieu diropéa ku urus ngora, lajeng urus T gulung deui.

upami TS(T) >= W-TS(Q), tuluy macana dilaksanakeun jeung R-TS(Q) Hal ieu jadi MAX(R-TS(Q), TS(T)).

Nalika urus T requests parobahan data Q Aya dua pilihan.

upami TS(T) < R-TS(Q), nyaeta, data geus dibaca ku urus ngora jeung lamun parobahan dijieun, konflik bakal timbul. Transaksi T gulung deui.

upami TS(T) < W-TS(Q), nyaeta, urus nyoba nimpa hiji nilai anyar, urus T digulung deui. Dina kasus séjén, parobahan dilumangsungkeun na W-TS(Q) janten sarua TS(T).

Taya konstruksi grafik ngantosan mahal diperlukeun. Transaksi anu langkung lami gumantung kana anu langkung énggal, janten henteu aya siklus dina grafik ngantosan. Henteu aya deadlocks sabab transaksi henteu diantosan tapi langsung digulung deui. Rollbacks Cascading mungkin. Lamun Ti digulung jauh, jeung Tj Kuring maca data anu kuring robih Titerus Tj ogé kudu gulung deui. Upami dina waktos anu sami Tj geus komitmen, mangka bakal aya palanggaran prinsip stabilitas.

Salah sahiji solusi pikeun cascading rollbacks. A urus nyampurnakeun sakabéh operasi nulis dina tungtungna, sarta transaksi sejenna kudu ngadagoan operasi anu réngsé. Transaksi ngantosan dilakukeun sateuacan dibaca.

Aturan nyerat Thomas - variasi metode timestamp dimana data anu diropéa ku transaksi anu langkung ngora dilarang ditimpa ku anu langkung lami

transaksi T requests parobahan data Q. Upami TS(T) < W-TS(Q), nyaeta, urus nyoba nimpa hiji nilai anyar, urus T teu digulung deui sakumaha dina metoda timestamp.

sumber: www.habr.com

Tambahkeun komentar