Properti ACID dalam Database Transaksi
Apa hubungan antara ACID dan transaksi basis data?
Dalam database relasional, setiap pernyataan SQL harus dijalankan dalam lingkup transaksi.
Tanpa mendefinisikan batas-batas transaksi secara eksplisit, database akan menggunakan transaksi implisit yang membungkus setiap pernyataan individu. Transaksi implisit dimulai sebelum pernyataan dieksekusi dan berakhir (komit atau kembalikan) setelah pernyataan dieksekusi. Mode transaksi implisit umumnya dikenal sebagai autocommit.
Jadi, transaksi adalah kumpulan operasi baca / tulis yang berhasil hanya jika semua operasi yang terkandung berhasil.
Secara inheren transaksi ditandai oleh empat properti (biasanya disebut ACID):
- Atomicity
- Consistency
- Isolation
- Durability
Apakah ACID memberikan transaksi basis data atau apakah itu hal yang sama?
Untuk sistem basis data relasional, ini benar karena SQL Standard menetapkan bahwa transaksi harus memberikan jaminan ACID:
Atomicity
Atomicity ditandai dengan semua unit proses dalam transaksi dieksekusi secara lengkap atau jika gagal maka digagalkan (di-rollback) secara utuh.
Consistency
Consistency ditandai dengan data yang konsisten pada basis data.
Isolation
Isolation ditandai dengan semua unit proses dalam transaksi dieksekusi terisolir mulai dari awal hingga akhir unit proses atau tanpa konkurensi pada unit proses.
Durability
Durability ditandai dengan data yang diolah oleh transaksi yang sudah berakhir telah berhasil disimpan ke penyimpanan non-volatile (storage).
Keterkaitan antara properti
Consistency adalah hasil dari properti Atomicity, Isolation, dan Durability yang berhasil dijaga dengan baik. Properti Atomicity dan Durability menjaga agar jangan sampai data yang disimpan ke storage merupakan data hasil dari transaksi yang unit prosesnya hanya berhasil sebagian (all or nothing).
Contoh Kasus
Contoh kasus yang diambil adalah A ingin membeli minuman di toko senilai Rp. 20.000,-. Berikut adalah proses transaksinya:
- read(saldo_A)
- saldo_A := saldo_A - 20.000
- write(saldo_A)
- read(saldo_toko)
- saldo_toko := saldo_toko + 20.000
- write(saldo_toko)
Berikut adalah penjelasan properti ACID yang terjadi pada proses transaksi di atas:
- Atomicity requirement
Jika transaksi gagal setelah langkah 3 dan sebelum langkah 6, maka semua langkah akan di-rollback. Transaksi dianggap batal dan uang akan kembali ke saldo A.
- Consistency requirement
Jadi, jumlah saldo dikurangi jumlah pembelian harus sama dengan nilai tunai di tangan.
- Isolation requirement
Isolasi dilakukan dengan menjalankan transaksi secara serial (satu demi satu). Jadi tidak boleh ada transaksi lain yang mengganggu transaksi pembelian minuman ini.
- Durability requirement
Setelah transaksi berhasil diselesaikan (yaitu membayar Rp. 20.000,- telah dilakukan), perubahan yang dibuat ke dalam database harus bersifat permanen dan tahan lama meskipun ada kegagalan sistem.