Transaksi dan Concurrency
Assalamualaikum Wr. Wb
Setelah
mengetahui pengertian basis data, sistem basis data, dan integritas
data. Selanjutnya kita akan membahas apa itu transaksi dan concurenccy
dalam sistem basis data.. Transaksi pada basis data adalah satu atomic operasi berupa lojik pekerjaan maupun lojik recovery (pemulihan) yang bisa terdiri dari beberapa intruksi. Tujuan dari transaksi adalah menjaga database dari kehilangan data dan kerusakan, seperti system crash dan pengaksesan data yang sama secara bersamaan oleh dua aplikasi yang berbeda yang menimbulkan gangguan.
- Atomicity, semua berhasil atau semua gagal
- Consistency, transaksi mempertahankan konsistensi database
- Isolation, transaksi terisolasi satu dengan yang lain
- Durability, setelah commit update harus survive di database
Dan ada dua jenis transaksi yang paling penting dalam sistem basis data
adalah :
- Commit, memberi tanda bahwa transaksi telah selesai. Update dibuat permanen (bahkan jika setelah commit terjadi kegagalan system). Pada implementasinya, contohnya di konsol SQL command, setelah proses transaksi selesai untuk commit tinggal ketikkan -> commit;
- Rollback, memberi tanda bahwa transaksi gagal. Semua update harus di-undo. Pada implementasinya, contohnya di konsol SQL command, setelah proses transaksi selesai untuk membatalkan transaksi tadi tinggal ketikkan -> rollback;
Untuk lojik recovery atau system recovery database dilakukan
ketika terjadi kegagalan media, kegagalan system atau kesalahan pada transaksi.
Sistem recovery menggunakan fungsi rollback dan checkpoint. Checkpoint adalah
interval tertentu pada perjalanan transaksi basis data yang menyimpan keadaan
basis data saat itu. Checkpoint dapat dilakukan untuk me-recovery database
secara backward (undo) maupun forward (redo).
Sedangkan concurrency adalah sebuah mekanisme pada system basis data
yang mengijinkan banyak transaksi pada saat bersamaan untuk mengakses data yang
sama tanpa adanya gangguan. Pada umumnya terdapat 3 masalah utama pada
concurrency :
- Lost update problem, ketika dua user mengupdate dua buah data yang sama
- Contoh :
Satuan Waktu
|
Transaksi A
|
Transaksi B
|
1
|
Retrieve r
|
–
|
2
|
–
|
Retrieve r
|
3
|
Update r
|
–
|
4
|
–
|
Update r
|
- Dari contoh diatas, maka transaksi A tidak akan dianggap dan data update pada transaksi A akan di overwrite oleh transaksi B Ini akan menimbulkan lost update problem pada transaksi A.
- Uncommited dependency problem, ketika user yang satu me-retrieve data dan user yang lain me-rollback data tersebut
o Contoh
:
Satuan Waktu
|
Transaksi A
|
Transaksi B
|
1
|
–
|
Update r
|
2
|
Update r
|
–
|
3
|
–
|
Rollback
|
o Dari
contoh diatas, maka transaksi A akan menerima data yang salah karena pada transaksi
B saat di update terjadi kesalahan kemudian di rollback.
- Inconsistent analysis problem, ketika user yang satu meretrieve data dan user yang lain mengupdate data tersebut
o Contoh
:
Satuan Waktu
|
Transaksi A
|
Transaksi B
|
1
|
Retrieve r1
|
–
|
2
|
Retrieve r2
|
–
|
3
|
–
|
Update r1
|
4
|
–
|
Commit
|
5
|
Update r3 = r1 + r2
|
o Dari
contoh diatas, maka transaksi A akan menghasilkan data yang salah dan tidak
sesuai database karena saat analisis di transaksi A terjadi update data pada
salah satu datanya.
Untuk menangani masalah-masalah tersebut, dilakukan proses locking,
jika sebuah transaksi ingin record/resource tidak berubah dalam waktu tertentu
maka dia bisa meminta lock. Ada dua jenis lock yaitu :
- Exclusive Lock (Xlock) -> write lock
- Shared Lock (Slock) -> read lock
Bagaimana cara kerjanya?
- Jika transaksi A memegang Xlock pada sebuah record, maka permintaan lock (X,S) pada record yang sama harus diabaikan.
- Jika transaksi A memegang Slock pada record R maka :
- Permintaan Xlock transaksi lain pada R ditolak
- Permintaan Slock transaksi lain pada R diterima
Tapi, ada satu masalah yang dapat terjadi ketika melakukan proses
locking ini, yaitu deadlock. Yaitu, situasi dimana dua atau lebih transaksi
dalam kondisi wait-state, satu sama lain menunggu lock dilepaskan sebelum dapat
memulai. Cara penanganannya adalah :
- Deteksi dan pecahkan deadlock
- Deteksi deadlock -> wait-for-graph
- Pecahkan deadlock -> salah satu dirollback paksa
- Ostrich Algorithm -> diabaikan
Sekian, Wassalamualaikum Wr. Wb
Sumber :
Sumber :
https://simbuda.wordpress.com/2013/05/19/integritas-data-dan-transaksi-concurrency/
Komentar
Posting Komentar