Kawalan serempak berbilang versi

Kawalan serempak berbilang versi (bahasa Inggeris: multiversion concurrency control, MCC atau MVCC), ialah kaedah kawalan serempak yang selalunya digunakan oleh sistem pengurusan pangkalan data untuk memberikan capaian serempak ke pangkalan data tersebut dan di dalam bahasa pengaturcaraan untuk melaksanakan ingatan bertransaksi.[1]

Tanpa kawalan serempak, jika seseorang membaca daripada pangkalan data pada masa yang sama seseorang yang lain menulis kepadanya, si pembaca berkemungkinan hanya melihat data separuh tertulis atau tidak konsisten. Sebagai contoh, semasa membuat pemindahan wayar antara dua akaun bank, jika baki di bank dibaca apabila wang sudah dikeluarkan daripada akaun pemberi dan sebelum ia didepositkan kepada akaun penerima, ia akan mengakibatkan wang nampak hilang daripada bank tersebut.

Contoh sunting

Baca-tulis serempak sunting

Pada Waktu = 1, pangkalan data mungkin berkeadaan:

Waktu Objek 1 Objek 2
0 "Foo" oleh T0 "Bar" oleh T0
1 "Hello" oleh T1

T0 menulis Objek 1="Foo" dan Objek 2="Bar". Kemudian T1 pula menulis Objek 1="Hello" tanpa menyentuh nilai Objek 2. Nilai baru bagi Objek 1 akan menggantikan nilai pada waktu 0 untuk semua transaksi yang bermula selepas T1 melaku (commit) dan dari sini, versi 0 bagi Objek 1 sudah boleh dikutipsampahkan.

Sekiranya terdapat transaksi panjang, T2 memulakan operasi membaca Objek 2 dan Objek 1 selepas T1 melaku dan terdapat transaksi serempak T3 membuat kemaskini yang menghapuskan Objek 2 dan menambah Objek 3="Foo-Bar", keadaan pangkalan data akan menjadi seperti di waktu 2:

Waktu Objek 1 Objek 2 Objek 3
0 "Foo" oleh T0 "Bar" oleh T0
1 "Hello" oleh T1
2 (terhapus) oleh T3 "Foo-Bar" oleh T3

Terdapat versi baru pada waktu 2 bagi Objek 2 yang ditandakan sebagai terhapus dan Objek 3 yang baru. Oleh kerana T2 dan T3 berjalan serempak, T2 melihat versi pangkalan data sebelum waktu 2, iaitu sebelum T3 melakukan penulisan, di mana T2 membaca Objek 2="Bar" dan Objek 1="Hello". Beginilah cara kawalan serempak berbilang versi membenarkan bacaan pengasingan snapshot tanpa sebarang penguncian.

Rujukan sunting

  1. ^ refs. Clojure. Retrieved on 2013-09-18.