It's something unpredictable, but in the end it's right.

Properti ACID dalam Database Transaksi

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:

  1. read(saldo_A)
  2. saldo_A := saldo_A - 20.000
  3. write(saldo_A)
  4. read(saldo_toko)
  5. saldo_toko := saldo_toko + 20.000
  6. write(saldo_toko)

Berikut adalah penjelasan properti ACID yang terjadi pada proses transaksi di atas:

  1. Atomicity requirement
  2. 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.

  3. Consistency requirement
  4. Jadi, jumlah saldo dikurangi jumlah pembelian harus sama dengan nilai tunai di tangan.

  5. Isolation requirement
  6. Isolasi dilakukan dengan menjalankan transaksi secara serial (satu demi satu). Jadi tidak boleh ada transaksi lain yang mengganggu transaksi pembelian minuman ini.

  7. Durability requirement
  8. 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.