Transaksi dan mekanisme kawalannya

Transaksi

Transaksi ialah urutan operasi pada data yang mempunyai permulaan dan penghujung.

Transaksi ialah pelaksanaan berurutan operasi baca dan tulis. Pengakhiran transaksi boleh sama ada menyimpan perubahan (komit) atau membatalkan perubahan (rollback). Berhubung dengan pangkalan data, transaksi terdiri daripada beberapa permintaan yang dianggap sebagai permintaan tunggal.

Urus niaga mesti memenuhi sifat ACID

Atomiti. Urus niaga sama ada selesai sepenuhnya atau tidak sama sekali.

Konsisten. Apabila menyelesaikan transaksi, sekatan yang dikenakan ke atas data (contohnya, kekangan dalam pangkalan data) tidak boleh dilanggar. Konsistensi membayangkan bahawa sistem akan dipindahkan dari satu keadaan betul ke keadaan betul yang lain.

Pengasingan. Transaksi yang berjalan secara selari tidak seharusnya mempengaruhi satu sama lain, contohnya, menukar data yang digunakan oleh transaksi lain. Hasil daripada melaksanakan urus niaga selari hendaklah sama seperti jika urus niaga itu dilaksanakan secara berurutan.

Kelestarian. Sebaik sahaja dilakukan, perubahan tidak seharusnya hilang.

Log urus niaga

Log menyimpan perubahan yang dibuat oleh transaksi, memastikan atomicity dan kestabilan data sekiranya berlaku kegagalan sistem

Log mengandungi nilai yang ada pada data sebelum dan selepas ia ditukar oleh transaksi. Strategi log tulis ke hadapan memerlukan penambahan entri log tentang nilai sebelumnya sebelum permulaan, dan tentang nilai akhir selepas transaksi selesai. Sekiranya sistem berhenti secara tiba-tiba, pangkalan data membaca log dalam susunan terbalik dan membatalkan perubahan yang dibuat oleh transaksi. Setelah mengalami transaksi yang terganggu, pangkalan data melaksanakannya dan membuat perubahan mengenainya pada log. Berada dalam keadaan pada masa kegagalan, pangkalan data membaca log dalam susunan hadapan dan mengembalikan perubahan yang dibuat oleh transaksi. Dengan cara ini, kestabilan urus niaga yang telah dilakukan dan keatoman urus niaga yang terganggu dipelihara.

Hanya melaksanakan semula transaksi yang gagal tidak mencukupi untuk pemulihan.

Contoh. Pengguna mempunyai $500 dalam akaunnya dan pengguna memutuskan untuk mengeluarkannya daripada ATM. Dua transaksi sedang dijalankan. Yang pertama membaca nilai baki dan jika terdapat dana yang mencukupi pada baki, ia mengeluarkan wang kepada pengguna. Yang kedua menolak jumlah yang diperlukan daripada baki. Katakan sistem ranap dan operasi pertama gagal, tetapi yang kedua gagal. Dalam kes ini, kami tidak boleh mengeluarkan semula wang kepada pengguna tanpa mengembalikan sistem kepada keadaan asalnya dengan baki positif.

Tahap penebat

Baca Komited

Masalah Bacaan Kotor ialah transaksi boleh membaca hasil perantaraan transaksi lain.

Contoh. Nilai baki awal ialah $0. T1 menambah $50 pada baki anda. T2 membaca nilai baki ($50). T1 membuang perubahan dan keluar. T2 meneruskan pelaksanaan dengan data baki yang salah.

Penyelesaiannya ialah membaca data tetap (Read Committed), yang melarang membaca data yang diubah oleh transaksi. Jika transaksi A telah menukar set data tertentu, maka transaksi B, apabila mengakses data ini, terpaksa menunggu transaksi A selesai.

Bacaan Boleh Diulang

Masalah Kemas Kini Hilang. T1 menyimpan perubahan di atas perubahan T2.

Contoh. Nilai baki awal ialah $0 dan dua transaksi mengisi semula baki secara serentak. T1 dan T2 membaca baki $0. T2 kemudian menambah $200 kepada $0 dan menyimpan hasilnya. T1 menambah $100 hingga $0 dan menyimpan hasilnya. Keputusan akhir ialah $100 dan bukannya $300.

Masalah bacaan tidak boleh berulang. Membaca data yang sama berulang kali mengembalikan nilai yang berbeza.

Contoh. T1 membaca nilai baki $0. T2 kemudian menambah $50 pada baki dan berakhir. T1 membaca data sekali lagi dan mendapati percanggahan dengan hasil sebelumnya.

Bacaan Berulang memastikan bahawa bacaan kedua akan mengembalikan hasil yang sama. Data yang dibaca oleh satu transaksi tidak boleh diubah dalam yang lain sehingga transaksi selesai. Jika transaksi A telah membaca set data tertentu, maka transaksi B, apabila mengakses data ini, terpaksa menunggu transaksi A selesai.

Bacaan tersusun (Boleh Bersiri)

Masalah Phantom Reads. Dua pertanyaan yang memilih data berdasarkan keadaan tertentu mengembalikan nilai yang berbeza.

Contoh. T1 meminta bilangan semua pengguna yang bakinya melebihi $0 tetapi kurang daripada $100. T2 memotong $1 daripada pengguna dengan baki $101. T1 mengeluarkan semula permintaan.

Bacaan tersusun (Boleh Bersiri). Urus niaga dilaksanakan secara berurutan sepenuhnya. Dilarang mengemas kini atau menambah rekod yang termasuk dalam syarat permintaan. Jika transaksi A telah meminta data daripada keseluruhan jadual, maka keseluruhan jadual dibekukan untuk transaksi lain sehingga transaksi A selesai.

Penjadual

Menetapkan susunan operasi yang perlu dilakukan semasa urus niaga selari

Menyediakan tahap pengasingan tertentu. Jika hasil operasi tidak bergantung pada pesanan mereka, maka operasi tersebut adalah komutatif (Permutable). Operasi membaca dan operasi pada data yang berbeza adalah komutatif. Operasi baca-tulis dan tulis-tulis tidak komutatif. Tugas penjadual adalah untuk menyelang operasi yang dilakukan oleh urus niaga selari supaya hasil pelaksanaan adalah bersamaan dengan pelaksanaan berurutan transaksi.

Mekanisme untuk mengawal kerja selari (Concurrency Control)

Optimis adalah berdasarkan pengesanan dan penyelesaian konflik, pesimis didasarkan pada mencegah konflik daripada timbul.

Dalam pendekatan optimistik, berbilang pengguna mempunyai salinan data yang mereka gunakan. Orang pertama yang menyelesaikan pengeditan menyimpan perubahan, manakala yang lain mesti menggabungkan perubahan. Algoritma optimistik membolehkan konflik berlaku, tetapi sistem mesti pulih daripada konflik.

Dengan pendekatan pesimis, pengguna pertama yang menangkap data menghalang orang lain daripada menerima data. Sekiranya konflik jarang berlaku, adalah bijak untuk memilih strategi optimis, kerana ia memberikan tahap keselarasan yang lebih tinggi.

Mengunci

Jika satu transaksi telah mengunci data, maka transaksi lain mesti menunggu sehingga ia dibuka kunci apabila mengakses data.

Blok boleh ditindih pada pangkalan data, jadual, baris atau atribut. Kunci Dikongsi boleh dikenakan pada data yang sama oleh beberapa transaksi, membenarkan semua transaksi (termasuk yang mengenakannya) membaca, melarang pengubahsuaian dan penangkapan eksklusif. Kunci Eksklusif boleh dikenakan oleh hanya satu transaksi, membenarkan sebarang tindakan transaksi yang mengenakan, melarang sebarang tindakan oleh orang lain.

Kebuntuan ialah keadaan di mana urus niaga berakhir dalam keadaan tertunda yang berlangsung selama-lamanya.

Contoh. Transaksi pertama menunggu data yang ditangkap oleh yang kedua dikeluarkan, manakala yang kedua menunggu data yang ditangkap oleh yang pertama dikeluarkan.

Penyelesaian optimistik kepada masalah kebuntuan membolehkan kebuntuan berlaku, tetapi kemudian memulihkan sistem dengan melancarkan semula salah satu transaksi yang terlibat dalam kebuntuan.

Kebuntuan dicari pada selang waktu tertentu. Salah satu kaedah pengesanan adalah mengikut masa, iaitu menganggap kebuntuan telah berlaku jika transaksi mengambil masa terlalu lama untuk diselesaikan. Apabila kebuntuan ditemui, salah satu urus niaga ditarik balik, membolehkan transaksi lain yang terlibat dalam kebuntuan selesai. Pilihan mangsa boleh berdasarkan nilai transaksi atau kekananan mereka (skim Tunggu-Mati dan Wound-wait).

Setiap transaksi T cap masa ditetapkan TS yang mengandungi masa mula urus niaga.

Tunggu-Mati.

Jika TS(Ti) < TS(Tj), Kemudian Ti menunggu, jika tidak Ti digulung semula dan bermula semula dengan cap masa yang sama.

Jika transaksi muda telah memperoleh sumber dan transaksi lama meminta sumber yang sama, maka transaksi lama dibenarkan menunggu. Jika transaksi yang lebih lama telah memperoleh sumber, maka transaksi yang lebih muda yang meminta sumber itu akan ditarik balik.

Luka-tunggu.

Jika TS(Ti) < TS(Tj), Kemudian Tj gulung semula dan bermula semula dengan cap masa yang sama, jika tidak Ti menunggu.

Jika transaksi yang lebih muda telah memperoleh sumber dan transaksi yang lebih lama meminta sumber yang sama, maka transaksi yang lebih muda akan ditarik balik. Jika transaksi yang lebih lama telah memperoleh sumber, maka transaksi yang lebih muda yang meminta sumber itu dibenarkan menunggu. Pemilihan mangsa berasaskan keutamaan menghalang kebuntuan, tetapi melancarkan urus niaga yang tidak menemui jalan buntu. Masalahnya ialah transaksi boleh ditarik balik berkali-kali kerana... urus niaga yang lebih lama mungkin menyimpan sumber untuk masa yang lama.

Penyelesaian pesimis kepada masalah kebuntuan tidak membenarkan transaksi mula dilaksanakan jika terdapat risiko kebuntuan.

Untuk mengesan kebuntuan, graf dibina (graf menunggu, graf tunggu), bucunya adalah urus niaga, dan tepi diarahkan daripada urus niaga menunggu pelepasan data kepada urus niaga yang telah menangkap data ini. Kebuntuan dianggap telah berlaku jika graf mempunyai gelung. Membina graf tunggu, terutamanya dalam pangkalan data teragih, adalah prosedur yang mahal.

Penguncian dua fasa - mengelakkan kebuntuan dengan merampas semua sumber yang digunakan oleh transaksi pada permulaan transaksi dan melepaskannya pada akhir

Semua operasi menyekat mesti mendahului yang pertama membuka kunci. Ia mempunyai dua fasa - Fasa Tumbuh, semasa genggaman terkumpul, dan Fasa Pengecutan, semasa genggaman dilepaskan. Jika mustahil untuk menangkap salah satu sumber, urus niaga bermula semula. Ada kemungkinan transaksi tidak akan dapat memperoleh sumber yang diperlukan, sebagai contoh, jika beberapa transaksi bersaing untuk sumber yang sama.

Komit dua fasa memastikan bahawa komit dilaksanakan pada semua replika pangkalan data

Setiap pangkalan data memasukkan maklumat tentang data yang akan ditukar ke dalam log dan bertindak balas kepada penyelaras OK (Fasa Pengundian). Selepas semua orang menjawab OK, penyelaras menghantar isyarat yang mewajibkan semua orang untuk komited. Selepas melakukan, pelayan bertindak balas OK; jika sekurang-kurangnya satu tidak bertindak balas OK, maka penyelaras menghantar isyarat untuk membatalkan perubahan kepada semua pelayan (Fasa Penyiapan).

Kaedah cap masa

Transaksi yang lebih lama digulingkan semula apabila cuba mengakses data yang terlibat oleh transaksi yang lebih muda

Setiap transaksi diberikan cap waktu TS sepadan dengan masa mula pelaksanaan. Jika Ti lebih tua Tj, Kemudian TS(Ti) < TS(Tj).

Apabila transaksi ditarik balik, ia diberikan cap waktu baharu. Setiap objek data Q terlibat dalam transaksi ditandakan dengan dua label. W-TS(Q) β€” cap masa transaksi termuda yang berjaya melengkapkan rekod Q. R-TS(Q) β€” cap masa transaksi termuda yang melakukan rekod baca pada Q.

Apabila transaksi T permintaan untuk membaca data Q Terdapat dua pilihan.

Jika TS(T) < W-TS(Q), iaitu, data telah dikemas kini oleh transaksi yang lebih muda, kemudian transaksi T berguling ke belakang.

Jika TS(T) >= W-TS(Q), maka bacaan dilakukan dan R-TS(Q) sedang menjadi MAX(R-TS(Q), TS(T)).

Apabila transaksi T meminta perubahan data Q Terdapat dua pilihan.

Jika TS(T) < R-TS(Q), iaitu, data telah pun dibaca oleh transaksi yang lebih muda dan jika perubahan dibuat, konflik akan timbul. Transaksi T berguling ke belakang.

Jika TS(T) < W-TS(Q), iaitu, urus niaga cuba menulis ganti nilai yang lebih baharu, urus niaga T digulung semula. Dalam kes lain, perubahan dijalankan dan W-TS(Q) menjadi sama TS(T).

Tiada pembinaan graf menunggu yang mahal diperlukan. Urus niaga lama bergantung pada yang lebih baharu, jadi tiada kitaran dalam graf tunggu. Tidak ada kebuntuan kerana urus niaga tidak menunggu tetapi dibatalkan serta-merta. Pemulihan berkala adalah mungkin. Jika Ti tergolek dan Tj Saya membaca data yang saya ubah Ti, Kemudian Tj juga harus berguling ke belakang. Jika pada masa yang sama Tj telah dilakukan, maka akan berlaku pelanggaran prinsip kestabilan.

Salah satu penyelesaian kepada rollback berlatarkan. Transaksi melengkapkan semua operasi tulis pada penghujungnya dan transaksi lain mesti menunggu operasi itu selesai. Transaksi menunggu untuk dilakukan sebelum dibaca.

Thomas write rule - variasi kaedah cap masa di mana data yang dikemas kini oleh transaksi yang lebih muda adalah dilarang daripada ditulis ganti oleh yang lebih lama

transaksi T meminta perubahan data Q. Jika TS(T) < W-TS(Q), iaitu, urus niaga cuba menulis ganti nilai yang lebih baharu, transaksi T tidak digulung semula seperti dalam kaedah cap waktu.

Sumber: www.habr.com

Tambah komen