Transaksi lan mekanisme kontrol

Transaksi

Transaksi minangka urutan operasi ing data sing duwe wiwitan lan pungkasan.

Transaksi minangka eksekusi urut-urutan saka operasi maca lan nulis. Pungkasan transaksi bisa uga nyimpen owah-owahan (komit) utawa mbatalake owah-owahan (rollback). Ing hubungan karo database, transaksi kasusun saka sawetara panjalukan sing dianggep minangka request siji.

Transaksi kudu marem sifat ACID

Atomity. Transaksi wis rampung rampung utawa ora kabeh.

Konsistensi. Nalika ngrampungake transaksi, watesan sing ditrapake ing data (contone, kendala ing basis data) ora kudu dilanggar. Konsistensi tegese sistem bakal ditransfer saka siji negara sing bener menyang negara sing bener.

Isolasi. Transaksi sing mlaku bebarengan ora kena pengaruh, contone, ngganti data sing digunakake dening transaksi liyane. Asil eksekusi transaksi paralel kudu padha karo transaksi sing ditindakake kanthi urutan.

Kelestarian. Sawise setya, owah-owahan kudu ora ilang.

Log transaksi

Log nyimpen owah-owahan sing ditindakake dening transaksi, njamin atomisitas lan stabilitas data yen ana kegagalan sistem

Log kasebut ngemot nilai sing ana data sadurunge lan sawise diganti dening transaksi. Strategi log nulis ing ngarep mbutuhake nambahake entri log babagan nilai sadurunge sadurunge wiwitan, lan babagan nilai pungkasan sawise transaksi rampung. Yen kedadeyan tiba-tiba sistem mandheg, database maca log kanthi urutan mbalikke lan mbatalake owah-owahan sing ditindakake dening transaksi. Sawise nemoni transaksi sing diselani, database nglakokake lan nggawe owah-owahan ing log kasebut. Dadi ing negara nalika gagal, database maca log ing urutan maju lan ngasilake owah-owahan sing ditindakake dening transaksi. Kanthi cara iki, stabilitas transaksi sing wis ditindakake lan atomisitas transaksi sing diganggu bakal dilestarekake.

Mung nglakokake maneh transaksi sing gagal ora cukup kanggo pulih.

Tuladha. Pangguna duwe akun $500 lan pangguna mutusake kanggo mbatalake saka ATM. Loro transaksi lagi ditindakake. Sing pisanan maca nilai imbangan lan yen ana dana sing cukup ing imbangan, bakal ngetokake dhuwit kanggo pangguna. Kapindho nyuda jumlah sing dibutuhake saka imbangan. Ayo dadi ngomong sistem tabrakan lan operasi pisanan gagal, nanging kaloro. Ing kasus iki, kita ora bisa maneh nerbitake dhuwit kanggo pangguna tanpa bali sistem kanggo negara asli karo imbangan positif.

Tingkat insulasi

Maca Komitmen

Masalah Dirty Read yaiku transaksi bisa maca asil penengah saka transaksi liyane.

Tuladha. Nilai imbangan awal yaiku $0. T1 nambah $50 kanggo imbangan. T2 maca nilai imbangan ($50). T1 mbuwang owah-owahan lan metu. T2 nerusake eksekusi kanthi data imbangan sing salah.

Solusi kasebut yaiku maca data tetep (Read Committed), sing nglarang maca data sing diganti dening transaksi. Yen transaksi A wis ngganti set data tartamtu, transaksi B, nalika ngakses data iki, kudu ngenteni transaksi A rampung.

Wacan sing bisa diulang

Masalah Update ilang. T1 nyimpen owah-owahan ing ndhuwur owah-owahan T2.

Tuladha. Nilai imbangan awal yaiku $0 lan rong transaksi bebarengan ngisi imbangan. T1 lan T2 maca imbangan $0. T2 banjur nambah $ 200 kanggo $ 0 lan nyimpen asil. T1 nambah $ 100 kanggo $ 0 lan nyimpen asil. Asil pungkasan yaiku $100 tinimbang $300.

Masalah maca sing ora bisa dibaleni. Maca data sing padha bola-bali ngasilake nilai sing beda.

Tuladha. T1 maca nilai imbangan $0. T2 banjur nambah $ 50 kanggo imbangan lan ends. T1 maca data maneh lan nemokake bedo karo asil sadurunge.

Waca sing bisa diulang mesthekake yen maca kaping pindho bakal ngasilake asil sing padha. Data sing diwaca dening siji transaksi ora bisa diganti ing liyane nganti transaksi rampung. Yen transaksi A wis maca sakumpulan data tartamtu, banjur transaksi B, nalika ngakses data iki, dipeksa ngenteni transaksi A rampung.

Diurutake maca (Serializable)

Masalah Phantom Reads. Rong pitakon sing milih data adhedhasar kondisi tartamtu ngasilake nilai sing beda.

Tuladha. T1 njaluk nomer kabeh pangguna sing imbangane luwih saka $0 nanging kurang saka $100. T2 nyuda $1 saka pangguna kanthi saldo $101. T1 nerbitake maneh panjaluk kasebut.

Diurutake maca (Serializable). Transaksi dieksekusi kanthi lengkap. Dilarang nganyari utawa nambah cathetan sing ana ing syarat-syarat panyuwunan. Yen transaksi A wis njaluk data saka kabeh tabel, banjur kabeh tabel beku kanggo transaksi liyane nganti transaksi A rampung.

Penjadwal

Nyetel urutan operasi sing kudu ditindakake sajrone transaksi paralel.

Nyedhiyakake tingkat isolasi sing ditemtokake. Yen asil operasi ora gumantung ing urutane, banjur operasi kuwi commutative (Permutable). Operasi maca lan operasi ing data sing beda-beda minangka komutatif. Operasi maca-nulis lan nulis-nulis ora komutatif. Tugas panjadwal yaiku interleave operasi sing ditindakake dening transaksi paralel supaya asil eksekusi padha karo eksekusi transaksi sing berurutan.

Mekanisme kanggo ngontrol proyek paralel (Concurrency Control)

Optimis adhedhasar ndeteksi lan ngrampungake konflik, pesimis adhedhasar nyegah konflik.

Ing pendekatan optimistis, akeh pangguna duwe salinan data sing kasedhiya. Wong pisanan sing ngrampungake panyuntingan nyimpen owah-owahan, dene wong liya kudu nggabungake owah-owahan kasebut. Algoritma optimistis ngidini konflik bisa kedadeyan, nanging sistem kasebut kudu pulih saka konflik kasebut.

Kanthi pendekatan pesimis, pangguna pisanan sing njupuk data nyegah wong liya supaya ora nampa data kasebut. Yen konflik arang banget, iku wicaksana kanggo milih strategi optimistis, amarga menehi tingkat concurrency sing luwih dhuwur.

Ngunci

Yen salah siji transaksi wis ngunci data, banjur transaksi liyane kudu ngenteni nganti ora dikunci nalika ngakses data.

Blok bisa dilapis ing basis data, tabel, baris, utawa atribut. Shared Lock bisa dileksanakake ing data padha dening sawetara transaksi, ngidini kabeh transaksi (kalebu siji sing dileksanakake iku) kanggo maca, nglarang modifikasi lan dijupuk eksklusif. Kunci Eksklusif bisa dileksanakake mung siji transaksi, ngidini tumindak apa wae transaksi sing ditindakake, nglarang tumindak apa wae dening wong liya.

Deadlock minangka kahanan ing ngendi transaksi rampung ing negara sing ditundha sing ora ana watese.

Tuladha. Transaksi pisanan ngenteni data sing dijupuk dening sing kapindho dirilis, dene sing kapindho ngenteni data sing dijupuk dening sing pisanan dirilis.

Solusi optimistis kanggo masalah deadlock ngidini deadlock bisa kedadeyan, nanging banjur mbalekake sistem kasebut kanthi muter maneh salah sawijining transaksi sing ana ing deadlock.

Deadlocks digoleki ing interval tartamtu. Salah sawijining cara deteksi yaiku kanthi wektu, yaiku, nimbang manawa ana deadlock yen transaksi kasebut butuh wektu suwe. Nalika deadlock ketemu, salah siji saka transaksi mbalek maneh, saΓ©ngga transaksi liyane melu deadlock rampung. Pilihan korban bisa adhedhasar nilai transaksi utawa senioritas (Skema Enteni-Die lan Wound-wait).

Saben transaksi T a timestamp wis diutus TS ngemot wektu wiwitan transaksi.

Ngenteni-Mati.

yen TS(Ti) < TS(Tj), banjur Ti ngenteni, yen ora Ti muter maneh lan wiwit maneh karo timestamp padha.

Yen transaksi enom wis entuk sumber daya lan transaksi lawas njaluk sumber sing padha, banjur transaksi lawas diijini ngenteni. Yen transaksi sing luwih lawas wis entuk sumber daya, transaksi sing luwih enom sing njaluk sumber kasebut bakal dibatalake.

Tatu-ngenteni.

yen TS(Ti) < TS(Tj), banjur Tj muter maneh lan wiwit maneh karo timestamp padha, digunakake Ti ngenteni.

Yen transaksi sing luwih enom wis entuk sumber daya lan transaksi sing luwih lawas njaluk sumber daya sing padha, transaksi sing luwih enom bakal dibalekake maneh. Yen transaksi sing luwih lawas wis entuk sumber daya, transaksi sing luwih enom sing njaluk sumber kasebut diidini ngenteni. Pilihan korban basis precedence nyegah deadlocks, nanging mbalek maneh transaksi sing ora deadlocked. Masalahe yaiku transaksi bisa digulung kaping pirang-pirang amarga ... transaksi lawas bisa nahan sumber daya kanggo dangu.

Solusi pesimis kanggo masalah deadlock ora ngidini transaksi diwiwiti yen ana risiko deadlock.

Kanggo ndeteksi deadlock, grafik digawe (grafik tunggu, grafik tunggu), titik-titik kasebut minangka transaksi, lan pinggiran diarahake saka transaksi nunggu release data menyang transaksi sing wis dijupuk data iki. Kebuntuan dianggep wis kedadeyan yen grafik kasebut duwe loop. Mbangun grafik tunggu, utamane ing basis data sing disebarake, minangka prosedur sing larang.

Ngunci rong fase - nyegah deadlocks kanthi ngrebut kabeh sumber daya sing digunakake dening transaksi ing wiwitan transaksi lan ngeculake ing pungkasan.

Kabeh operasi pamblokiran kudu ndhisiki mbukak kunci pisanan. Wis rong fase - Fase Tuwuh, sajrone genggaman akumulasi, lan Fase Nyusut, sajrone genggaman dibebasake. Yen ora bisa nyekel salah sawijining sumber daya, transaksi kasebut diwiwiti maneh. Bisa uga transaksi ora bisa entuk sumber daya sing dibutuhake, contone, yen sawetara transaksi saingan kanggo sumber daya sing padha.

Komitmen rong fase mesthekake yen komit dieksekusi ing kabeh replika database

Saben database nglebokake informasi babagan data sing bakal diowahi dadi log lan nanggapi koordinator OK (Fase Voting). Sawise kabeh wis nanggapi OK, koordinator ngirim sinyal supaya kabeh wong kudu komitmen. Sawise nindakake, server nanggapi OK; yen paling ora ana sing nanggapi OK, banjur koordinator ngirim sinyal kanggo mbatalake owah-owahan menyang kabeh server (Fase Rampung).

Metode Timestamp

Transaksi sing luwih lawas dibalekake nalika nyoba ngakses data sing ditindakake dening transaksi sing luwih enom

Saben transaksi diwenehi tandha wektu TS cocog karo wektu wiwitan eksekusi. Yen Ti liwat Tj, banjur TS(Ti) < TS(Tj).

Nalika transaksi mbalek maneh, diutus timestamp anyar. Saben obyek data Q melu transaksi ditandhani karo rong label. W-TS (Q) - timestamp saka transaksi paling enom sing kasil rampung rekaman liwat Q. R-TS(Q) - timestamp saka transaksi paling enom sing nindakake rekaman maca ing Q.

Nalika transaksi T panjalukan kanggo maca data Q Ana rong pilihan.

yen TS(T) < W-TS (Q), yaiku, data kasebut dianyari dening transaksi sing luwih enom, banjur transaksi kasebut T muter maneh.

yen TS(T) >= W-TS (Q), banjur diwaca lan R-TS(Q) wis dadi MAX(R-TS(Q), TS(T)).

Nalika transaksi T njaluk owah-owahan data Q Ana rong pilihan.

yen TS(T) < R-TS(Q), yaiku, data wis diwaca dening transaksi sing luwih enom lan yen owah-owahan digawe, konflik bakal muncul. Transaksi T muter maneh.

yen TS(T) < W-TS (Q), yaiku, transaksi nyoba nimpa nilai sing luwih anyar, transaksi T digulung maneh. Ing kasus liyane, owah-owahan digawa metu lan W-TS (Q) dadi padha TS(T).

Ora mbutuhake konstruksi grafik tunggu sing larang. Transaksi lawas gumantung karo sing luwih anyar, mula ora ana siklus ing grafik tunggu. Ora ana deadlock amarga transaksi ora dienteni nanging langsung dibalekake. Rollbacks Cascading bisa. Yen Ti mbalek adoh lan Tj Aku maca data sing wis diganti Ti, banjur Tj uga kudu muter maneh. Yen ing wektu sing padha Tj wis kaleksanan, banjur bakal ana pelanggaran prinsip stabilitas.

Salah sawijining solusi kanggo rollbacks cascading. Transaksi ngrampungake kabeh operasi nulis ing pungkasan, lan transaksi liyane kudu ngenteni operasi kasebut rampung. Transaksi ngenteni dileksanakake sadurunge diwaca.

Aturan nulis Thomas - variasi saka metode timestamp sing data dianyari dening transaksi sing luwih enom dilarang ditimpa dening sing luwih lawas

Transaksi T njaluk owah-owahan data Q. Yen TS(T) < W-TS (Q), yaiku, transaksi nyoba kanggo nimpa nilai anyar, transaksi T ora mbalek maneh kaya ing cara timestamp.

Source: www.habr.com

Add a comment