Monday, November 30, 2015

Transaksi Dan Concurency

Transaksi pada basis data adalah satu atomic operasi berupa lojik pekerjaan maupun lojik recovery 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.
Ada empat elemen dalam transaksi yang biasa disingkat ACID, yaitu :
1.      Atomicity,  semua berhasil atau semua gagal
2.      Consistency,  transaksi mempertahankan konsistensi database
3.      Isolation,  transaksi terisolasi satu dengan yang lain
4.      Durability,  setelah commit update harus survive di database
Dan ada dua jenis transaksi yang paling penting dalam sistem basis data adalah :
1.      Commit, memberi tanda bahwa transaksi telah selesai. Update dibuat permanen (bahkan jika setelah commit terjadi kegagalan system)
2.      Rollback, memberi tanda bahwa transaksi gagal. Semua update harus di-undo
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 merecovery 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 :
1.      Lost update problem, ketika dua user mengupdate dua buah data yang sama
2.      Uncommited dependency problem, ketika user yang satu meretrieve data dan user yang lain merollback data tersebut
3.      Inconsistent analysis problem, ketika user yang satu meretrieve data dan user yang lain mengupdate data tersebut
Untuk menangani masalah tersebut, dilakukan proses locking, jika sebuah transaksi ingin record/resource tidak berubah dalam waktu tertentu maka dia meminta lock.
Ada dua jenis lock yaitu :
1.      Exclusive Lock (Xlock) write lock
2.      Shared Lock (Slock) read lock
Jadi 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 :
a)    Permintaan Xlock transaksi lain pada R ditolak
b)   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 :
1)   Deteksi dan pecahkan deadlock
2)   Deteksi deadlock wait-for-graph
3)   Pecahkan deadlock salah satu dirollback paksa

4)   Ostrich Algorithm diabaikan

No comments:

Post a Comment