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.
Ada empat elemen dalam transaksi yang biasa disingkat ACID, yaitu :
  • 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 :
https://simbuda.wordpress.com/2013/05/19/integritas-data-dan-transaksi-concurrency/

Komentar

Postingan Populer