CONCURENCY CONTROL
Concurrency control
merupakan proses pengaturan transaksi yang simultan pada database tanpa
menyebabkan saling mempengaruhi antara transaksi satu dengan yang lain. Akses
konkuren tidak akan bermasalah jika user hanya melakukan pembacaan data saja. Gangguan
akan terjadi jika dua atau lebih user mengakses database secara simultan dan
sedikitnya melakukan suatu perubahan (update
data), maka dapat menyebabkan ketidakkonsistenan (inconsistencies).
Ketika beberapa transaksi berjalan
secara bersamaan dalam database, properti isolasi tidak dapat dipertahankan. Untuk
itu, sistem perlu menerapkan skema concurrency-control.
Hal ini dilakukan untuk menjamin interaksi antar transaksi concurrent. Kontrol konkurensi ini didasarkan pada properti serializability.
Ada dua teknik concurrency control utama yang mengijinkan transaksi untuk berjalan
dengan aman dalam subjek paralel untuk constraint tertentu, yaitu locking
dan metode timestamp.
1.
Metode
Locking
Locking
adalah sebuah prosedur yang digunakan untuk mengendalikan akses bersamaan ke
data. Ketika sebuah transaksi sedang mengakses database, sebuah lock akan menolak akses ke transaksi
lain untuk mencegah hasil yang salah. Hal ini dilakukan untuk memastikan serializable pada transaksi-transaksi
yang sedang berjalan.
Ada dua macam lock, yaitu shared lock
dan exclusive lock yang harus
digunakan sebelum melakukan akses membaca ataupun menulis terhadap database.
a.
Shared lock.
Jika sebuah transaksi mempunyai sebuah shared lock pada sebuah item data,
transaksi tersebut dapat membaca item tapi tidak dapat mengubah datanya.
b.
Exclusive lock.
Jika sebuah transaksi mempunyai sebuah exclusive lock pada sebuah item data,
transaksi tersebut dapat membaca dan mengubah item data.
2. Timestamping
Salah satu alternatif concurrency control yang dapat
menghilangkan deadlock adalah timestamping. Secara umum, timestamping (TS) adalah penanda waktu saat transaksi terjadi. Hal ini untuk mengurutkan eksekusi transaksi
agar sama dengan eksekusi serial. Time stamp dapat berupa:
a.
waktu sistem saat
transaksi dimulai, atau
b.
penghitung logik (logical counter) yang terus bertambah
nilainya tiap kali terjadi transaksi baru.
Jika timestamp transaksi a lebih
kecil daripada timestamp transaksi b, atau TS(Ta) < TS(Tb), maka transaksi a(Ta) selalu dilaksanakan
sebelum transaksi b(Tb). Contoh: misal rekaman pada basis data memuat TS 168,
yang mengidentifikasikan transaksi dengn TS 168 adalah transaksi yang
terkemudian yang sukses meng-update
rekaman yang bersangkutan. Maka jika ada transaksi dengan TS 170 mencoba meng-update rekaman yang sama, maka update ini akan diijinkan, karena TS
yang dimiliki lebih dari pada TS rekaman. Saat transaksi ini dilakukan, TS pada
rekaman akan diatur menjadi 170. Kemudian, jika transaksi yang akan meng-update rekaman tersebut memiliki TS 165,
maka update ditolak karena TS-nya
< TS di rekaman.
Selain transaksi, item data juga
memiliki nilai time stamp. Untuk
setiap item data Q, ada 2 nilai time
stamp, yaitu:
a.
Read
time stamp atau R-timestamp(Q), yang menunjukkan nilai TS terbesar dari setiap
transaksi yang berhasil menjalankan operasi read
(Q).
b.
Write
time stamp atau W-timestamp(Q), yang menunjukkan nilai TS terbesar dari setiap
transaksi yang berhasil menjalankan operasi write
(Q).
Timestamp
ini akan selalu diperbarui ketika ada perintah baru read(Q) atau write(Q)
yang dijalankan.
untuk lebih jelas nya dapat di download materi nya di bawah ini, tapi ada yang versi bahasa inggris , hehe :D